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

如何检测用户单击的iOS远程通知?,ios,objective-c,iphone,push-notification,apple-push-notifications,Ios,Objective C,Iphone,Push Notification,Apple Push Notifications,当用户点击远程通知时,将在应用程序委托中触发以下回调: -应用程序:DidReceiveMemoteNotify:fetchCompletionHandler: 在这个场景中,应用程序被启动,应用程序状态为UIApplicationStateActive,我将其解释为用户在收到远程通知时执行的操作 问题: 当远程通知到达且应用程序处于前台且处于非活动状态时,也可以调用此方法 示例:当通知中心视图打开(从屏幕上边缘向下滑动)或UIAlert打开时。在这两种情况下,应用程序状态都是UIApplica

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

-应用程序:DidReceiveMemoteNotify:fetchCompletionHandler:

在这个场景中,应用程序被启动,应用程序状态为
UIApplicationStateActive
,我将其解释为用户在收到远程通知时执行的操作

问题: 当远程通知到达且应用程序处于前台且处于非活动状态时,也可以调用此方法

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

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

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。我没有尝试过,但我可以假设您可以从选项中获取通知详细信息。

要在DidReceiveMemoteNotification中区分这两个调用,您可以从下面添加此代码

- (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

}

}

对于回复,这是一个不同的问题。当应用程序位于前台且通知中心打开时,应用程序处于非活动状态。现在,当调用
didReceiveMemotentification
时,可能有两种情况:1-用户对notif center中的通知执行操作2-新推送通知到达。问题是无法区分这两种情况。