什么是静默推送通知?设备什么时候收到?

Posted

技术标签:

【中文标题】什么是静默推送通知?设备什么时候收到?【英文标题】:What is Silent Push Notification? When does the device receive it? 【发布时间】:2016-04-18 13:10:03 【问题描述】:

我想清除通知托盘中的本地通知。为此 实施后,我正在考虑使用静默推送通知。所以我想要 确认设备何时收到它以及我可以用它做什么?

【问题讨论】:

【参考方案1】:

它们可用于在不通知用户的情况下通知应用程序新内容。应用程序将在后台唤醒,而不是显示通知警报(如果用户强制退出,ios 不会自动启动您的应用程序)并且将调用application:didReceiveRemoteNotification:fetchCompletionHandler:。然后,您就有机会为用户透明地处理任何信息:

下载部分内容 同步一些元素, 当用户打开应用程序时直接在应用程序内通知用户

请注意,您的时间限制为 30 秒。

配置静音通知

要支持静默远程通知,请将远程通知值添加到 Info.plist 文件中的 UIBackgroundModes 数组中。要了解有关此数组的更多信息,请参阅 UIBackgroundModes。

<key>UIBackgroundModes</key>
<array>
    <string>remote-notification</string>
</array>

配置静默通知

aps 字典也可以包含 content-available 属性。值为 1 的 content-available 属性让远程通知充当静默通知。当静默通知到达时,iOS 会在后台唤醒您的应用程序,以便您可以从服务器获取新数据或进行后台信息处理。用户不会被告知因静默通知而产生的新信息或更改信息,但他们可以在下次打开您的应用时了解这些信息。

对于静默通知,请注意确保 aps 字典中没有警报、声音或标记负载。如果您不遵循此指导,错误配置的通知可能会受​​到限制,并且不会在后台传递到应用程序,而是向用户显示而不是静默

【讨论】:

如果应用被强行杀死,它会唤醒应用吗? 用户是否仍需要授予接收这些通知的权限? 如果应用被强制关闭,iOS 会重新启动它以进行静默推送吗? 静默推送无需用户授权。不过,他们确实必须允许 Background Fetch 首选项。如果用户强制退出应用程序,则静默推送不会在后台启动应用程序。 您好我做了 poc,如果应用程序也被强制终止,静默推送通知将其唤醒并运行 30 秒【参考方案2】:

当您发送静默推送通知时,如果应用程序被挂起,则系统会唤醒或启动您的应用程序并在调用该方法之前将其置于后台运行状态,但如果应用程序被用户手动杀死,则不会唤醒.

application:didReceiveRemoteNotification:fetchCompletionHandler:

当您发送静默推送通知并且您的应用有最多 30 秒的挂钟时间来执行下载或任何其他类型的操作并调用指定的完成处理程序块时,将调用此方法。如果没有及时调用处理程序,您的应用将被暂停。

如果您想发送静默推送通知,那么您的通知负载应该是这样的:


    "aps" = 
        "content-available" : 1,
        "sound" : ""
    ;
    // You can add custom key-value pair here...

【讨论】:

我相信包含 sound : "" 的建议现在已经过时 - 这是解决旧版本 iOS 中的错误的一种方法。 @Honey。抱歉回复晚了。在 iOS 9 之前,相同的委托方法也将调用正常的推送通知。从 iOS 10 开始,我们有一个新的推送通知处理程序方法。您可以在 iOS 10 的以下方法中处理这两种推送通知.. - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler @Arpit 您的行“如果应用程序暂停或未运行,则系统会唤醒或启动您的应用程序并将其置于后台运行状态”。暂停是可以的,但在不运行的情况下,我认为系统不会唤醒或启动应用程序。 @RajanMaheshwari 是的,它不会工作。我已经更新了谢谢。 @Arpit didReceiveNotificationResponse 不用于静默通知。因为没有什么可以回应的。它是沉默的,你永远不会知道它发生了。这仅在用户点击/与通知交互时使用...

以上是关于什么是静默推送通知?设备什么时候收到?的主要内容,如果未能解决你的问题,请参考以下文章

如果用户禁用它们,如何发送静默推送通知?

在 iOS 中处理静默推送通知的最佳方法是啥

Nodejs 静默推送通知在 iOS 13 中不起作用

当应用程序处于终止状态时,iOS 静默推送通知不会收到

选择退出用户的静默推送通知

iOS 静默推送通知失败并显示消息