Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 静默推送通知不起作用_Ios_Objective C_Iphone_Apple Push Notifications - Fatal编程技术网

Ios 静默推送通知不起作用

Ios 静默推送通知不起作用,ios,objective-c,iphone,apple-push-notifications,Ios,Objective C,Iphone,Apple Push Notifications,我正在尝试实现静默推送通知。我需要将静默推送通知数据保存在应用程序中的数据库中,以便在用户使用应用程序时向用户显示未看到的通知及其计数。 我使用的是Xcode 6.1,目标是iOS 7及更高版本的设备。目前,我正在使用开发证书进行推送通知。 我已经在目标项目功能的后台模式中检查了远程通知,并且信息列表的后台模式在所需的后台模式中具有“应用程序下载内容以响应推送通知” 在我的AppDelegate.m中,我可以注册远程通知并获取设备令牌。现在,当我发送推送通知时,我的委托方法在应用程序位于前台时被

我正在尝试实现静默推送通知。我需要将静默推送通知数据保存在应用程序中的数据库中,以便在用户使用应用程序时向用户显示未看到的通知及其计数。 我使用的是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 
       }
}
我试着添加优先级、声音等,但没有任何帮助。 有人能帮我找出当应用程序在后台运行或未运行时,如何在应用程序中保存静默推送通知数据吗?
请帮助我解决此问题。

因此,您肯定能够在后台接收它们,但请注意,如果用户故意从任务切换程序中终止您的应用程序,那么它将无法再接收它们

在iOS 7及以上版本中,回调正如您所说,但在此之前是

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

看起来你的目标不太可能是iOS 6,所以我会选择格式不正确的推送包或后台推送设置不正确。

你是否将apps info.plistUIBackgroundModes设置为remote Notificationon

然后还添加此方法以帮助您进行调试

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
   //Success
   handler(UIBackgroundFetchResultNewData);
}

静默推送通知不同于面向用户的通知。它们被视为低优先级,并且受APN和iOS的速率限制。在实践中,这意味着静默通知只能很少发送,并且在发送到应用程序之前可能会有很长的延迟

您描述的行为可能是设备上的唤醒速率限制器。iOS限制启动应用程序以执行后台工作的频率。这是为了防止滥用行为——一些应用程序可能希望在后台永远保持活力,耗尽电池电量

当连接Xcode时,唤醒速率限制器不处于活动状态,这使得静默通知看起来是立即发送的

My有一个很长的章节描述利率限制以及如何使用它们