didReceiveLocalNotification被解雇了两次

时间:2015-04-07 05:10:14

标签: ios apple-push-notifications uilocalnotification

我知道didReceiveLocalNotification会发射两次。首先,它会在触发本地通知时触发,然后在用户选择它时触发。

有没有办法知道用户选择会触发didReceiveLocalNotification

目前,当通知触发(同时保持应用程序打开)时,如果我保持抽屉打开,应用程序会自动导航到屏幕。我不希望它发生。只有当用户进行选择时,它才会导航到特定的屏幕。

提前致谢。

2 个答案:

答案 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"];