![](/img/trans.png)
[英]iOS Silent Push Notification does not receive when app in killed state
[英]Is a iOS silent notification received when the app is killed
当发送带有"content-available": "1"
的后台推送到被用户杀死的应用程序时,该应用程序不会启动到后台模式并且application:didReceiveRemoteNotification:fetchCompletionHandler:
不被称为Apple doc说:
使用此方法为您的应用程序处理传入的远程通知。 [...]此外,如果您启用了远程通知后台模式,系统会启动您的应用程序(或将其从挂起状态唤醒)并在远程通知到达时将其置于后台状态。 但是,如果用户强制退出,系统不会自动启动您的应用程序。
我的问题是:有没有办法在用户下次启动应用程序时访问这个静默推送有效负载?
我尝试使用didFinishLaunchingWithOptions
方法的launchOptions
,但它们不包含推送有效负载。
NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
我的用例是我只依靠推送通道来接收应用程序的数据,但应用程序无法拉取它们。
简短的回答是:不,你不能。
您也将无法使用 VoIP 推送,唯一的选择是使用带有推送通知服务扩展的常规推送。 在您的应用程序和此扩展程序之间共享一个钥匙串,在收到通知时将推送有效负载保存在钥匙串中,并在它进入前台时用您的应用程序检索它。 缺点是您需要向用户呈现视觉通知,但它可以是静音的,您可以选择呈现您想要的任何文本(最佳选择取决于您的应用程序的用途以及此通知的目的)。
您可以使用 VoIP 推送消息,请参见此处:
使用 PushKit 接收 VoIP 推送有很多优点:
- [...]
- 如果您的应用程序在收到 VoIP 推送时未运行,则会自动重新启动。
- [...]
请注意,您的应用程序必须具有启用 VoIP 功能的后台模式,如果滥用,这可能会成为应用程序商店批准的问题。
查看文档,您似乎应该实现此方法:
可选的 func 应用程序(_ 应用程序:UIApplication,didReceiveRemoteNotification userInfo:[AnyHashable:Any],fetchCompletionHandler completionHandler:@escaping(UIBackgroundFetchResult)-> Void)
在该方法中,编写代码以存储有效负载 (userInfo)。 也许将它暂时存储在 userDefaults 中。 然后当应用程序启动时,检查有效负载是否可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.