繁体   English   中英

应用被杀死时是否收到 iOS 静默通知

[英]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 推送消息,请参见此处:

IP 电话 (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM