注:本文译自苹果官方文档 Apple Watch Programming Guide 中的一个章节

WatchKit extension 可以和 iOS 应用一样使用相同的技术,但它毕竟是 “extension”,某些技术的使用是受限制的,某些是不推荐使用的。关于什么情况下使用某项技术,这里有一些准则:

  • 某些技术的使用必须经由用户在 iPhone 上操作授权。用户必须授权才能使用某些特定的系统功能,比如位置服务。在 WatchKit extension 中使用这些技术会触发相应的提示窗口显示在用户的 iPhone 上。Apple Watch 本身也会显示提示窗口,提醒用户去 iPhone 上查看授权请求。更多关于需要用户授权的技术,请查看 App Programming Guide for iOS 中的 “Supporting User Privacy”。

  • 不要使用后台模式。WatchKit extension 只有在用户操作相应的 WatchKit app 时才会运行,此时才会被当做 foreground extension。所以,某些技术支持的后台模式,在 WatchKit extension 中无法执行。

  • 避免长时间运行的任务。当用户停止和相应的 Watch app 交互时,WatchKit extension 会很快挂起。因为 WatchKit app 的交互通常比较短,所以在数据请求完成时,extension 可能已经被挂起。

执行长时间运行任务的最佳解决方案是,让 iOS app 去执行。例如,不要在 WatchKit extension 中调用位置服务,而是在 iOS app 中。你的 iOS app 可以收集所需数据,然后把它放在一个共享的 app group 中,供你的 extension 访问。使用方法 openParentApplication:reply: 初始化一个任务,然后接收从 iOS app 返回的 reply,或者使用 shared group container 在 iOS app 和 WatchKit extension 之间交换数据。更多关于控制 iOS app 和 WatchKit extension 之间通信的内容,请查看 Communicating Directly with Your Containing iOS App

Handoff 支持

Apple Watch 支持创建 activity,这些 activity 可以通过 Handoff 在其他设备上完成。 你可以使用 WKInterfaceController 中的 updateUserActivity:userInfo:webpageURL:方法创建 activity,并将 activity 通知给其他设备。

但是,glance 是个例外,Apple Watch 无法处理其他设备创建的 activity。在 glance 界面中,你可以在 activity dictionary 中设置 main app 可能用到的数据。如果用户点击 glance 跳转到你的 app,WatchKit 会把 activity dictionary 传递给你的 main interface controller,它会使用 dictionary 的数据来更新 app 的 UI。更多关于如何从 glance 传递信息到 app 中,请查看 Customizing App Launch from Your Glance

远程控制事件和当前播放信息

*Remote Control Events and Now Playing Information

Apple Watch 使用 remote control events 系统管理用户 iPhone 上音频和视频的播放。Now Playing glance 的传输控制器会为当前正在播放内容的 app 提供 remote control events。iOS app 注册 MPRemoteCommandCenter 指令后,当它是 Now Playing apps 时,会自动接收这些 events。在 WatchKit extension 中,你不需要做额外的工作去支持来自 Apple Watch 的 remote control events。

注意
对于诸如 like、dislike、bookmark 等操作,Apple Watch 使用 localizedShortTitle 代替 MPFeedbackCommand 对象中的 localizedTitle

当 iOS app 正在播放内容时,Now Playing glance 会自动展示 “正在播放” 的信息。iOS app 通过 MPNowPlayingInfoCenter 提供信息。当 app 播放内容时,它会更新 nowPlayingInfo 字典中的值。Apple Watch 会自动检索并展示这些信息。另外,点击 Now Playing glance 中的标题,会启动相应的 WatchKit app,如果此 app 可用的话。

更多关于如何在 iOS app 中支持 Remote Control Events 和 Now Playing Information,请查看 Remote Control Events