我有一个 watchOS 和 iOS 应用程序,它们设置为彼此独立运行,我可以单独安装它们,并且与 WKSession 之类的任何东西都不会相互依赖。
我遇到的问题是,当我同时安装了 iOS 和 watchOS 应用程序时,如果我的 iPhone 已解锁,手表上的通知将延迟约 13 秒。如果我锁定手机或卸载 iOS 应用程序,通知将立即显示在手表上。根据苹果公司的说法,这就是安装配套应用程序时当前处理通知的方式。
这是我安排通知的代码:
func scheduleNotification(secondsFromNow: Double, title: String = "", body: String = "") {
let uuid = UUID().uuidString
let content = UNMutableNotificationContent()
content.title = title
content.body = body
content.sound = UNNotificationSound.default
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: secondsFromNow, repeats: false)
let request = UNNotificationRequest(identifier: uuid, content: content, trigger: trigger)
// Request authorization again in case user dismissed before
self.requestAuthorization()
// Schedule the notification
if Config.notificationsEnabled() {
userNotificationCenter.add(request) { error in
if let error = error {
print("Error scheduling notification: \(error)")
}
}
}
}
有没有办法可以更改此设置,以便通知仅显示在预定的设备上,而不会出现延迟?我还尝试使用 WatchConnectivity 在具有相同标识符的两个设备上安排通知,如建议的 here 但问题仍然相同,手表通知被延迟。
最后我要补充一点,每个应用程序都是完全独立的,并且不以任何方式相互依赖。所有通知均位于运行应用程序的设备(iOS 或 watchOS)本地。
此支持页面看来这是不可能的。您看到的延迟可能是因为它正在尝试发送到手机(这是优先级),而当它无法发送到手机时,它会选择手表。
如果您的 iPhone 已解锁,您会在 iPhone 而不是 Apple Watch 上收到通知。
如果您的 iPhone 已锁定或处于睡眠状态,您会在 Apple Watch 上收到通知,除非您的 Apple Watch 已锁定。但是您拥有单独的应用程序这一事实似乎还有一些希望:
某些应用程序(例如“噪音”应用程序)仅适用于您的 Apple Watch。这些应用程序的通知不会出现在您的 iPhone 上。为了确保应用程序完全独立,您可以浏览此列表并确保操作系统未识别出它们是相关的。
WKWatchOnly
设置为
YES
以指示该应用程序独立于 iOS 应用程序运行。
在 iPhone 上打开 Apple Watch 应用,然后轻点“我的手表”选项卡。
- 点击通知。
- 点击应用程序即可查看其选项。要在 Apple Watch 和 iPhone 上显示的应用程序上使用相同的通知设置,请轻点“镜像我的 iPhone”。某些应用程序允许您自定义通知。轻点“自定义”,然后选择一个选项:
- 允许通知:通知会显示在通知中心,并且您的 Apple Watch 会向您发出提醒。
- 发送到通知中心:通知会直接发送到通知中心,Apple Watch 不会提醒您。
- 通知关闭:应用程序不发送通知。