【问题标题】:application:didReceiveLocalNotification never called on ios 8应用程序:didReceiveLocalNotification 从未在 ios 8 上调用
【发布时间】:2014-08-11 13:20:35
【问题描述】:

是否存在任何已知问题:

application:didReceiveLocalNotification delegate

在 iOS 8 上?

我的应用程序使用UILocalNotification 创建本地通知。当应用程序在后台时,我会收到通知,当我单击通知横幅时,它会移动到我的应用程序。但是这个方法:

-(void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

在 iOS 8(Xcode 5.1.1) 上从未调用过,但在 iOS 7 或更早版本上运行良好。

附:我还测试了这个站点的项目: http://www.appcoda.com/ios-programming-local-notification-tutorial/ 它不适用于 iOS 8。

【问题讨论】:

  • 发现与 ios8beta5 相同的问题。
  • 您没有提到您在 Xcode 5 中使用 SDK 7.1 构建您的应用程序。
  • @edzio- didReceiveLocalNotification 仅在您的应用程序处于前台时调用。因此,当它在后台并且您单击通知横幅时,它不会调用该方法。查看:developer.apple.com/library/ios/documentation/… 执行 ctrl-F 为:“清单 2-6 在应用程序已运行时处理本地通知”

标签: ios uilocalnotification ios8


【解决方案1】:

实际上,iOS 8 上的解决方案是向用户请求通知设置的授权,否则委托方法 -didReceiveLocalNotification: 将永远不会被调用。您可以通过将此代码添加到 -didFinishLaunchingWithOptions: 方法来做到这一点:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings
                                                                         settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)
                                                                         categories:nil]];
}

这将向用户显示一个警报视图,要求获得显示通知的权限。如果她接受,则每当触发本地通知时都会调用委托方法。

【讨论】:

    【解决方案2】:

    将此用于 iOS8

    - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void(^)())completionHandler{
    
    }
    

    【讨论】:

    • 是的,这似乎有效。但问题仍然是为什么方法 didReceiveLocalNotification 不起作用。
    • 我认为情况不是它不起作用,而是在iOS 8中,当您点击横幅打开应用程序时调用的方法发生了变化。有关详细信息,请参阅 WWDC 2014 的第 713 节。
    • 我相信StackOverflow's chatrooms 足以应付这些琐碎的事情,@Rajneesh071。
    • @Rajneesh071 ,我是唯一一个使用 iOS 8 并且从未调用过此方法的人吗,但旧的称为 (didReceiveLocalNotification) ?
    • 如果你要添加交互式通知,那么这个方法会被调用。
    【解决方案3】:

    我遇到了同样的问题...

    您必须更改为使用以下代码:

    // 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];
    

    【讨论】:

      【解决方案4】:

      我在 iOS8Beta5 上也注意到了这一点。相同的代码在 iOS8Beta4 上运行良好。

      编辑: 如果正如答案所暗示的那样,我们需要以不同的方式处理它 - 那么他们为什么在两个 beta 版本之间放弃支持。如果 iOS8Beta1 构建以这种方式运行,那将是有意义的。这就是为什么我觉得它是一个错误。

      【讨论】:

      • 我在使用 ios8beta5 时遇到了同样的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多