如何在watchOS 2中接收本地通知

时间:2015-11-09 14:50:16

标签: ios swift watchkit watch-os-2 nsusernotification

正如我可以在指南中看到的那样,会自动显示通知。但是......不适合我。问题是为什么?当用户点击按钮时,我的iOS应用程序会在4秒后发送通知:

@IBAction func stopTimerPress(sender: AnyObject) {
        print("Stop timer!")
        notification.alertBody = "STOP!"
        self.timer = NSTimer.scheduledTimerWithTimeInterval(4.0, target: self, selector: "fire", userInfo: nil, repeats: true)
}

然后我希望(如果iOS中的应用程序在后台)我的Apple Watch会显示静态通知。但它没有发生。我能做什么?我取消评论了这个:

override func didReceiveLocalNotification(localNotification: UILocalNotification, withCompletion completionHandler: ((WKUserNotificationInterfaceType) -> Void)) {
        print(localNotification.alertBody)
        completionHandler(.Default)
    }

在NotificationController中,但这仍然无效。 有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

您是否已请求用户授权在iOS应用上查看通知?如果iPhone屏幕关闭(不仅仅是后台的应用程序),那么它应该将通知转发给Apple Watch。

UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];

此外,如果Apple Watch应用程序位于前台并且通知到达时屏幕已打开,则它将不会显示在UI中,而是调用didReceiveLocalNotification方法。如果屏幕关闭,则不会调用此方法,但通知将显示为常规通知。

答案 1 :(得分:0)

当您在后台运行时,您的代码未运行。但是,如果您在Xcode中单击您的项目,并转到"功能"然后进入"背景模式"并单击"远程通知。"然后,您的应用程序将在Apple只知道的时间被唤醒,然后您的代码将运行,只要它持续不超过30秒。您可以使用Xcode菜单项"模拟背景提取"在调试菜单中,在调试应用程序时发送获取消息,以进行测试。

请注意,这可能会在4秒内运行您的代码,也可能不运行 - 因为Apple决定何时唤醒您的后台应用。我已经看到它每5分钟醒来一次,甚至几个小时后就会醒来。