WatchOS 3 (XCode 8b6) 上的后台通知

Posted

技术标签:

【中文标题】WatchOS 3 (XCode 8b6) 上的后台通知【英文标题】:Background Notifications on WatchOS 3 (XCode 8b6) 【发布时间】:2016-08-18 19:55:34 【问题描述】:

我在手表上使用前台通知:

class WorkoutInterfaceController:   WKInterfaceController,
                                    UNUserNotificationCenterDelegate

设置委托:

UNUserNotificationCenter.current().delegate = self

接收前台通知:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Swift.Void)

    print("Received Notification .....")
    UNUserNotificationCenter.current().removeAllDeliveredNotifications()
    let completionSound: UNNotificationPresentationOptions = [.sound, .alert]
    completionHandler(completionSound)

添加通知:

    let content: UNMutableNotificationContent = UNMutableNotificationContent()

    content.title = "TITLE"
    content.subtitle = "sub title"
    content.body = "message body"
    content.sound = UNNotificationSound.default()

    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: duration, repeats: false)

    let request = UNNotificationRequest(identifier: restOverIdentifier,
                                        content: content,
                                        trigger: trigger)

    UNUserNotificationCenter.current().add(request)
    
        (error) in // ...
    

我在 sim 卡和设备上都试过了,但在 sim 卡被锁定或在主屏幕上或手表上,如果您不移动手臂,屏幕变黑时却没有收到通知。

我正在寻找的只是一个简单的哔声,我什至不需要通知警报屏幕。

如果您有对此有用的东西,请发布代码或确认此功能在手表上不起作用。

谢谢

格雷格

【问题讨论】:

【参考方案1】:

watchOS 3 存在一个错误,即只显示第一个通知:

暂时将我的代码更改为:

    let id: String = WatchNotify.getUUID()

    //        let request = UNNotificationRequest(identifier: focusWarningIdentifier,
    let request = UNNotificationRequest.init(identifier: id,
                                        content: content,
                                        trigger: trigger)

    UNUserNotificationCenter.current().add(request)

为 UUID 添加此功能:

class func getUUID() -> String

    let uuidObj = CFUUIDCreate(nil)
    let uuidString = CFUUIDCreateString(nil, uuidObj)!
    return uuidString as String

虽然委托完成处理程序似乎还没有在手表上工作,但似乎可以解决问题。

【讨论】:

以上是关于WatchOS 3 (XCode 8b6) 上的后台通知的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中为 Apple Watch 添加单元测试?

Xcode 9,watchOS4,不再显示 15% 的后台 CPU 限制?

如何在 WatchKit 扩展目标(XCode7 beta 6)中重置 watchOS 部署目标

WatchOS 动态通知不适用于 Xcode 11.1 及更高版本 - 未调用 didReceive

Flutter Xcode 构建失败 - 'TARGET_OS_WATCHOS' 未定义,评估为 0

如何在真实设备上安装独立的 watchOS 应用程序进行测试?