iOS8.1.2 未插入设备时不调用didReceiveRemoteNotification 方法
Posted
技术标签:
【中文标题】iOS8.1.2 未插入设备时不调用didReceiveRemoteNotification 方法【英文标题】:iOS8.1.2 didReceiveRemoteNotification method not called when device is not plugged in 【发布时间】:2015-01-06 17:02:10 【问题描述】:在ios版本是8.1.2,我发现了一个很奇怪的问题: 我实现了以下方法来处理 appDelegate 中的推送信息
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
如果您的设备未插入,则不会调用此方法。
【问题讨论】:
【参考方案1】:如果你环顾四周,你会发现其他人认为这是 iOS 7.1 beta 中的错误,在 7.1 发布版本中修复,但它可能与任何 beta、Testflight、特定 8.1.2 版本等无关,就像你在回答中所说的那样。我很确定this 是唯一正确的答案。顺便说一句,我也有同样的问题,但在 8.1.3 中,所以我想它也会再次出现在你身上。
一旦您删除应用程序,重新启动手机并安装应用程序,didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:
就可以正常调用(这解释了“使用 tesflight!”、“在 7.1.x 中它可以工作!”等),但是如果你因为收到远程通知或者没有按时调用completion handler做太多的计算,系统就不会喜欢你了,想调用的时候再调用,一般是0-30分钟后你的通知已经收到,或者很长(见下面的更新)。对我来说,有时在第一次远程通知之后就已经发生了。当然,除非设备已插入,否则它会更加可靠。
一旦您重新连接(插入)设备,系统可能会调用您的方法,通常最多需要 15 分钟才能被调用,或者如果您在一小时后推送相同的通知,它可能会立即工作,但也不确定。这真的很痛苦,但不要认为它是可以修复的,这是 Apple 创造它的方式。
更新:
最终会被调用。我在 18.13h 发送了一个远程通知,直到第二天 09.41h 才呼叫didReceiveRemoteNotification:fetchCompletionHandler:
。因此,就我而言,调用该方法需要 15.5 小时。
就我而言,原因可能是我使用远程通知在后台启动和停止位置跟踪,这很繁重。
【讨论】:
【参考方案2】:在找到another answer 关于这个问题后,我确认这确实是 iOS 8.1.2 中的一个错误。 我很惊讶在互联网上没有太多关于它的东西。
但是通过我的测试,和provision profile没有关系,使用苹果的TestFlight是不行的。
【讨论】:
以上是关于iOS8.1.2 未插入设备时不调用didReceiveRemoteNotification 方法的主要内容,如果未能解决你的问题,请参考以下文章
未调用 UserNotifications 扩展服务 UNNotificationAction didReceive 操作委托。
应用程序未运行时未调用本地通知的 UNUserNotificationCenterDelegate didReceive 响应
QuickBlox:没有快速调用 didReceive 会话方法
WatchOS 动态通知不适用于 Xcode 11.1 及更高版本 - 未调用 didReceive
iOS:didCompleteWithError、didReceive 响应未由 URLSession.uploadTask 触发