5

根据苹果文档,我们可以通过检查应用程序状态变量是否处于非活动状态(链接)来识别用户对通知的点击。

iOS 注意:在 iOS 中,您可以通过检查应用程序状态来确定应用程序是否由于用户点击操作按钮而启动,或者通知是否已发送到已运行的应用程序。在委托的 application:didReceiveRemoteNotification: 或 application:didReceiveLocalNotification: 方法的实现中,获取 applicationState 属性的值并对其进行评估。如果值为 UIApplicationStateInactive,则用户点击了操作按钮;如果值为 UIApplicationStateActive,则应用程序在收到通知时位于最前面。

但是我可以看到一个用例,其中有一个系统警报(通过系统警报,我的意思是在由 iOS 控制的应用程序的前台显示一个警报视图)并且应用程序处于非活动状态(当“系统警报”在视图中,iOS 通过将应用程序的应用程序状态设置为 UIApplicationStateInactive 使后面的应用程序处于非活动状态),但用户仍然能够在屏幕上看到应用程序的内容。参考以下附件:

在此处输入图像描述

在这种状态下,如果应用收到通知,它的行为就像用户点击了通知一样。有解决此用例的解决方案吗?

4

2 回答 2

5
- (void)application:(UIApplication*)application didReceiveRemoteNotification: 
(NSDictionary*)userInfo
{
         UIApplicationState state = [application applicationState];
         if (state == UIApplicationStateActive)
         { 
              //When your app was active and it got push notification
         }
         else if (state == UIApplicationStateInactive) 
         {
              //When your app was in background and it got push notification
         }
}

并且didFinishLaunchingWithOptions会在您的应用未运行并且在您的通知中单击 Launch 时调用。

由于您将在 didReceiveRemoteNotification 中显示 alertview,因此您可以在 alertview 的委托方法中识别点击,即- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

于 2013-08-12T11:29:21.407 回答
0

他们在 ios10 上解决了这个问题,当 add 方法:

userNotificationCenter willPresentNotification.

这只会在应用程序处于前台/活动状态时调用,并且只有在用户关闭其他系统警报后才会出现通知。

于 2016-12-06T21:53:29.697 回答