检测用户点击通知

时间:2013-08-12 11:10:05

标签: ios cocoa-touch apple-push-notifications

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

  

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

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

enter image description here

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

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

userNotificationCenter willPresentNotification.

只有当应用处于forground / active状态时才会调用,只有在用户关闭其他系统警报后才会显示通知。

相关问题