如何检测用户单击的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-新推送通知到达。问题是无法区分这两种情况。