簡體   English   中英

WCSession sendMessage何時無法在后台喚醒iOS應用?

[英]When does WCSession sendMessage fail to wake iOS app in background?

我正在使用WCSession對象通過sendMessage(_:replyHandler:errorHandler:)將數據從監視應用程序(watchOS 3.3 beta 4)發送回相應的iOS應用程序。 根據Apple提供的文檔

在WatchKit擴展程序處於活動狀態且正在運行時從其調用此方法,它將在后台喚醒相應的iOS應用程序並使它可訪問。

但是,我發現如果在調用sendMessage之前WCSession對象的isReachable屬性為false ,則消息將無法發送,並出現以下錯誤: Error Domain=WCErrorDomain Code=7007 "WatchConnectivity session on paired device is not reachable." UserInfo={NSLocalizedDescription=WatchConnectivity session on paired device is not reachable.} Error Domain=WCErrorDomain Code=7007 "WatchConnectivity session on paired device is not reachable." UserInfo={NSLocalizedDescription=WatchConnectivity session on paired device is not reachable.}

該會話已激活,因此我認為此sendMessage調用應該可以使iOS應用程序可達,然后發送該應用程序,但這沒有發生。

在什么情況下會發生這種情況?有沒有解決方法?

a)如果將sendMessage(_, replyHandler:_, errorHandler:_)與非nil應答處理程序配合使用,則ios對方的WCSessionDelegate應該具有session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)方法已實現,一旦您在此方法中調用replyHandler(_:) ,消息將被視為已傳遞。 如果未實現此方法,則消息將不會獲得響應,並且您將收到超時錯誤。

b)另外,我注意到在執行session(_ session: WCSession, didXXX: XXX)任何session(_ session: WCSession, didXXX: XXX)方法中的代碼時,都不會傳遞消息。 看起來它們都在一個串行后台隊列中執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM