我会定期显示这样的本地通知.
UIlocalnotification *notification = [[UIlocalnotification alloc]init]; [notification setAlertBody:@"Test test"]; [notification setUserInfo:@{@"test": @"test"}]; [[UIApplication sharedApplication] presentlocalnotificationNow:notification];
我需要检测回来的通知,我打算在这里写.
- (void)application:(UIApplication *)application didReceivelocalnotification:(UIlocalnotification *)notification
无论用户点击通知还是自动在前台呼叫,它总是调用该功能.
所以,我分开使用它.
if (application.applicationState == UIApplicationStateActive)
当我显示通知中心时,它变为InActive.但是,它仍然调用didReceivelocalnotification.我无法区分用户是否点击通知中心的通知或是因为我的定期发布通知.
我怎么才能真正知道我在didReceivelocalnotification中点击通知(来自InActive State或Background State)?
解决方法
假设我正确地理解了你的问题,我偶然发现了同样的障碍,找不到超级干净的解决方案.
那么以下方法的情况
- (void)application:(UIApplication *)application didReceivelocalnotification:(UIlocalnotification *)notification
调用并且applicationState等于UIApplicationStateInactive在两种情况下发生:
>该应用程序位于前台,通知刚刚被触发
>通知已经被解雇,通知中心被拉下来并且用户点击了通知
区分这两种情况的一种方法是检查通知的fireDate:
notification.fireDate.timeIntervalSinceNow < 0.5
如果这个表达式为真,那很可能是第一个案例发生了.如果表达式为假,则第二种情况很可能发生.
此解决方案取决于系统无延迟地发送通知和/或用户不够快,以便在通知触发后500ms内点击通知中心的通知.我不确定发射延迟的可能性有多大.我想如果设备处于某种处理负载下是可能的.
我希望有一个更清洁的解决方案,希望有人会分享它.