我知道didReceiveLocalNotification
会发射两次。首先,它会在触发本地通知时触发,然后在用户选择它时触发。
有没有办法知道用户选择会触发didReceiveLocalNotification
?
目前,当通知触发(同时保持应用程序打开)时,如果我保持抽屉打开,应用程序会自动导航到屏幕。我不希望它发生。只有当用户进行选择时,它才会导航到特定的屏幕。
提前致谢。
答案 0 :(得分:1)
当应用处于状态无效(拉下操作系统通知)时,didReceiveLocalNotification
似乎会被调用两次。
1.通知到达时
2.如果用户点击通知
您可以执行的操作是在步骤1中捕获非活动状态,并且不执行缩进操作。
或者你可以采取相反的做法,即从通知中心删除通知,以便用户无法点击它(步骤2)
if (UIApplication.sharedApplication().applicationState == .Inactive) {
application.cancelLocalNotification(notification)
}
答案 1 :(得分:0)
当通过通知启动应用程序时,应用程序委托启动选项应包含密钥UIApplicationLaunchOptionsLocalNotificationKey
,其中包含与通知关联的UILocalNotification。
如果App已打开且您的目标是iOS 8,则添加新处理程序
// Called when your app has been activated by the user selecting an action from a local notification.
// A nil action identifier indicates the default action.
// You should call the completion handler as soon as you've finished handling the action.
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(8_0);
还尝试检查LocalNotification是否导致应用程序启动
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
当您设置本地通知时,您可以获取用户词典,您可以在其中设置唯一ID以跟踪
notification.userInfo = [NSDictionary dictionaryWithObject:unique_id forKey:@"uniqueId"];