静默推送通知不起作用
Posted
技术标签:
【中文标题】静默推送通知不起作用【英文标题】:Silent push notification is not working 【发布时间】:2015-01-15 09:16:39 【问题描述】:我正在尝试实现静默推送通知。我需要将静默推送通知数据保存在应用程序的数据库中,以便在用户使用该应用程序时向用户显示看不见的通知及其计数。 我正在使用 Xcode 6.1 并针对 ios 7 及更高版本的设备。目前,我正在使用开发证书进行推送通知。 我已经在目标项目功能的后台模式下检查了远程通知,并且信息列表的后台模式在所需的后台模式下具有“应用程序下载内容以响应推送通知”。
在我的AppDelegate.m
中,我可以注册远程通知并获得设备令牌。现在,当我发送推送通知时,当应用程序处于前台时会调用我的委托方法,但当应用程序处于后台/未运行时,尽管我在横幅中收到推送通知,但不会调用它。
我已经在AppDelegate.m
实现了这个方法
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
NSLog(@"Received push notification");
我发送的有效载荷如下所示:
aps:
content-available: 1
我尝试添加优先级、声音等。但没有任何帮助。 当应用程序在后台运行或未运行时,有人可以帮我弄清楚如何在应用程序中保存静默推送通知数据吗? 请帮我解决这个问题。
【问题讨论】:
【参考方案1】:因此,您绝对应该能够在后台接收它们,但请注意,如果用户故意从任务切换器中终止您的应用程序,那么它将不再获取它们。
iOS 7 及更高版本的回调如你所说,但在此之前是
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
您似乎不太可能针对 iOS 6,所以我会选择格式错误的推送数据包或后台推送设置不完全正确。
【讨论】:
【参考方案2】:您是否将应用程序 info.plistUIBackgroundModes 设置为 remote-notificiton?
那也加这个方法帮你调试
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
//Success
handler(UIBackgroundFetchResultNewData);
【讨论】:
【参考方案3】:静默推送通知不同于面向用户的通知。它们被视为低优先级,并且受到 APNS 和 iOS 的速率限制。在实践中,这意味着静默通知只能不经常发送,并且在将它们传递给应用程序之前可能会有很长的延迟。
您所描述的行为可能是设备上的唤醒速率限制器。 iOS 限制启动应用程序以执行后台工作的频率。这是为了防止滥用行为 - 某些应用程序可能希望在后台保持活动状态,从而永远耗尽电池电量。
连接 Xcode 时唤醒速率限制器未激活,这使得静默通知似乎立即传递。
我的iOS Notifications book 有一章很长,描述了速率限制器以及如何使用它们。
【讨论】:
以上是关于静默推送通知不起作用的主要内容,如果未能解决你的问题,请参考以下文章