首页 文章

如何检测用户点击的iOS远程通知?

提问于
浏览
5

当用户点击远程通知时,会在app委托中触发以下回调:

-application:didReceiveRemoteNotification:fetchCompletionHandler:

在这种情况下,应用程序启动并且应用程序状态为 UIApplicationStateActive ,我将其解释为用户对远程通知执行操作 .

the problem: 当远程通知到达并且app位于前台 with inactive state 时,也可以调用此方法 .

example :当通知中心视图打开时(从屏幕上边缘向下滑动)或UIAlert打开 . 在这两种情况下,应用程序状态都是 UIApplicationStateActive ,并且无法判断它是用户操作的通知还是系统推送 .

Q :如何确定 didReceiveRemoteNotification 回调是否响应用户点击远程通知与远程通知的到达?

2 回答

  • 1
    UIApplicationState state = [application applicationState];
         if (state == UIApplicationStateActive)
         { 
              //When your app is in foreground and it received a push notification
         }
         else if (state == UIApplicationStateInactive) 
         {
              //When your app was in background and it received a push notification
         }
    

    此外,如果应用程序未运行且用户点击了通知,则会调用didFinishLaunchingWithOptions . 我没有尝试过,但我可以假设您可以从选项中获取通知详细信息 .

  • 0

    要区分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
    
    }
    
    }
    

相关问题