应用程序被终止/关闭时,IONIC 5 FCM插件onNotification不触发IOS和Android

问题描述

我在两个平台上都使用FCM插件https://ionicframework.com/docs/native/fcm)遇到了问题,问题是当应用关闭/被杀死时,我无法处理通知 onNotification()方法未触发(在背景和前景中均能正常工作)

this.fcm.onNotification().subscribe((payload) => {
          if (payload.wasTapped) {
            console.log('Notification received in background');
          } else {
            console.log('Notification received in foreground');
          }
          console.log('Notification payload: ',payload);
  });

通知主体在后台前台(两个平台)均能正常工作:

{
 "to" : <device-key>,"collapse_key" : "app-key","notification" : {
     "body" : "body","title": "title"
 },"data" : {"parameter":"1"},"android": {
    "notification": {
      "click_action": "FCM_PLUGIN_ACTIVITY"
    }
  }
}

用于IOS环境的离子信息输出

Ionic:

   Ionic CLI                     : 6.11.10 (/usr/local/lib/node_modules/@ionic/cli)
   Ionic Framework               : @ionic/angular 5.3.3
   @angular-devkit/build-angular : 0.901.12
   @angular-devkit/schematics    : 9.1.12
   @angular/cli                  : 9.1.12
   @ionic/angular-toolkit        : 2.3.3

Cordova:

   Cordova CLI       : 10.0.0
   Cordova Platforms : ios 6.1.1
   Cordova Plugins   : cordova-plugin-fcm-with-dependecy-updated: ^7.3.1

System:

   ios-sim : 8.0.2
   NodeJS  : v14.13.0 (/usr/local/Cellar/node/14.13.0/bin/node)
   npm     : 6.14.8
   OS      : macOS Catalina
   Xcode   : Xcode 12.0.1 Build version 12A7300

解决方法

我相信您的订阅是在构造函数内或在 onInit 函数内。

应用是在前台还是后台都没有关系,因为应用正在运行,订阅会被调用。

但是当应用程序被杀死时,订阅如何被调用?。收到通知后,点按它。然后只有应用程序启动。仅在应用启动后,订阅才有效。

您需要做的是,在应用启动时调用 fcm.getInitialPushPayload()

将以下内容放入构造函数中。

this.platform.ready().then(() => {

    this.fcm.getInitialPushPayload().then((payload) => {
  
      if(payload.wasTapped) {
        console.log("Received FCM when app is closed -> ",JSON.stringify(payload));
        // call your function to handle the data
        this._handlePushNotificationData(payload);
      }                                 
      
    });

}

现在,当应用程序关闭时,当您点击收到的通知时,应用程序将启动并调用上述函数。然后您的数据将在回调中可用。