errorHandler:WCErrorCodeDeliveryFailed为否-不确定哪里出了问题



我正在尝试在连接完成后将手机的UUID字符串发送到手表(不需要用户执行任何操作(。我用过这个教程(https://medium.com/@vanessaforney/ios-development-watch-connection-32415d415854(,但我一直收到"WCSession_onque_notifyOfMessageError:messageID:withErrorHandler:]21FB4ABE-D177-4689-AF50-62759283112C errorHandler:NO with WCErrorCodeDeliveryFailed">错误。我不确定我做错了什么。提前道歉,我会举一个MCVE/SSSCE的例子,但我不确定它会如何处理这个问题。如有任何帮助,我们将不胜感激!

这是ios应用程序端的WatchSessionManager:

class WatchSessionManager: NSObject, WCSessionDelegate {
static let sharedManager = WatchSessionManager()
var device_id = ""
private override init() {
super.init()
session?.delegate = self
session?.activate()
}
func setDeviceID(id: String) {
device_id = id
}
private let session: WCSession? = WCSession.isSupported() ? WCSession.default : nil
private var validSession: WCSession? {
if let session = session, session.isPaired && session.isWatchAppInstalled{
os_log("paired and reachable")
return session
}
return nil
}

func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
os_log("activationdidcompletewith")
updateApplicationContext()
}
func sessionDidBecomeInactive(_ session: WCSession) {
}
func sessionDidDeactivate(_ session: WCSession) {
}
func startSession() {
session?.delegate = self
session?.activate()
updateApplicationContext()
}
func updateApplicationContext() {
let context = ["device_id" : device_id]
do {
Swift.print("trying to update application context")
try WatchSessionManager.sharedManager.updateApplicationContext(applicationContext: context)
} catch {
Swift.print("error updating application context")
}
}
}
// Application Context
extension WatchSessionManager {
func updateApplicationContext(applicationContext: [String : Any]) throws{
if let session = validReachableSession {
do {
os_log("actually updating context")
try session.updateApplicationContext(applicationContext)
} catch let error {
throw error
}
}
}
}
extension WatchSessionManager {
// Sender
private var validReachableSession: WCSession? {
if let session = validSession, session.isReachable {
return session
}
return nil
}
// Receiver
func session(session: WCSession, didReceiveMessage message: [String : Any],
replyHandler: ([String : Any]) -> Void, errorHandler: ((Error) -> Void)? = nil) {
os_log("receiver")
if message["device_id"] != nil {
updateApplicationContext()
}
}
}

然后在我的AppDelegate.swift中,我包含了:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
WatchSessionManager.sharedManager.startSession()
WatchSessionManager.sharedManager.updateApplicationContext()
return true
}

这是我值班的电话会话经理:

import WatchConnectivity
import os.log
class PhoneSessionManager: NSObject, WCSessionDelegate {
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
requestApplicationContext()
}
static let sharedManager = PhoneSessionManager()
private let session: WCSession? = WCSession.isSupported() ? WCSession.default : nil
func startSession() {
session?.delegate = self
session?.activate()
}
func requestApplicationContext() {
sendMessage(message: ["device_id": true as AnyObject], replyHandler: nil, errorHandler: nil)
}
func sessionReachabilityDidChange(_ session: WCSession) {
requestApplicationContext()
}
}
extension PhoneSessionManager {
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
DispatchQueue.main.async(execute: {
UserSummary.userSummary.updateFromContext(applicationContext: applicationContext)
})
}
}
extension PhoneSessionManager {
private var validReachableSession: WCSession? {
if let session = session, session.isReachable {
return session
}
return nil
}
func sendMessage(message: [String : Any],replyHandler: (([String : Any]) -> Void)? = nil, errorHandler: ((Error) -> Void)? = nil) {
validReachableSession?.sendMessage(message, replyHandler: replyHandler, errorHandler: errorHandler)
}
}

然后在我的ExtensionDelegate.swift中我有:

import WatchKit
class ExtensionDelegate: NSObject, WKExtensionDelegate {
override init() {
super.init()
PhoneSessionManager.sharedManager.startSession()
}
func applicationDidFinishLaunching() {
PhoneSessionManager.sharedManager.requestApplicationContext()
// Perform any final initialization of your application.
}
}

我在尝试使用send消息函数发送整数数组时遇到了这个错误。我建议您尝试sendMessage(消息:["device_id":"test"],replyHandler:nil,errorHandler:nil(,而不是将true作为AnyObject发送。如果这对您有效,请尝试将true作为布尔值而不是AnyObject发送。

相关内容

  • 没有找到相关文章

最新更新