`
啸笑天
  • 浏览: 3465730 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

WatchConnectivity

 
阅读更多

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

 

 

 

分享到:
评论
1 楼 啸笑天 2015-10-13  
http://code.tutsplus.com/tutorials/watchos-2-background-transfers-and-queues--cms-24699

相关推荐

    WatchConnectivityTutorial:构建简单的WatchConnectivity应用程序的教程

    使用WatchConnectivity抽象的WWDC 2015上最令人期待的公告之一就是公开了一个SDK,以使第三方开发人员有机会在新发布的Apple Watch上放置真实的软件。 在WWDC 2015之前,开发人员可以在手表上放置UI,而应用程序的...

    nativescript-watchos-connector:这是一个NativeScript插件,使用Apple WatchConnectivity将数据传递和接收数据到同一个WatchOS应用

    这是一个NativeScript插件,使用Apple WatchConnectivity将数据传递和接收数据到配套的WatchOS应用程序。 先决条件/要求 在使用此插件之前,请确保您已关注NativeScript博客文章,该文章和 。 安装NativeScript 7 ...

    张忠良-Apple Watch应用开发两三事

    尽管文档中提到了一些OCR识别错误,例如“Glance->TimeTravel(Complication)DigitalCrown(WKInterfacePicker)WatchConnectivity”这部分内容看似有语法问题,但我们可以推测,张忠良可能在讲解如何在开发中利用...

    Apple Watch开发快速入门教程

    综上所述,Apple Watch开发快速入门涉及的知识点广泛且深入,从基础的Swift语言到复杂的WatchKit框架和WatchConnectivity通信,再到健康数据的集成和App Store的发布流程,每个环节都需要开发者精心研究和实践。...

    swift-Gulps是iOS和AppleWatch的开源应用程序可让您跟踪每日用水量

    7. **WatchConnectivity**: 为了在iPhone和Apple Watch之间传递数据,开发者会使用WatchConnectivity框架。这允许两个设备之间实时同步数据,如更新饮水记录或者发送用户交互信息。 8. **Unit Testing和UI Testing*...

    swift-专为手表设计的迷你Pomodoro定时器应用采用Swift开发

    7. **WatchConnectivity**:当用户在iPhone上更改设置或启动Pomodoro时,我们需要通过WatchConnectivity框架将这些信息同步到Apple Watch。同时,手表端也可以向iPhone发送状态更新。 8. **测试与调试**:使用Xcode...

    Developing.for.Apple.Watch.2nd.Edition

    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 ...

    swift-Summon一个Apple-watch应用程序让一个人将另一个人召唤到建筑物内的确切位置

    7. **App Communication**:由于Apple Watch通常作为iPhone的伴侣设备,因此应用可能需要使用WatchConnectivity框架来在两者之间交换数据,例如用户的位置信息或召唤请求。 8. **Interface Builder**:Xcode中的...

    WatchKit-App.zip

    这两个组件通过WatchConnectivity框架进行通信,传递数据和命令,确保手表和手机之间的同步。 界面设计是WatchKit开发的重要环节。WatchKit提供了多种动态和静态的Interface Objects,如Label、Button、Image和...

    Communicator:iOS和watchOS应用之间的通信变得更好了

    沟通者 ComplicationInfo 例子要求安装SPM 椰子足作者执照 介绍由于Apple在WatchConnectivity上的工作,因此可以在watchOS和iOS应用程序之间发送消息和数据,但是有很多委托回调可以使用,一些API调用非常相似,并且...

    GentleTouch:用WATCH触摸自己

    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 ...

    WatchConnectivitySample:watchOS 2观看连接性示例

    在iOS开发领域,Apple引入了一项名为WatchConnectivity的框架,它为iPhone和Apple Watch之间的通信提供了一个强大的平台。"WatchConnectivitySample"是专为开发者设计的一个示例项目,展示了如何充分利用watchOS 2中...

    iPhone与iWatch连接、控制、数据传递(Swift)的方法

    然而,自watchOS 2及以后的版本,苹果引入了`WatchConnectivity`框架,以提供更强大且稳定的数据传输方式。以下是如何使用`WatchConnectivity`进行iPhone与iWatch数据传递的步骤: 1. **导入框架**:在iPhone端的...

    EMWatchOCDemo:环信SDK与Apple Watch的结合

    - 使用WatchConnectivity的`WCSession`实例进行数据传输,如`sendMessage:`方法用于发送数据,`updateApplicationContext:`方法用于同步应用上下文。 7. **调试与测试**: - 使用Xcode的模拟器或实际设备进行调试...

    Puzzle:Apple Watch 益智游戏

    7. **WatchConnectivity**:利用WatchConnectivity框架,开发者可以实现Apple Watch与iPhone之间的通信,例如发送用户在游戏中做出的选择,或者更新游戏状态。 8. **测试与调试**:使用Xcode的模拟器和实际设备进行...

    HealthWatchObjC

    通过WatchConnectivity,开发者可以实现如消息传递、文件传输等功能,确保iPhone和Apple Watch的数据同步。 6. **Storyboard and Interface Builder**:Objective-C项目通常使用Interface Builder来设计和构建用户...

    WatchDemo:http 上的介绍

    由于Apple Watch自身资源有限,复杂的逻辑和数据处理通常在这里完成,然后通过WatchConnectivity框架将结果发送到手表显示。 6. **WatchConnectivity框架**: 这是Apple提供的一个关键框架,用于在iPhone和Apple ...

    WatchConnect

    Apple提供了WatchConnectivity框架,用于在Apple Watch与配套的iOS应用之间传递数据和消息。这个框架包括了发送结构化数据、文件以及用户活动的状态同步等功能。 7. **Watch App与Phone App的协同工作**: ...

    applewatch-cordova:试用 Apple Watch 和 Cordova

    6. **WatchConnectivity框架**:Apple提供了WatchConnectivity框架,用于在iPhone和Apple Watch之间实现数据和消息的同步。开发者可以通过这个框架在Cordova应用中实现数据的实时更新和双向通信。 7. **App ...

Global site tag (gtag.js) - Google Analytics