LoginSignup
1
0

More than 5 years have passed since last update.

Watch ConnectivityのApplication Contextは、再送できない?

Posted at

iPhoneなどと、AppleWatchの通信に使う Watch Connectivityについてです。

だいたい、こんな感じでコーディングするようです。

// セッションの準備
if (WCSession.isSupported()) {
    let session = WCSession.defaultSession()
    session.delegate = self 
    session.activateSession() 
}

// データの送信
do {
    let applicationDict = ["hoge" : "huga"]
    try WCSession.defaultSession().updateApplicationContext(applicationDict)
} catch {
    // エラー処理
}

そして、このAPIは「新しいデータがキューに追加されると古いデータは上書きされる」とのこと。 その仕様の影響なのでしょうか、同じ内容のデータ(辞書)を送信すると、さっき送ったから ということなのか、送られないようです。

Watch → iPhoneの場合は受信側が起動されるので問題ないようなのですが、iPhone→watchは受信に失敗する場合があるようです。  (自分でプログラムした)ACKが帰ってこないので、再送するが、ACKが帰ってこない。 っという現象に遭遇して発見しました。

結局、送信タイムスタンプを追加することで回避しました。

// データの送信
do {
    let applicationDict = ["hoge" : "huga", "timeStamp":Date()]
    try WCSession.defaultSession().updateApplicationContext(applicationDict)
} catch {
    // エラー処理
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0