我希望能够获得iOS设备上收到远程通知的日期。
我正在尝试确定我的服务器触发推送通知到用户设备收到推送通知之间的延迟时间。
答案 0 :(得分:1)
在应用程序委托的application:didReceiveRemoteNotification:fetchCompletionHandler:
中,使用当前日期创建NSDate
,然后将其保存在NSUserSettings中的数组中或直接保存在内部。
通过这种方式,您甚至可以获得收到通知的历史记录,并可以在以后处理它们。
仅当您将{1}}键值1添加到通知有效内容中时, application:didReceiveRemoteNotification:fetchCompletionHandler:
才会在后台调用。
来自Apple文档:
对于触发下载操作的推送通知,通知的有效负载必须包含内容可用密钥,其值设置为1.当存在该密钥时,系统会在后台唤醒应用程序(或将其启动到后台)并调用app delegate的应用程序:didReceiveRemoteNotification:fetchCompletionHandler:method。您对该方法的实施应下载相关内容并将其集成到您的应用中。 https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
答案 1 :(得分:1)
如果您控制连接到APNS的后端,并在didReceiveRemoteNotification中解析后端,则可以向通知有效内容添加自定义发送日期字段。显然,这可以让你获得发送远程通知但没有收到的日期,但一般情况下差异很小。
建议使用“内容可用”密钥的解决方案可能不是您想要的,因为它会在后台启动此类通知的应用程序,并可能导致您的应用程序在Settings.app>中排名为顶级电池违规者。电池>电池使用情况它也将停止在低功耗模式下工作,或者如果用户禁用后台应用程序刷新。
后台应用刷新和'内容可用'键适用于在后台下载内容的应用。如果您的应用没有这样做,请不要使用它们。
答案 2 :(得分:0)
在didReceiveRemoteNotification中创建并初始化NSDate对象。 NSDate * notificationDate = [NSDate date]应该有效。
答案 3 :(得分:0)
通过查看系统(非app)控制台,您可以看到何时收到推送通知。似乎较新的iOS版本会过滤日志,但如果您事先终止了应用程序,则会看到类似这样的内容
Jun 1 17:55:38 Aarons-iPhone-6-Plus SpringBoard[657] <Warning>: High Priority Push: net.test.test - App killed –