ios – 为什么didReceiveRemoteNotification不被调用,但didReceiveRemoteNotification:fetchCompletionHandler当我的应用程序在前台调用?

ios – 为什么didReceiveRemoteNotification不被调用,但didReceiveRemoteNotification:fetchCompletionHandler当我的应用程序在前台调用?,第1张

概述如果我覆盖 override func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 如果我覆盖
overrIDe func application(application: UIApplication,dIDReceiveRemoteNotification userInfo: [NSObject : AnyObject],fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> VoID) {    println("hey)}

当我发送推送通知时,我成功地使用该应用在前台调用的方法.

如果我覆盖

overrIDe func application(application: UIApplication,dIDReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {    println("hey")}

在前台发送通知应用程序时,我没有收到任何方法的调用.为什么第一个工作,但第二个没有应用程序在前台?

请注意,我只是一次执行其中之一.不是同时两个.

解决方法 您应该使用回调版本,除非您需要支持ios< 7(引入时).当你使用Swift时,我预计不是这样. 旧的方法可以追溯到ios3,并且除了名称之外都被弃用:

Implement the application:dIDReceiveRemoteNotification:fetchCompletionHandler: method instead of this one whenever possible. If your delegate implements both methods,the app object calls the application:dIDReceiveRemoteNotification:fetchCompletionHandler: method.

旧版本还将根据应用程序是否有效(前景或背景)或从冷启动启动而提供不同的结果.在后一种情况下,它不会被调用,您将需要截取dIDOfficeLaunchingWithOptions的launchOptions dict来获取infoDict:

If the app is not running when a remote notification arrives,the method launches the app and provIDes the appropriate information in the launch options dictionary. The app does not call this method to handle that remote notification.

使用回调版本.适用于所有情况.您不必使用完成处理程序/块,在这种情况下,效果是相同的(更符合较新的方法).

更新

对不起,苹果说你必须尽快打电话给完成块“ – 在 *** 作系统放弃你之前你有30秒钟的时间.这可能是您的警告的根源.

As soon as you finish processing the notification,you must call the block in the handler parameter or your app will be terminated. Your app has up to 30 seconds of wall-clock time to process the notification and call the specifIEd completion handler block. In practice,you should call the handler block as soon as you are done processing the notification.

所以调用完成块:

completionHandler(UIBackgroundFetchResult.NoData)

我一直在使用这种方法,而不用调用那个完成块,没有遇到任何问题,但是我现在只需要加一个来安全.苹果建议,如果你不这样做,你的应用程序将不会出现,但实际上我没有看到.

总结

以上是内存溢出为你收集整理的ios – 为什么didReceiveRemoteNotification不被调用,但didReceiveRemoteNotification:fetchCompletionHandler当我的应用程序在前台调用?全部内容,希望文章能够帮你解决ios – 为什么didReceiveRemoteNotification不被调用,但didReceiveRemoteNotification:fetchCompletionHandler当我的应用程序在前台调用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1110806.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存