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

Posted

技术标签:

【中文标题】如何检测用户点击的 iOS 远程通知?【英文标题】:how to detect user clicked iOS remote notification? 【发布时间】:2015-10-03 01:00:00 【问题描述】:

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

-application:didReceiveRemoteNotification:fetchCompletionHandler:

在这种情况下,应用程序已启动,应用程序状态为 UIApplicationStateActive,我将其解释为用户对远程通知进行了操作。

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

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

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

【问题讨论】:

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

【讨论】:

tx 回复,这是一个不同的问题。当应用程序处于前台并且通知中心打开时,应用程序处于非活动状态。现在当didReceiveRemoteNotification 被调用时,可能有两种情况: 1-用户对通知中心通知的操作 2-新推送通知的到来。问题是没有办法区分这两种情况。【参考方案2】:

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




【讨论】:

以上是关于如何检测用户点击的 iOS 远程通知?的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序进入前台时检测远程通知

如何在IOS中处理多个远程通知点击

当应用程序处于状态后台或被杀死时,如何在不点击通知的情况下存储 iOS 远程通知?

如何接收 iOS 10 远程用户通知

在 Xamarin iOS 中的远程通知的“默认用户操作”上推送视图控制器

在 ios 中处理远程通知接收