收到静默推送通知时,执行几行代码,应用程序在后台运行,ios

时间:2015-01-05 10:06:40

标签: ios objective-c iphone background notifications

-(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 =应用程序下载内容以响应推送通知

同样在功能部分,我的背景模式为ON,并选择了远程通知复选标记。

现在我的问题是,当我运行我的应用程序然后我能够接收静音以及一般推送通知并且代码在前台模式下成功执行但是当我按下主页按钮时(不是通过轻扫它而不是强行退出也是设备的密码锁是打开的)我的应用程序进入后台模式,然后我的代码没有执行,即使我能够接收有警报和声音的推送通知,但应用程序没有在后台模式下启动。

我认为对于前台和后台模式,只要我的应用程序接收到任何推送通知,无论是静音还是一般推送通知,我在委托方法中的第一次登录都必须在控制台上打印即NSLog( @“PUSH NOTIFICATION%@”,userInfo);

请帮助我自从过去2-3天以来一直在努力。

我的信息.plist here

2 个答案:

答案 0 :(得分:0)

我做的几乎与你完全一样,除了我使用静音推送通知在应用程序在后台时显示本地通知,并在应用程序位于前台时使用它来更新某些状态。我没有注册后台获取,只是“远程通知”。

@ Paulw11是正确的,每次调用didReceiveRemoteNotification时都需要调用completionHandler。

我会检查您的plist以确保您的背景模式配置正确。也许你可以发布你的plist的内容。

我的通知有效负载看起来与您的完全相同,所以我不认为这是问题。我最初遇到问题是因为有效载荷并不完全正确。

请记住,如果你杀了应用程序(轻扫它),在重新启动应用程序之前,你不会收到静音推送通知。

答案 1 :(得分:0)

我认为你需要在“aps”之外的'content-available'进行一次测试,如下所示:

aps = {
            alert = "This is test alert";
            badge = 1;
       };
"content-available" = 1;