根据apple文档,我们可以通过检查应用程序状态变量是否处于非活动状态(link)来识别用户的通知。
iOS注意:在iOS中,您可以确定是否已启动应用程序 由于用户点击动作按钮或是否 通知已通过发送到已经运行的应用程序 检查应用程序状态。在委托的实施中 应用程序:didReceiveRemoteNotification:或 application:didReceiveLocalNotification:方法,获取值 applicationState属性并对其进行评估。如果值是 UIApplicationStateInactive,用户点击了动作按钮;如果 值是UIApplicationStateActive,应用程序是最重要的 它收到了通知。
但我可以看到一个用例,其中有一个系统警报(系统警报,我的意思是在iOS控制的应用程序前景中显示的警报视图)在前台并且应用程序处于非活动状态(当在视图中,通过将应用程序的application state设置为UIApplicationStateInactive,iOS背后的应用程序处于非活动状态,但用户仍然可以在屏幕上看到应用程序的内容。请参阅以下附件:
在此状态下,如果应用收到通知,则其行为就像用户点击通知一样。有没有解决这个用例的解决方案?
答案 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状态时才会调用,只有在用户关闭其他系统警报后才会显示通知。