2017-08-14 25 views
0

我正在使用transferFile,并且我可以成功发送和接收文件,但为了完成传输过程,我需要打开iPhone应用程序。如何在后台在iOS上接收watchOS文件传输

在观察其他应用程序时,他们似乎能够在后台接收并处理收到的数据(并向用户发送推送通知)。

我想知道他们是如何做到这一点的。

+0

watchapp可以发送即时消息会醒来iOS应用,因此这些文件在iosapp仍处于活动状态时交付:https://developer.apple.com/documentation/watchconnectivity/wcsession/1615687-sendmessage – abjurato

+0

谢谢您的提示。但是,我注意到一旦手机上的WCSession不再处于活动状态,将不会收到该消息。有没有办法解决? – wazawoo

回答

0

您应该使用watch连接的sendMessage函数从手表应用程序向手机发送消息,以请求数据。这会唤醒iPhone应用程序。然后在手机上的didreceivemessage方法中,您应该使用文件传输功能将文件发送到手表。

为了阐明何时使用sendMessage发送消息,这会在后台唤醒iphone应用程序,以接收消息,以便它可以通过文件传输进行响应。希望这会有所帮助

您需要在发送文件传输之前先发送消息。实现这样的事情在你的手表侧

func sendActivationMessage() { 
    if session.activationState == .activated && session.isReachable { 
     session.sendMessage(["Watch Message" : "Activate"], replyHandler: { 
    (reply) in 

      if reply["Phone Message"] as! String == "Activated" { 
       //This is where you should implement your file transfer 
      } 
     }, errorHandler: { (error) in 

      print("***** Error Did Occur: \(error) *****") 
     }) 
    } else { 
     print("***** Activation Error *****") 
    } 
} 

然后在手机端的didreceivemessage功能实现这样的事情

func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) { 

    if let messageFromWatch = message["Watch Message"] { 
     let messageData = messageFromWatch as! String 

     //Message From Watch to Activate Watch Connectivity Session 
     if messageData == "Activate" { 
      replyHandler(["Phone Message" : "Activated"]) 
     } 
} 
+0

我已经实现了这个功能,但是如果手表远离手机足够长的时间,手机的WCSession停用,文件传输仍然无法完成。然后,需要打开手机应用程序才能完成转移。我希望有一种解决方法,但它看起来像其他应用程序遭受同样的限制。 – wazawoo

+0

您需要先发送消息。我在回答中添加了一个代码示例 –

+0

sendMessage将在后台唤醒手机。 transferFile不会。 –

相关问题