无声推送通知无效

时间:2015-01-15 09:16:40

标签: ios objective-c iphone apple-push-notifications

我正在尝试实现静默推送通知。我需要在应用程序的数据库中保存静默推送通知数据,以便在用户使用应用程序时向用户显示看不见的通知及其计数。 我正在使用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 
       }
}

我尝试添加优先级,声音等。但没有任何帮助我。 当应用程序在后台运行或未运行时,有人可以帮助我弄清楚如何在应用程序中保存静音推送通知数据吗? 请帮我解决这个问题。

3 个答案:

答案 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有很长的一章,描述了速率限制器以及如何使用它们。