Ionic2:FCMPlugin.onNotification似乎永远不会激发

时间:2016-12-03 09:28:20

标签: android cordova ionic-framework ionic2 cordova-plugins

我正在尝试在我的Ionic 2应用程序中使用cordova fcm plugin。我使用..

安装了插件
⁠⁠⁠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拍摄一些消息。

如果我的Ionic应用程序已关闭,我在我的设备上获取nofication,如果我点击它,它 打开应用程序,所以这部分似乎工作。

但是,当应用程序处于打开状态时,我会一直调用onNotification

有谁知道这里有什么问题吗?我打电话来正确设置吗?

提前感谢您的帮助!

[编辑]

Jorge的回答是我需要click_action,你无法通过控制台发送。{1}}所以我现在正试图通过POSTMAN发送。这个doco似乎非常差,或者至少很难在一个地方找到所有东西。例如,在标题中包括什么。

无论如何,通过使用POSTMAN的试错,我使用以下标题..

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]

我注意到POSTMAN 返回错误

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

然后我尝试了fiddler,并得到了一个不同的错误(尽管仍然返回了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调用返回到的标记ID到"到#34;字段。

任何进一步的想法将不胜感激! 谢谢

1 个答案:

答案 0 :(得分: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",因为这是点击通知时应触发的意图。

希望它有所帮助!