检测用户点击通知

Sha*_*ank 5 cocoa-touch apple-push-notifications ios

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

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

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

在此输入图像描述

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

Bab*_*oot 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
         }
}
Run Code Online (Sandbox Code Playgroud)

并且didFinishLaunchingWithOptions会在您的应用未运行时调用,并在通知中单击"启动".

当您在didReceiveRemoteNotification中显示alertview时,您可以识别出alertview的委托方法,即- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex.