2017-08-14 19 views
0

私はtransferFileを使用していますが、ファイルを送受信できますが、転送プロセスを完了するためにはiPhoneアプリを開く必要があります。iOSでwatchOSファイル転送をバックグラウンドで受信する方法

他のアプリを見ると、受信したデータをバックグラウンドで受信して処理することができます(たとえば、プッシュ通知をユーザーに送信するなど)。

私は彼らがこれをどうやって行ったのか疑問に思います。

+0

watchappのようなものを実装する携帯電話側でごdidreceivemessage機能に

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 *****") } } 

その後、あなたの時計の側にこのような何かを実装しますhttps://developer.apple.com/documentation/watchconnectivity/wcsession/1615687-sendmessage – abjurato

+0

チップをありがとうございます。しかし、電話のWCSessionがもうアクティブでなくなっても、メッセージが届かないことに気づいています。これを回避する方法はありますか? – wazawoo

答えて

0

データを要求する時計接続のsendMessage機能を使用して時計アプリから電話にメッセージを送信する必要があります。これは、iPhoneアプリを起動させます。その後、電話であなたのdidreceivemessageメソッドでは、あなたのファイルを時計に送信するfiletransfer関数を使用する必要があります。

sendMessageを使用してメッセージが送信されるときを明確にするために、iphoneアプリケーションをバックグラウンドで起動させて、ファイル転送で応答できるメッセージを受信します。これがうまくいきたいです

ファイル転送を送信する前に、まずメッセージを送信する必要があります。ので、あなたのファイルがする、iOSアプリを起動しますインスタントメッセージを送信することができ、この

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は行いません。 –

関連する問題