首页 > 解决方案 > `on('notification')` 在应用未运行时不会在 iOS 上触发

问题描述

phonegap-plugin-push在我的 ionic3 应用程序上使用它,并且在 iOS 平台上遇到了这个问题(android 还可以)。当应用程序处于后台/前台时,一切都按预期工作。但是,当应用程序未运行时,我会在通知托盘上收到消息,但点击通知或应用程序图标都不会触发on('notification')事件,它只是运行并忽略传入的通知。

我正在使用{ ... content-available: 1}文档中建议的 aps json 消息,但它似乎没有任何效果(尽管它确实对 Android 有影响),即使设备收到,离子应用程序本身也不会收到消息并将其展示在托盘上。

下面,我展示了我的配置和发送到推送服务的示例消息。如果有人对如何解决这个问题有任何想法,我将不胜感激,我已经在 ios 8.x 和 ios 11.x 上进行了测试,两者都呈现出相同的行为。

const options: PushOptions = {
    android: {
        senderID: '*************',
        icon: 'ic_stat_ic_notification'
    },
    ios: {
        alert: 'true',
        badge: 'true',
        sound: 'true'
    },
    windows: {}
};

platform.ready().then(() => {
    push.on('registration').subscribe((data: EventResponse) => {
        // register data.registrationId
    });

    push.on('notification').subscribe((data: EventResponse) => {
        alert(data.message)
    });
});

示例消息:

{
    "aps": {
      "alert": "This is a Push",
      "badge": 1,
      "content-available": 1
    },
    "payload": {
      "type": "news"
    }
}

标签: iosionic3phonegap-plugin-push

解决方案


这评论太长了。这更像是一个间接的答案。

1)或应用程序图标触发 on('notification') 事件<--这是预期的。想象一下,您的应用刚刚收到 10 条通知。它应该如何知道您打算打开哪个通知?

2)既不点击通知<-这应该会触发您的代码中的某些内容。你didReceiveNotificationResponse实施了吗?这会被调用吗?或者您的 didFinishLaunching 是否使用remoteNotification密钥启动?你的application(_:didReceiveRemoteNotification:fetchCompletionHandler:)那个被调用怎么样?


推荐阅读