WatchSync 1.3.2

WatchSync 1.3.2

Nick Romano 维护。



WatchSync 1.3.2

  • 作者:
  • Nick Romano

⌚️WatchSync

CocoaPods Carthage Compatible

带有类型消息、更好的错误处理和简化订阅 API 的 WatchConnectivity 包装器。

示例

发送消息

创建一个遵循 SyncableMessage 协议的新消息类型。在内部使用 Codable

import WatchSync

struct MyMessage: SyncableMessage {
    var myString: String?
    var myDate: Date?
}

你可以从 iOS 或 watchOS 应用中的任何地方发送消息。

let myMessage = MyMessage(myString: "Test", myDate: Date())

WatchSync.shared.sendMessage(myMessage) { result in
}

你也可以发送一个简单的字典。

WatchSync.shared.sendMessage(["test": "message"]) { result in
}

订阅新消息

监听来自配对设备(iOS 或 watchOS)的更改

class ViewController: UIViewController {
	var subscriptionToken: SubscriptionToken?
	
	override func viewDidLoad() {
   		super.viewDidLoad()

    	subscriptionToken = WatchSync.shared.subscribeToMessages(ofType: MyMessage.self) { myMessage in
			print(String(describing: myMessage.myString), String(describing: myMessage.myDate))
    	}
	}
}

更新应用程序上下文

WatchSync.shared.update(applicationContext: ["test": "context"]) { result in
}

订阅应用程序上下文更新

appDelegateObserver = 

class ViewController: UIViewController {
	var subscriptionToken: SubscriptionToken?

	override func viewDidLoad() {
		super.viewDidLoad()

		subscriptionToken = WatchSync.shared.subscribeToApplicationContext { applicationContext in
			print(applicationContext)
		}
   }
}

如何工作

  • 如果已配对的设备可达,WatchSync 将尝试使用 session.sendMessage() 通过交互式消息发送。
  • 如果已配对的设备不可达,它将回退到使用 sendUserInfo()
  • 所有符合 SyncableMessage 的消息都将被 JSON 序列化以减少有效负载大小。这是为了减少遇到 WCErrorCodePayloadTooLarge 错误的可能性。
  • 对于交互式消息,它使用 replyHandler 用于交付确认。

安装 & 设置

在您的 AppDelegate (iOS) 和 ExtensionDelegate (watchOS) 的 applicationDidFinishLaunching 下,您需要激活 Watch Connectivity 会话。

WatchSync.shared.activateSession { error in
    if let error = error {
        print("Error activating session \(error.localizedDescription)")
        return
    }
    print("Activated")
}

错误处理

sendMessage 方法返回一个闭包,其中包含一个用于切换以减少可能状态的数量以及错误的链接,您的应用可能最终会遇到。

WatchSync.shared.sendMessage(myMessage) { result in
    switch result {
    case .failure(let failure):
        switch failure {
        case .sessionNotActivated:
            break
        case .watchConnectivityNotAvailable:
            break
        case .unableToSerializeMessageAsJSON(let error):
            break
        case .watchAppNotPaired:
            break
        case .watchAppNotInstalled:
            break
        case .unhandledError(let error):
            break
        case .badPayloadError(let error):
            break
        case failedToDeliver(let error):
            break
        }
    case .sent:
        break
    case .delivered:
        break
    }
}