2

我似乎在 iOS11 中遇到了回归。我有一个应用程序,它每小时接收一次静默推送通知(带有 的推送通知"content-available": 1)以刷新自身。它已经工作了多年,没有任何问题。

但是,在 iOS11 更新之后,我的用户开始报告他们每小时都看到没有消息的可见通知 - 例如

我验证了这一点。

  • iOS10上的手机。让电话通宵运行 - 没有空白消息。
  • 升级到 iOS11无需重新安装应用程序- 空白消息

我加了一个断点,发现在开始运行didReceiveRemoteNotification之前就显示了通知didReceiveRemoteNotification

userInfo参数didReceiveRemoteNotification

{
    aps =     {
        alert =         {
            title = "e-mission-phone";
        };
        "content-available" = 1;
    };
    notId = 1506359243823816;
    payload =     {
        notId = 1506359243823816;
    };
}

所以基本上,看起来 iOS11 改变了它确定通知静音并显示以前隐藏在 iOS10 中的通知的方式。

我找不到任何文档表明这种行为应该已经改变,或者新的有效载荷应该是什么样子。有没有其他人看到这个?我正在使用 phonegap-push-plugin 接收通知和 ionic push 发送通知。

4

2 回答 2

1

回答我自己的问题,希望它可以帮助别人。这是由于 ionic push 和 APNS 之间的集成问题,以及 iOS10 和 iOS11 之间 APNS 行为的变化。基本上,如果用户未指定,离​​子推送会添加一个警报标题,而 iOS10 显然习惯于忽略该标题,content-available: 1但在 iOS11 中不再如此。

编辑#1:我最初认为这可以通过降低消息的优先级来解决,但这并没有帮助。如果没有提供,ionic 真的需要停止设置标题。我已经提交了 ionic 支持票,但我不确定何时会收到回复。

编辑#2:我可以通过大量实验确认,即使将警报标题设置为"". 详细信息,包括配置消息,位于https://github.com/e-mission/e-mission-phone/issues/290#issuecomment-332049861,但基本上,如果传递给 ionic 的规范有一个标题,它是使用,否则,离子自动添加标题。

于 2017-09-25T19:49:08.040 回答
0

来自Apple 推送通知文档

发送静默通知需要对通知的有效负载进行特殊配置。如果您的有效负载配置不正确,则通知可能会显示给用户,而不是在后台传送到您的应用程序。在您的有效负载中,确保满足以下条件:

有效负载的 aps 字典必须包含值为 1 的内容可用键。

有效负载的 aps 字典不得包含警报、声音或徽章键。

重要的部分是 有效载荷的 aps 字典不能包含警报键。

这不是什么新鲜事,以前就是这样,所以可能在 iOS 10 上它会忽略它,而现在在 iOS 11 上它会显示它。您应该从有效负载中删除警报。

于 2017-09-26T11:07:50.983 回答