2016-12-03 91 views
0

我正嘗試在我的Ionic 2應用程序中使用cordova fcm plugin。我已經安裝使用。該插件Ionic2:FCMPlugin.onNotification似乎不會觸發

⁠⁠⁠ionic plugin add cordova-plugin-inappbrowser 
ionic plugin add cordova-plugin-fcm 
ionic plugin add cordova-plugin-velda-devicefeedback 

,並添加以下代碼app.component.ts

declare var FCMPlugin; 
    @Component({ 
     templateUrl: 'app.html' 
    }) 
    export class MyApp { 
     rootPage = TabsPage; 

     constructor(platform: Platform, private toastCtrl: ToastController) { 
     platform.ready().then(() => { 
      StatusBar.styleDefault(); 
      Splashscreen.hide(); 
      this.setupNotifications(); 
     }); 
     } 

     private setupNotifications() { 
     try { 
      let fcmPlugin = FCMPlugin; 
      fcmPlugin.getToken(
      function (token) { 
       this.log(token); 
      }, 
      function (err) { 
       this.log("error retrieving token: " + err); 

      }); 

      fcmPlugin.onNotification(function (notification) { 
      this.log("got notification"); 
      this.log(JSON.stringify(notification)); 
      }, function (error) { 
      this.log(error); 
      }); 
     } 
     catch (exception) { 
      this.log(exception); 
     } 
     } 

     private log(m: any): void { 
     let toast = this.toastCtrl.create({ 
      message: m, 
      duration: 5000 
     }); 
     toast.present(); 
     } 

我構建Android應用程序並安裝我的Android手機上。

我在運行應用程序時沒有收到任何「未定義」錯誤。然後我使用Firebase message console來拍攝幾條消息。

如果我的離子應用程序被關閉,我得到我的設備上nofication,如果我點擊它,它確實打開應用程序,所以這部分似乎工作。

但是,當應用程序打開時,我做而不是得到onNotification調用,永遠。

有沒有人知道這裏會出現什麼問題?我打電話正確設置了嗎?

在此先感謝您的幫助!

[編輯]

由豪爾赫的答案的建議是我所需要的click_action你無法通過控制檯發送。所以我現在試圖通過POSTMAN發送。這個doco似乎很差,或者至少很難在一個地方找到所有的東西。例如在標題中包含什麼。

總之,通過試驗和錯誤使用郵差我用下面的標題..

Access-Control-Allow-Origin: * 
Content-Type: application/json 
Authorization: key=myappkey 

,我使用以下網址https://fcm.googleapis.com/fcm/send和身體下面...

{ 
     "notification":{ 
     "title":"Notification title", 
     "body":"Notification body", 
     "sound":"default", 
     "click_action":"FCM_PLUGIN_ACTIVITY", 
     "icon":"fcm_push_icon" 
     }, 
     "data":{ 
     "param1":"value1", 
     "param2":"value2" 
     }, 
     "to":"", 
     "priority":"high", 
     "restricted_package_name":"" 
    } 

POSTMAN返回200,但是我的設備上根本沒有得到任何東西,無論應用程序是否正在運行。

[EDIT2]

我注意到郵差返回一個錯誤

 { 
     "multicast_id": 5810330647165506849, 
     "success": 0, 
     "failure": 1, 
     "canonical_ids": 0, 
     "results": [ 
     { 
      "error": "InvalidRegistration" 
     } 
     ] 
    } 

於是我在提琴手嘗試,並得到一個不同的錯誤(還是200點的狀態,雖然返回)

 HTTP/1.1 200 OK 
    Access-Control-Allow-Origin: * 
    Content-Type: application/json 
    X-Cloud-Trace-Context: 2ae6d1bccf7e610bf4c91bd7ef482b5e;o=1 
    Date: Sun, 04 Dec 2016 14:43:52 GMT 
    Server: Google Frontend 
    Content-Length: 62 
    Alt-Svc: quic=":443"; ma=2592000; v="36,35,34" 

    {"result":1, "message":"JSONObject[\"recipient\"] not found."} 

我也已經添加了從調用getToken返回到「to」字段返回的令牌id。

任何進一步的想法將不勝感激! 謝謝

+1

你正在試圖android嗎? – Jorge

+0

啊,這是在Android上。 – peterc

+0

你在'「字段中設置了一個fcmToken嗎?我已經多次從郵遞員那裏嘗試過,對我來說它確實很好。 – Jorge

回答

1

我想也許你只是忘了將click_action字段添加到通知。它必須是這樣的:

{ 
    "notification":{ 
    "title":"Notification title", //Any value 
    "body":"Notification body", //Any value 
    "sound":"default", //If you want notification sound 
    "click_action":"FCM_PLUGIN_ACTIVITY", //Must be present for Android 
    "icon":"fcm_push_icon" //White icon Android resource 
    }, 
    "data":{ 
    "param1":"value1", //Any data to be retrieved in the notification callback 
    "param2":"value2" 
    }, 
    "to":"/topics/topicExample", //Topic or single device 
    "priority":"high", //If not set, notification won't be delivered on completely closed iOS app 
    "restricted_package_name":"" //Optional. Set for application filtering 
} 

確保你已經包括"click_action":"FCM_PLUGIN_ACTIVITY"因爲這是應該的通知,當點擊被解僱的意圖。

希望它有幫助!

+0

謝謝你,這可能是問題。我只是使用Firebase的通知控制檯,因此可能不包括click_action。有一個插件提到的測試工具(即https://cordova-plugin-fcm.appspot.com/),但我無法讓它工作。我已經輸入了Firebase項目設置(Web API Key)中提供的API密鑰,但該工具持續報告「API API無效」。你有沒有使用這個工具(即它是否工作,如果是的話,任何想法爲什麼無效的API密鑰)? (也許它包含'click_action':'FCM_PLUGIN_ACTIVITY' – peterc

+0

抱歉,您無法使用Firebase控制檯,因此您無法使用它發送click_action。對於測試,您必須使用自己的後端或某個可讓您使用的應用程序click_action。我完全相信這是你的問題 – Jorge

+0

是的,只要我能證實這可以解決這個問題,就會接受,目前試圖找到如何使用這個'click_action'來測試,現在試圖通過Postman發送(so可以添加'click_action')。可以通過(使用與上述完全不同的結構)獲得消息,但添加'click_action'仍然不能使其工作。可能需要編輯問題以添加詳細信息 – peterc

相關問題