Tag: watchconnectivity

使用Apple Watch进行24/7加速度计跟踪

watchOS的人机界面指南 WatchKit编程指南 WWDC 2016 —设计出色的Apple Watch体验 WWDC 2016 — watchOS的新增功能 1.苹果框架:构建基块 1.1后台任务 WWDC 2016 —使您的手表应用程序保持最新 WWDC 2016 — watchOS上的性能架构 watchOS上的应用生命周期 watchOS上应用程序的默认状态not running 。 正在前台运行且屏幕打开的应用程序正在running 。 Dock中的应用程序和活动表面上具有复杂功能的应用程序处于suspended状态,已加载到内存中,可以快速恢复。 运行时未在监视屏幕上显示的应用程序(无论屏幕关闭还是其他应用程序或表面在前景中)都处于background状态,这是严格预算的, 实际上是我们的目标。 Apple提供了四个后台任务选项,watchOS可以将它们传递给扩展委托的handle(_ backgroundTasks: Set)方法: WKApplicationRefreshBackgroundTask是一种常规的后台任务类型,不适用于特定的刷新类型。 这种类型最常见的用例是安排其他任务。 在我们的应用程序中,它用于触发几乎所有工作:从CoreMotion请求加速度计数据,将其写入文件,然后开始将文件传输到手机端。 为了从watchOS接收此类任务,您应隐式请求它。 WKSnapshotRefreshBackgroundTask是一种任务类型,专门用于您的应用程序需要更新其快照(用作启动映像,如Dock中所示)时。 WatchOS会不时将任务分配给Dock中的每个应用程序,但也可以提出要求。 WKWatchConnectivityRefreshBackgroundTask是一种任务类型,用于当您通过WatchConnectivity框架将数据从iPhone传输到手表时。 我们目前不使用它。 WKURLSessionRefreshBackgroundTask是后台联网任务完成后分配给扩展委托的任务类型。 我们目前还没有使用它。 为了请求WKApplicationRefreshBackgroundTask : 2.1.3 SendSamplesOperationQueue SendSamplesOperationQueue责任是SendSamplesOperationQueue的创建和排队。 它跟踪成功和失败的操作,为将要选择的时间块重新填充新操作,具有自己的状态以防止使用外部的精确操作种类进行重新填充(例如,在ShortTasks中,我们希望允许从传感器请求数据只能在前4秒​​钟内执行操作,但只要我们没有任何限制,就可以创建以前准备发送的文件)。 将按以下优先级选择新操作的时间块: 如果连续尝试的次数少于numberOfRetriesIfFailedToSend ,则先前使用的时间戳和先前的文件传输失败。 如果队列的阶段允许,则使用以前使用的时间戳,但不准备发送文件(这意味着该应用在准备文件时被终止)。 如果队列的阶段允许,则将新时间戳计算为最新的先前时间戳+块持续时间 ,如果该时间早于块持续时间 ,则在其他情况下,将不会创建操作并且自我填充将停止,最后执行performWhenEverythingTransferred关闭。 2.1.4数据文件 […]

Apple Watch电池电量充电通知

我决定写这篇关于如何构建watchOS应用程序来解决一个小问题的快速文章。 这里有一个随附的Stack Overflow帖子。 当我从隔夜充电的Series 0 Apple Watch升级到Series 3时,我切换到了更零星的充电时间表。 由于Series 3在一天结束时不会像原来的Apple Watch一样耗尽电池电量,因此我开始过夜佩戴它来跟踪睡眠。 然后,我会每天将其扔到充电器上一次或两次,以保持良好的充电效果。 随机充电足以使它在大多数时间都能正常运行,但有时我会把它留在充电器上而忘了。 有时候在我上床睡觉时会发生这种情况,所以我会入睡,错过了睡眠追踪。 2018年8月,我获得了Oura戒指以追踪我的睡眠。 它通过蓝牙连接到iPhone。 充满电且在有效范围内时,本地通知会到达iPhone: 我喜欢此功能,因此我想尝试将其复制到Apple Watch。 想法是在iOS应用中设置阈值(例如80%),并在配对手表的电池电量达到该水平时在iPhone上收到通知。 可能的解决方案#1 iOS上已经有“今日”小部件,可以显示配对的Apple Watch的电池电量,因此似乎已经有些频繁地将数据发送到iPhone: 这让我认为我可以构建一个简单的iOS应用程序,该应用程序要么观察此电池百分比值,要么使用后台任务定期检查该值,并基于对该值的更改发送通知。 在WatchKit中,有WKInterfaceDevice对象,可在iOS和watchOS上使用,其中包含有关已配对手表的信息。 虽然可以使用WKInterfaceDevice.current().batteryLevel在watchOS应用上获取充电百分比,但该属性在iOS端不可用。 看来Today小部件必须使用私有API才能读取配对手表的电池电量。 可能的解决方案2 我探索的下一条途径是让手表定期将其充电百分比发送到配对的iPhone。 我的计划是在watchOS应用程序中安排后台刷新任务( WKApplicationRefreshBackgroundTask ),以使用WatchConnectivity定期将消息发送到watchOS应用程序。 在佩戴Apple Watch时,这些任务似乎每小时至少运行约一次。 手表会将当前的电池电量发送到配对的iPhone,如果电量超过阈值,则会立即向用户显示本地通知。 在许多情况下,当iOS应用使用sendMessage从手表接收消息时,它将在后台启动,而当使用transferUserInfo则不会。 根据我的测试,这些WatchConnectivity消息将通过Internet而不是仅通过蓝牙发送,因此从理论上讲,当手表的充电超出蓝牙范围时,这也将起作用。 在这一点上,电池电量转移到通知部分是非常可靠的,但是后台任务被调用的频率却不是。 通过添加并发症,可以使手表更频繁地报告其百分比。 这可能会导致watchOS更加频繁地为应用程序后台任务分配时间,例如每15分钟左右一次,但这可能会浪费复杂的空间,除非将其用作系统电池电量消耗的替代品。 官方的并发症可能会更频繁地更新,因为它是操作系统的一部分。 不过,所有这些都不相关。 在充电器上时,这些后台刷新任务似乎完全暂停了。 这意味着当手表在充电器上达到或超过指定水平时,此消息传递解决方案无法将通知发送到iPhone。 佩戴手表时的电池电量通知对于管理电量仍然很有用,因为可以设置比系统的10%通知更高的阈值,并在手表电池电量不足时发出警报。 至少在电量很低之前,这至少可以让人们更加警惕,但是并不能解决最初的问题,即不主动检查“今日”小部件或手表本身而知道何时将Apple Watch充电到一定水平。 因此,这个想法现在几乎是死胡同。 我认为这有几种可能的路径: 苹果内置本机电量级别通知(似乎不太可能) Apple更改了WatchKit,以使必要的变量可以在iOS中访问(也许,但是除了我的通知提示,我无法想到其他用于该目的的其他应用程序) 如果后者发生了,也许我会重新考虑一下这个想法。 如果您还有其他解决方案,请在此处查看Stack Overflow帖子。 可能的解决方案#3 […]

WatchConnectivity如何在多个WKInterfaceControllers间共享会话?

我有一种情况,我需要在多个WKInterfaceControllers中共享WCSession。 单例方法不起作用,一旦你设置委托给一个类,其他类中的所有委托都将失效。 场景:接口A基于数据内容发送和接收数据,呈现接口B.点击接口B,将请求并接收附加数据。 你将如何分享A和B之间的WCSession?

在苹果手表中调用URL的最佳做法是什么?

从Apple Watch调用API的最佳做法是什么? 使用苹果手表的sendMessage“watchConnectivity”到iPhone来调用API 要么 使用NSURLSession从手表本身调用API?

使用Watch连接框架将数据从iPhone传输到iWatch

我想问一个关于手表连接的问题。 1)当iWatch应用程序打开时,是否可以从iPhone读取数据? 我不想等待打开iPhone应用程序将数据传输到iWatch。 2)是否可以在iWatch上创buildlogin屏幕(从文本字段获取用户input) 3)iWatch有设备令牌和供应商ID? 如何从iWatch获取这些信息? 4)是否可以从iWatch应用程序读取iPhone应用程序的数据库(如iPhone应用程序中的SQL Lite数据库) 5)如何将字典从iPhone应用程序转移到iWatch应用程序。 分享任何示例PLZ。

与Watch Connectivity的updateApplicationContext共享访问令牌是否安全?

applicationContext是否被encryption? 还是只是存储为一个未encryption的plist文件? 因为如果是后者,我不应该使用它来传输访问令牌。

在Swift中检查协议的可用性

我正在采用WatchConnectivity,但我仍然支持iOS7和iOS8,因为这个库不可用。 而且我采用的协议WCSessionDelegate也不支持这个旧的系统。 在ObjectiveC中,我会使用预处理指令来屏蔽这个声明,并从不支持它们的版本中采用协议。 我如何处理在Swift中,以便应用程序不会在旧系统上崩溃?

“消息回复时间过长” – 观察与Watch OS的连接性问题3

在我的项目中,我使用Watch Connectivity来发送消息到手表和iPhone。 我可以发送消息到手机,并在启动应用程序时收到一串string,但是当使用动作时,我得到以下错误; 错误域= WCErrorDomain代码= 7012“邮件回复花费太长时间。” 这是如何build立的; 首先,手表向手机发送消息,然后手机发送一串string以显示在WKInterfaceTable 。 这有时在加载应用程序时工作。 (我获取所有称为Items NSManagedObjects并使用它们的titlestring属性来存储名为watchItems的array 。 不过,我在手表上有一个操作来删除数组中的所有项目,并用新数据刷新表格。 手表上的操作使用sendMessage函数将item发送到手机以从arrays中删除,然后手机将新的更新arrays发送到手表,手表更新表格。 但是,我得到相同的数组返回或错误。 很简单,所以在Swift 3和Watch OS3 / iOS 10之前,一切正常, 整个应用程序曾经工作。 以下是我如何设置一切; 电话应用程序委托 import WatchConnectivity class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate { var session : WCSession! var items = [Items]() func loadData() { let moc = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext let request = NSFetchRequest<Items>(entityName: "Items") […]

如何在使用CoreData时与Watch OS 2共享数据以显示在WKInterfaceTable中

我正在使用WatchConnectivity尝试将名为arrayOfOjects NSManagedObjecttypes的数据发送到Watch。 每个object都有一个名为title的string属性。 Watch上的InterfaceController加载并显示并清空表 – 因为数组是空的,所以当用户请求数据时,使用手机上的didReceiveMessage方法发送数据。 我不确定如何将字典数组添加到WKInterfaceTable以显示在WKInterfaceTable 。 有谁知道如何将数据发送到手表来显示在表中进行更改,并与手机同步回来? Apple Watch: class ObjectsInterfaceController: WKInterfaceController, WCSessionDelegate { var session : WCSession! var objectsArray = [[AnyObject]]() @IBOutlet var table: WKInterfaceTable! @IBOutlet var titleLabel: WKInterfaceLabel! func loadTableData() { table.setNumberOfRows(self.objectsArray.count, withRowType: "CellRow") if self.objectsArray.count > 0 { for (index, name) in self.objectsArray.enumerate() { let row = self.table.rowControllerAtIndex(index) as! CellRowController […]

通过WatchConnectivity发送数据时有效载荷有多大?

使用WatchConnectivity框架发送数据时,无论是从手机还是手表,或者相反,在框架给我提供WCErrorCodePayloadTooLarge错误之前,有效载荷有WCErrorCodePayloadTooLarge ? 我找不到苹果的文档上的答案,目前在互联网上似乎没有太多的信息(实际上,使用GooglesearchWCErrorCodePayloadTooLarge给了我4个结果)。 有没有人testing过试图find答案? 如果这个问题没有得到答案,我会尝试自己做,并发布结果。 到目前为止,我拥有的所有信息都可以支持大于30 MB的文件。 我想这是因为我在iPhone上拍了很多原始照片,通常都是36MB大小,而且总是出现在手表的照片应用中。 作为参考, WCSession的文档具有以下对WCErrorCodePayloadTooLarge描述: 指示正在发送的项目超出最大大小限制的错误。 数据字典和文件都可能出现这种types的错误。 可用于watchOS 2.0及更高版本。