【WatchOS 2教程系列二】WatchConnectivity介绍:告别加载等待

原文链接 = http://natashatherobot.com/watchconnectivity-introduction-say-goodbye-to-the-spinner/
作者 = Natasha The Robot
原文日期 = 2015-09-21


WatchOS 2 上最有价值的新特性就是WatchConnectivity,虽然用户可能看不到,但是这个特性能让你的WatchOS app更加好用。

WatchConnectivityWatchOS 2框架中用于Watch AppiOS设备传输数据的。WatchConnectivity 关键的部分是,它使你的应用程序在用户决定看看你的Complication or Glance or App时能够有必要的数据。这意味着用户想要看你的app or glance or complication时,他们希望马上看到他们想要看到的数据,而不是愚蠢的加载等待。

毕竟,Apple Watch是一个活动的设备。虽然用户们可能想要看一两眼在iOS app 上超级可爱的刷新动画,但显然他们不会忍受在活动的设备上看到这样的动画。设想一下,如果用户每次在他们常规的手表上查看时间,引入眼帘的是一个加载等待界面,那将会非常愚蠢,并且如果你在你的app上这么做也是一样愚蠢的。

现在你不必再担心了,WatchConnectivity可以完全解决这个难题,它可以毫无压力地实现传输你的app上的数据到你的Watch App上,并且整个过程是无缝透明的,以至于你的用户不需要知道任何东西。

所以让我们开始深挖吧!WatchConnectivity有两个部分-后台传输(background transfers)和交换信息(interactive messaging)。我将会在未来的教程里探究它的每一个部分的更多细节,但是这里只是一个概述,思考传输时应该使用哪一种传输模型:

Background Transfers

后台传输用在你的iOS或者Watch App不需要马上获得信息时。当然,在你的用户抬起他们的手腕时查看app里面的最新数据时,它会显示数据,但是此前他们不需要任何数据。

因为后台传输应用于传输不是马上就需要的数据,Apple认为使用后台传输的最佳时机是-当有些东西依赖于如:电池容量,网络连接,使用模式等时。

在你的iOSWatch app之间的后台传输数据有三种方式:

Application Context

当你的Watch App只需要展示最新的信息时,使用Application Context。例如,当你的Glance显示了比分,用户不会在意两分钟以前的 4-2 比分,他们只在乎现在的比分是 4-4 。另一个使用示例的例子是交通运输app,你不需要关心五分钟以前最后的一辆公交车在公交站的左边,他们只关心下一辆公交车什么时候到。

所以Application Context的工作方式是把数据块排成队列,并且如果在传输之前有一个新的可用数据块,原始的数据将会被新数据取代,然后再传输这个数据,除非它又被其它更新的数据块代替。

Tutorial: Sharing The Latest Data via Application Context

User Info

User Info是用于当你需要确认你的所有数据是被传输过的(不像Application Context)。User Info的数据是在一个FIFO (first-in-first-out) 队列中顺序传输的,所以没有东西被重写。

一个例子是你可能想要在一个文本消息的app中使用它-对于一个完整的会话和上下文环境来说,最后一条信息和第一条信息是同等重要的。如果用户更新了他们简介信息中的一小部分,Watch 简介中也应该同步这些更新。

File Transfer

这个是不解自明的。在你的iOSWatch app之间使用File Transfer去传输文件,例如图片或者plists。文件传输一个很棒的特性是你可以包含一个meta-data字典,其中包含你的文件名和数据,比如说这样你就可以排序你的图片。

Interactive Messaging

使用Interactive Messaging 能够实时地在你的iOSWach app之间传输数据!一个绝佳的示例就是愤怒的小鸟appWatch版本和iPhone版本-用户点击Watch,但是小鸟在手机上飞。按钮点击通过Interactive Messaging被传输到手机上了。
这里写图片描述

一个需要注意的地方,Interactive Messaging需要iPhone开启"reachable"状态。根据Apple's文档解释:

1
“Reachability in the Watch app requires the paired iOS device to have been unlocked at least once after reboot.”

TLDR

我爱死Kristina Thai’s WatchConnectivity post 里面区别传输的图解了:

这里写图片描述

同时,本文参考了Curtis Herbert的文章 Getting Data to Your WatchOS 2 App 中底部的Watch OS 2 observations部分。