-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
NSLog(@"PUSH NOTIFICATION %@",userInfo);
if([userInfo[@"aps"][@"content-available"] intValue] == 1){
NSLog(@"SILENT PUSH NOTIFICATION");
//Here I'm inserting a flag value to my DB.
completionHandler(UIBackgroundFetchResultNewData);
}
else{
NSLog(@" GENERAL PUSH NOTIFICATION ");
completionHandler(UIBackgroundFetchResultNoData);
}
}
My silent notification payload is {
aps = {
"content-available" = 1;
sound = "";
};
}为了支持,我在info.plist中添加了一个“必需的背景模式”的键。
项目0=响应推送通知而下载内容
此外,在功能部分,我的后台模式与远程通知检查标记被选中。
现在我的问题是,当我运行我的应用程序时,我能够接收到无声的和一般的推送通知,并且代码在前台模式下正在成功地执行,但是当我按home按钮(不是通过滑动它来强制退出,设备的密码锁也打开了),我的应用程序将进入后台模式,然后我的代码将无法执行,即使我能够接收到具有警告和声音的推送通知,但是应用程序没有在后台模式下启动。
我在想,对于前台和后台模式,当我的应用程序收到任何推送通知时,不管是无声的还是普通的推送通知,我在委托方法中的第一个日志都必须打印在控制台上,即NSLog(@"PUSH notification %@",userInfo);
请帮助我,从过去的2-3天开始,我一直在挣扎。
我的info.plist

发布于 2015-01-07 14:58:43
我所做的几乎完全一样的事情,除了我使用无声推送通知时,在应用程序的背景,并使用它来更新一些状态时,应用程序是在前景。我不注册背景抓取,只有“远程通知”。
@Paulw11 11是正确的,每次调用completionHandler时都需要调用didReceiveRemoteNotification。
我将检查您的plist,以确保您的背景模式配置正确。也许你可以把你的拼贴贴出来。
我的通知负载看起来和你的完全一样,所以我不认为这是问题所在。我最初有问题,因为有效载荷不完全正确。
记住,如果你杀死了应用程序(刷掉它),在应用程序重新启动之前,你不会收到无声的推送通知。
发布于 2015-01-08 09:48:03
我认为您需要在“aps”之外使用“”进行一次测试,如下所示:
aps = {
alert = "This is test alert";
badge = 1;
};
"content-available" = 1;https://stackoverflow.com/questions/27777216
复制相似问题