应用程序:didReceiveLocalNotification永远不会调用ios 8
是否有任何已知的问题:
application:didReceiveLocalNotification delegate
在iOS 8上?
我的应用程序使用UILocalNotification
创build本地通知。 当应用程序在后台我收到通知,当我点击通知横幅,它移动到我的应用程序。 但是这个方法:
-(void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
永远不会在iOS 8(Xcode 5.1.1)上调用,但在iOS 7或更早版本中运行良好。
PS我也testing过这个网站的项目: http : //www.appcoda.com/ios-programming-local-notification-tutorial/ ,它不适用于iOS 8。
使用这个iOS8
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void(^)())completionHandler{ }
实际上,iOS 8的解决scheme是向用户请求授权通知设置,否则委托方法-didReceiveLocalNotification:将永远不会被调用。 您可以通过将此代码添加到-didFinishLaunchingWithOptions:方法来执行此操作:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; }
这将向用户显示一个警告视图,要求显示通知的权限。 如果她接受,每当发出本地通知时,都会调用委托方法。
我遇到了同样的问题
您必须更改为使用以下代码:
// register notification for push mechanism if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } else { [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)]; }
而不是原来的:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
我注意到了iOS8Beta5上的一样。 相同的代码在iOS8Beta4上正常工作。
编辑:如果答案build议,我们需要以不同的方式处理 – 那么为什么他们放弃支持两个testing版本之间。 如果iOS8Beta1构build以这种方式performance出来,这将是有意义的。 这就是为什么我觉得它是一个错误。