我想知道一个更好的方式发送(与iPhone)消息观看(在后台).目前我用途:
session.update(applicationContext: package, completion: nil)
用于向Watch发送消息和
func didReceivedApplicationContext(applicationContext:[String : Any])
在Watch中接收消息。问题是,正如文档中所说的那样,“系统将在适当的时间传输内容”,而我无法控制这些“oportune时间”。
此时,我在iPhone类中检查Watch的状态。如果Watch在后台,我用updateApplicationcontext发送数据(这不是很好),否则,如果Watch在前台,我用sendMessage发送数据
验证码:
if session.isWatchReachable()
{
session.send(message: package, completion: nil)
}
else
{
session.update(applicationContext: package, completion: nil)
}
那么有没有更好的方法在后台传输数据呢?
2条答案
按热度按时间gmxoilav1#
你必须在后台传输和立即发送数据之间做出选择。使用
WatchConnectivity
框架,没有办法安排数据传输在确切的时间发生。您必须选择使用即使在应用处于后台时也能发送数据的方法,还是立即从前台发送数据。
如果您需要保证在应用从后台唤醒时数据将被传输,并且对于您的用例
updateApplicationContext
在测试期间被证明是不够的,您可以使用解决方案。解决方法是使用
updateApplicationContext
在后台传输数据,并在Watch应用的ExtensionDelegate
类中,使用applicationDidBecomeActive()
方法检查数据传输是否在后台发生,如果没有发生,则使用sendMessage
函数立即从其他应用请求数据,并将请求的数据作为响应发回。要实现此功能,您的函数在Watch应用上应类似于以下内容:
在iPhone应用程序上,您可以执行以下操作:
q43xntqr2#
这是不可能在后台接收iWatch上的数据。您只能在前台接收数据。
updateApplicationContext()
方法是专为在后台发送数据(从iPhone到iWatch)而设计的。当手表应用程序将被激活(打开)时,上下文数据将可供使用-无需担心。15:43 - https://developer.apple.com/videos/play/wwdc2021/10003/
所以,你在答案中所做的是正确的解决方案。