Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用程序被终止时是否收到iOS静默通知_Ios_Apple Push Notifications - Fatal编程技术网

应用程序被终止时是否收到iOS静默通知

应用程序被终止时是否收到iOS静默通知,ios,apple-push-notifications,Ios,Apple Push Notifications,当使用“内容可用”:“1”向被用户杀死的应用程序发送后台推送时,应用程序不会启动到后台模式,并且应用程序:DidReceiveMemotentification:fetchCompletionHandler:不会被称为: 使用此方法处理应用程序的传入远程通知。[…]此外,如果您启用了远程通知后台模式,系统将启动您的应用程序(或将其从挂起状态唤醒),并在远程通知到达时将其置于后台状态。 但是,如果用户强制退出,系统不会自动启动您的应用。 我的问题是:有没有办法在用户下次启动应用程序时访问此静默推送

当使用
“内容可用”:“1”
向被用户杀死的应用程序发送后台推送时,应用程序不会启动到后台模式,并且
应用程序:DidReceiveMemotentification:fetchCompletionHandler:
不会被称为:

使用此方法处理应用程序的传入远程通知。[…]此外,如果您启用了远程通知后台模式,系统将启动您的应用程序(或将其从挂起状态唤醒),并在远程通知到达时将其置于后台状态。 但是,如果用户强制退出,系统不会自动启动您的应用。

我的问题是:有没有办法在用户下次启动应用程序时访问此静默推送负载

我尝试使用
didfishlaunchingwithoptions
方法的
launchOptions
,但它们不包含推送有效负载

NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];

我的使用案例是,我只依赖推送通道接收应用程序的数据,但应用程序无法拉取数据

查看文档,您似乎应该实现以下方法:

可选func应用程序(application:UIApplication, DidReceiveEmoteNotification用户信息:[AnyHashable:Any], fetchCompletionHandler completionHandler:@escaping(UIBackgroundFetchResult)->Void


在该方法中,编写代码来存储有效负载(userInfo)。可能暂时将其存储在userDefaults中。然后,当应用程序启动时,检查负载是否可用

您可以使用VoIP推送消息,请参见此处:

使用PushKit接收VoIP推送有许多优点:

  • [……]
  • 如果接收到VoIP推送时应用程序未运行,则会自动重新启动
  • [……]

请注意,您的应用程序必须具有启用VoIP功能的后台模式,如果被误用,这可能是app store批准的问题。

简短回答是:不,您不能

您也将无法使用VoIP推送,唯一的选择是使用带有推送通知服务扩展的常规推送。在应用程序和此扩展程序之间共享密钥链,在收到通知时将推送有效负载保存在密钥链中,并在应用程序进入前台时将其检索。
缺点是,您需要向用户显示一个可视通知,但它可以是静默的,并且您可以选择显示您想要的任何文本(最佳选择取决于您的应用程序的功能以及此通知的目的)。

依赖推送可能是个坏主意,如果用户拒绝推送通知的权限怎么办?或随后将其关闭?用户权限不会影响静默推送。即使用户关闭此推送通知,应用程序仍然可以接收静默payloadsAh。那我今天学到了新东西@简,你找到什么了吗?我现在有点像这样?在这种情况下,我应该使用什么策略?当应用程序被终止时,没有办法接收任何远程推送,所以你必须接受:)我认为苹果是在“设计”这样做的。我确实实现了这种方法,但当应用程序终止时,它不会被调用。我引用的文档是使用这种方法的文档,您启用了“推送通知”选项,并在选择Xcode项目时选中了“功能”选项卡中的“后台获取”和“远程通知”复选框?是的。“正常”背景无声通知工作正常。我只是想问,是否有办法在下一个应用程序启动时获取有效负载,以防用户杀死应用程序。是的,我也在关注这个VoIP推送。这不是只保留给真正做VoIP的应用程序吗?我相信如果我的应用程序根本不提供VoIP功能,我就不能使用PushKit,对吗?