WatchConnectivity是watchOS2里iPhone与AppleWatch通信的基础框架。
初始化设置
WatchConnectivity的原理是iPhone伴侣应用和AppleWatch上运行的WatchKit Extension之间通过WCSession会话进行通信。
当前Controller若需要响应WatchConnectivity的消息需要遵循WCSessionDelegate协议。
初始化时需要激活会话代理(iPhone应用和WatchKitExtension里都要激活),代码如下:
if WCSession.isSupported() {
let session=WCSession.defaultSession()
session.delegate=self
session.activateSession()
}
会话状态
为了了解iPhone应用与Watch应用的会话状态,我们可以通过一些属性去判断,注意这些操作只能在iPhone应用里进行。
1.检查是否配对
AppleWatch是否与iPhone配对,可以通过session.paired属性的布尔值进行判断
2.检查watchapp是否已安装
即使已配对,watchapp也可能未安装成功,通过session.watchAppInstalled属性的布尔值可以得知此状态。另外,watchapp安装成功就会在手表上建立相应app的目录,因此session.watchAppInstalled==false效果等同于watchDirectoryURL != nil。
watchDirectoryURL一般只在需要额外的初始化处理的情况下,比如app重装恢复队列内容、设定初始设置时等情况下会用到。
3.检查是否开启表盘组件功能
若watchapp支持complication表盘组件,那么session.complicationEnabled值为true。
通信
WatchConnectivity框架的通信方式有两种模式,一种是后台传输,另一种是交互式消息。
后台传输模式
后台传输模式是最常用的通信模式,面向内容与用户交互,主要用于传输非即时的内容,体现在内容可由操作系统智能传输(操作系统允许发送方可退出,选择传输时机,支持接收者下次启动时发送),并将内容以队列方式发送。
后台传输一般分三种类型:
1. Application context
发送方代码示例
do {
let context=//最新内容,初始化context
try WCSession.defaultSession().updateApplicationContext(context)
}catch {//}
接收方需响应以下代理方法,
func session(session:WCSession,didReceiveApplicationContext:applicationContext:[String:AnyObject]){}
ApplicationContext传输数据常见于传输单个字典类型数据的情况,非常适合仅需要信息子集的AppleWatch应用。这过程不会即刻发送,但会在对应的app唤醒的时候发送。
2. Userinfo transfer
Userinfo方式与ApplicationContext相比能够传输更复杂的数据。
发送方示例代码:
let userInfo=//待传输的内容
let userInfoTransfer=WCSession.defaultSession().transferUserInfo(userInfo)
userInfoTransfer传输器封装了待传数据,并且你可以通过代码控制来取消传输。
未传输的内容可以这样获取
let transfer=WCSession.defaultSession().outstandingUserInfoTransfer(userInfo)
接收方通过以下回调方法进行处理:
func session(session:WCSession,didReceiveUserInfo userInfo:[String:AnyObject]) {//处理接收的userInfo}
Userinfo transfer适合内存内容的传输,并且支持访问队列里的未传输内容。
3. File transfer
File transfer面向文件,API使用上和Userinfo transfer很像,支持队列,支持未完成内容的访问,需要附加元数据信息。
发送方示例代码如下:
let url=//文件地址
let metadata=//字典形式元数据
let fileTransfer=WCSession.defaultSession().transferFile(url,metadata:metadata)
接收方代码如下:
func session(session:WCSession,didReceiveFile file:WCSessionFile) {//处理接收的File}
交互式消息
交互式消息能够为iPhone和AppleWatch间提供实时的通讯功能。
使用前提:1.设备间能够无线联通;2.应用之间能够联通,这意味着AppleWatch端的程序必须前台运行,即session的reachable值为true。
与后台传输模式的一个值得注意的区别是:若iOS应用未启动,AppleWatch上运行的WatchKit扩展能够启动iOS应用!
交互式消息方式可以传输两种数据类型的消息:
1.字典
func sendMessage(message:,replyHandler:,errorHandler:)
2.数据
支持可序列化的自定义数据
func sendMessageData(data:,replyHandler:,errorHandler:)
用于数据即时传输到对应app的方法。调用这个方法发送的数据会进入一个队列,按照进入队列的先后顺序来发送出去。如果是从watch向iOSapp发送数据并且该iOSapp没在运行的话,那么接收数据的iOSapp将会在后台被唤醒。如果你从iOSapp发送数据而watchapp没有运行的情况下,errorHandler就会被调用。接收数据的app会通过WCSession的委托方法session(_:didReceiveMessageData:replyHandler:)方法来接收。
在以下方法里进行接收时的回调处理
func session(session:WCSession,didReceiveMessage message:[String:AnyObject],replyHandler:([String:AnyObject]) -> Void){//消息处理并返回}
感谢:http://www.th7.cn/Program/IOS/201507/500660.shtml
https://github.com/kristinathai/WatchOS2WatchConnectivityDemos
相关推荐
使用WatchConnectivity抽象的WWDC 2015上最令人期待的公告之一就是公开了一个SDK,以使第三方开发人员有机会在新发布的Apple Watch上放置真实的软件。 在WWDC 2015之前,开发人员可以在手表上放置UI,而应用程序的...
这是一个NativeScript插件,使用Apple WatchConnectivity将数据传递和接收数据到配套的WatchOS应用程序。 先决条件/要求 在使用此插件之前,请确保您已关注NativeScript博客文章,该文章和 。 安装NativeScript 7 ...
尽管文档中提到了一些OCR识别错误,例如“Glance->TimeTravel(Complication)DigitalCrown(WKInterfacePicker)WatchConnectivity”这部分内容看似有语法问题,但我们可以推测,张忠良可能在讲解如何在开发中利用...
综上所述,Apple Watch开发快速入门涉及的知识点广泛且深入,从基础的Swift语言到复杂的WatchKit框架和WatchConnectivity通信,再到健康数据的集成和App Store的发布流程,每个环节都需要开发者精心研究和实践。...
7. **WatchConnectivity**: 为了在iPhone和Apple Watch之间传递数据,开发者会使用WatchConnectivity框架。这允许两个设备之间实时同步数据,如更新饮水记录或者发送用户交互信息。 8. **Unit Testing和UI Testing*...
7. **WatchConnectivity**:当用户在iPhone上更改设置或启动Pomodoro时,我们需要通过WatchConnectivity框架将这些信息同步到Apple Watch。同时,手表端也可以向iPhone发送状态更新。 8. **测试与调试**:使用Xcode...
Communicating with WatchConnectivity Chapter 9. Creating Complications with ClockKit Chapter 10. Extending Complications with Time Travel Chapter 11. Getting Personal with Sensor Data and HealthKit ...
7. **App Communication**:由于Apple Watch通常作为iPhone的伴侣设备,因此应用可能需要使用WatchConnectivity框架来在两者之间交换数据,例如用户的位置信息或召唤请求。 8. **Interface Builder**:Xcode中的...
这两个组件通过WatchConnectivity框架进行通信,传递数据和命令,确保手表和手机之间的同步。 界面设计是WatchKit开发的重要环节。WatchKit提供了多种动态和静态的Interface Objects,如Label、Button、Image和...
沟通者 ComplicationInfo 例子要求安装SPM 椰子足作者执照 介绍由于Apple在WatchConnectivity上的工作,因此可以在watchOS和iOS应用程序之间发送消息和数据,但是有很多委托回调可以使用,一些API调用非常相似,并且...
A demo app showing the usage of WatchConnectivity framework. Requirements GentleTouch requires an iPhone with iOS 9, and a WATCH with watchOS 2. Getting Started Clone this repo in your local ...
在iOS开发领域,Apple引入了一项名为WatchConnectivity的框架,它为iPhone和Apple Watch之间的通信提供了一个强大的平台。"WatchConnectivitySample"是专为开发者设计的一个示例项目,展示了如何充分利用watchOS 2中...
然而,自watchOS 2及以后的版本,苹果引入了`WatchConnectivity`框架,以提供更强大且稳定的数据传输方式。以下是如何使用`WatchConnectivity`进行iPhone与iWatch数据传递的步骤: 1. **导入框架**:在iPhone端的...
- 使用WatchConnectivity的`WCSession`实例进行数据传输,如`sendMessage:`方法用于发送数据,`updateApplicationContext:`方法用于同步应用上下文。 7. **调试与测试**: - 使用Xcode的模拟器或实际设备进行调试...
7. **WatchConnectivity**:利用WatchConnectivity框架,开发者可以实现Apple Watch与iPhone之间的通信,例如发送用户在游戏中做出的选择,或者更新游戏状态。 8. **测试与调试**:使用Xcode的模拟器和实际设备进行...
通过WatchConnectivity,开发者可以实现如消息传递、文件传输等功能,确保iPhone和Apple Watch的数据同步。 6. **Storyboard and Interface Builder**:Objective-C项目通常使用Interface Builder来设计和构建用户...
由于Apple Watch自身资源有限,复杂的逻辑和数据处理通常在这里完成,然后通过WatchConnectivity框架将结果发送到手表显示。 6. **WatchConnectivity框架**: 这是Apple提供的一个关键框架,用于在iPhone和Apple ...
Apple提供了WatchConnectivity框架,用于在Apple Watch与配套的iOS应用之间传递数据和消息。这个框架包括了发送结构化数据、文件以及用户活动的状态同步等功能。 7. **Watch App与Phone App的协同工作**: ...
6. **WatchConnectivity框架**:Apple提供了WatchConnectivity框架,用于在iPhone和Apple Watch之间实现数据和消息的同步。开发者可以通过这个框架在Cordova应用中实现数据的实时更新和双向通信。 7. **App ...