我正在尝试实现静默推送通知。我需要在应用程序的数据库中保存静默推送通知数据,以便在用户使用应用程序时向用户显示看不见的通知及其计数。 我正在使用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
}
}
我尝试添加优先级,声音等。但没有任何帮助我。 当应用程序在后台运行或未运行时,有人可以帮助我弄清楚如何在应用程序中保存静音推送通知数据吗? 请帮我解决这个问题。
答案 0 :(得分:0)
所以,你绝对应该能够在后台接收它们,但是要注意,如果用户故意从任务切换器中杀死你的应用程序,那么它就不会再得到它们了。
对于iOS 7及更高版本,回调就像你说的那样,但在此之前就是
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
似乎你不太可能以iOS 6为目标,所以我会选择格式错误的推送数据包或后台推送设置不是很正确。
答案 1 :(得分:0)
您是否将应用程序info.plistUIBackgroundModes设置为remote-notificiton?
然后还添加此方法以帮助您调试
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
//Success
handler(UIBackgroundFetchResultNewData);
}
答案 2 :(得分:0)
静音推送通知与面向用户的通知不同。它们被视为低优先级,并且受APNS和iOS的速率限制。实际上,这意味着静默通知只能很少发送,并且在将它们传递到应用程序之前可能会有很长的延迟。
您描述的行为很可能是设备上的唤醒速率限制器。 iOS限制了启动应用程序执行后台工作的频率。这是为了防止滥用行为-某些应用可能希望在后台保持活动状态,从而永远耗尽电池电量。
连接了Xcode时,唤醒速率限制器不处于活动状态,这使静默通知似乎立即被传递。
我的iOS Notifications book有很长的一章,描述了速率限制器以及如何使用它们。