首页 文章

iOS推送通知句柄

提问于
浏览
1

寻找有关推送通知句柄的良好做法 . 目前在我的应用程序中,我正在处理 didFinishLaunchingWithOptionsdidReceiveRemoteNotification 代表中的推送通知 . 我注意到当应用程序是"Dead"时收到推送通知时,两个处理逻辑都是"firing" . 我的应用程序中的后台模式中的远程通知标志为 ON . 处理这种情况有一个很好的做法吗?为什么我在didFinishLaunchingWithOptions(launchOptions)中获取推送数据,并且还调用了didReceiveRemoteNotification?据我所知,当应用程序为"Dead"时,不会调用didReceiveRemoteNotification .

1 回答

  • 1

    收到通知时以及从通知中打开应用程序时会调用 didReceiveRemoteNotification . 如果您的应用程序已停止且根本未打开,则不会触发后台下载 . 你正在经历的是因为你点击了通知而被调用了 didReceiveRemoteNotification . 您需要做的是为该方法添加一些逻辑,以查看应用程序处于什么状态并在那里处理您的通知 .

    即:

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
    {
    
    
        if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) {
    
            [[NSNotificationCenter defaultCenter] postNotificationName:@“inactivePush" object:nil];
    
    
        }
    
        else if([UIApplication sharedApplication].applicationState==UIApplicationStateActive){
    
    
    
            [[NSNotificationCenter defaultCenter] postNotificationName:@"appOpenPush" object:nil];
    
    
        }
    
        //When the app is in the background
        else {
    
    
    
        }//End background
    
    }
    
    }
    

    第一种情况是,如果应用程序处于非活动状态(从推送打开),第二种情况是应用程序实际打开时,第三种情况适用于应用程序处于后台时 . 我正在使用NSNotifcation作为示例,但您可以使用您想要的任何处理代码 . 我添加最终if的原因是因为你可以将你的背景/下载代码放在那里,这样它就不会下载两次,即如果你收到通知然后点击它 .

相关问题