ios11 中的离子静默推送中断?即使 content-available = 1 也会显示空白通知
Posted
技术标签:
【中文标题】ios11 中的离子静默推送中断?即使 content-available = 1 也会显示空白通知【英文标题】:ionic silent pushes broken in ios11? blank notifications displayed even though content-available = 1 【发布时间】:2017-09-25 16:44:49 【问题描述】:我似乎在 ios11 中遇到了回归。我有一个应用程序每小时接收 silent 推送通知(使用"content-available": 1
推送通知)以刷新自身。它已经工作多年了,没有任何问题。
但是,在 iOS11 更新后,我的用户开始报告他们每小时都看到可见通知,但没有消息 - 例如
我验证了这一点。
iOS10 上的手机。让手机通宵运行 - 没有空白消息。 升级到 iOS11无需重新安装应用 - 空白消息我给didReceiveRemoteNotification
加了一个断点,发现通知在didReceiveRemoteNotification
开始运行之前就显示出来了
didReceiveRemoteNotification
的 userInfo
参数是
aps =
alert =
title = "e-mission-phone";
;
"content-available" = 1;
;
notId = 1506359243823816;
payload =
notId = 1506359243823816;
;
所以基本上,iOS11 似乎改变了它确定通知为静默并显示之前隐藏在 iOS10 中的通知的方式。
我找不到任何文档表明这种行为应该已经改变,或者新的有效负载应该是什么样子。有没有其他人看到这个?我正在使用 phonegap-push-plugin 接收通知和 ionic push 发送通知。
【问题讨论】:
【参考方案1】:回答我自己的问题,希望对其他人有所帮助。这是由于 ionic push 和 APNS 之间的集成问题,以及 iOS10 和 iOS11 之间 APNS 行为的变化。基本上,如果用户没有指定,离子推送会添加一个警报标题,而 iOS10 显然使用在 content-available: 1
时忽略该标题,但在 iOS11 中不再这样做。
edit #1:我最初认为可以通过降低消息的优先级来解决这个问题,但这并没有帮助。如果没有提供,ionic 真的需要停止设置标题。我已经提交了 ionic 支持票,但我不确定何时会收到回复。
编辑#2:通过大量实验,我可以确认,即使将警报标题设置为""
,也无法阻止 ionic 添加警报标题。包括配置消息在内的详细信息位于https://github.com/e-mission/e-mission-phone/issues/290#issuecomment-332049861,但基本上,如果传递给 ionic 的规范有标题,则使用它,否则 ionic 自动添加标题。
【讨论】:
【参考方案2】:来自Apple push notifications doc:
发送静默通知需要特殊配置 通知的有效负载。如果您的有效负载未配置 正确地,通知可能会显示给用户而不是 在后台传送到您的应用程序。在你的有效载荷中,使 确保满足以下条件:
payload 的 aps 字典必须包含 content-available 键 值为 1。
payload 的 aps 字典不能包含 警报、声音或徽章键。
重要的部分是 payload 的 aps 字典不能包含 alert 键。
这不是新的,以前就是这样,所以可能在 iOS 10 上它忽略了它,现在在 iOS 11 上它显示它。您应该从有效负载中删除警报。
【讨论】:
我在下面回答了我自己的问题。离子推送(这是我使用的推送服务)正在自动添加警报 - 我没有在我的配置中指定它。我已经提交了一个帮助问题,要求他们修复它,但我不确定他们什么时候会回复。 我已经编辑了标题以澄清这只发生在离子推送中以上是关于ios11 中的离子静默推送中断?即使 content-available = 1 也会显示空白通知的主要内容,如果未能解决你的问题,请参考以下文章
静默推送通知是不是能够唤醒 ios 中处于未运行状态的应用程序?