↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > アップルWatchから親アプリケーションへデータ送信

アップルWatchから親アプリケーションへデータ送信

サンプル画像

前回の記事では実機上で親アプリケーションからAppleWatchにイベントを送るのができなかった。 Notificationでできるはずなのですが、動作してくれなかった、、、、、。今回はいったん逆の時計から親アプリへのデータ送信の方法サンプルサイト をQiita様の中の記事でみつけましたので検証してみます。


参考:WatchKit AppからiPhone上の親アプリケーション本体にデータを渡す
参考:handleWatchKitExtensionRequest not responding to openParentApplication in Watchkit Extension (Swift)

Watch OS 2以降はデバイス間のデータ移管はWatchConnectivityを利用します

NSUserDefaultは利用できなくなっているので注意です!(2017-02-24)代わりにWCSessionをご利用ください。

参考:[watchOS 2][iOS 9] Watch Connectivity で情報をやりとりする様々な方法
参考: NSUserDefaults not working on Xcode beta with Watch OS2
参考:[WatchOS2] WatchOS2からiOSに対してメッセージを送る

やってみた

どうやらWatch側でopenParentApplication:reply:、本体実機側のアプリで application:handleWatchKitExtensionRequest:reply:を 実装すれば対応できるとのことです。やってみます。ひげがのびる怪しい過去記事のサンプルを利用しながら、端末でのびるヒゲの本数を 親アプリにも教えてあげるサンプルを作成してみます。

サンプル画像 このWatch側で動いている処理を本体へ、、、、

まずWatch側の実装です


    func onHigenobita(){
        //ここが実行されます
        timerLabel.setText("ひげが\(++higeCnt)本のびた");
        
        WKInterfaceController.openParentApplication(["higeValue": "\(higeCnt)"],
            reply: {replyInfo, error in
                println(replyInfo["fromParentApplication"])
        })
    }

タイマーで呼ばれている箇所です。ここにopenParentApplicationを実装します。replayのfromParentApplicationは実機側のAppから 返信内容を表示している箇所です

引き続き親側も準備します。AppDelegate.swftに以下を追加してみます


    func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!, reply: (([NSObject : AnyObject]!) -> Void)!) {
        var higeValueFromWatch: String = userInfo["higeValue"] as! String!
        reply(["fromParentApplication":"Parent Application got \(higeValueFromWatch) Hige!"])
    }
    

すると、、、 AppDelegate.swift:69:10: Parameters of 'application(_:handleWatchKitExtensionRequest:reply:)' have different optionality than expected by protocol 'UIApplicationDelegate' こんな警告が出たなんだこれは。よくわかりませんが、警告ですので恐る恐る進めてみます。すると、、、、思っているようにうまくいかない。。。Watch側が真っ黒(ログは受け取っていたので動作はしている様でした。)。

と思いましたがCleanしてからだとWatch側表示されました。うーん、いまいち挙動がまだおかしいような気がする。β版なので仕方ないのかな

サンプル画像

ひとまず確認できました。本体のiPhone側実機からreplayされている内容が反映されているのをLogで確認できました。

カスタマイズ

あんまり思い浮かびませんでしたので、ヒゲの伸びる速度を1.25倍ずつ加速度的に伸びるようにしてどんな気持ちになるかを検証してみました。


    func onHigenobita(){
        //ここが実行されます
        higeCnt = higeCnt * 1.25;
        timerLabel.setText("ひげが\(higeCnt)本のびた");
        WKInterfaceController.openParentApplication(["higeValue": "\(higeCnt)"],
            reply: {replyInfo, error in
                println(replyInfo["fromParentApplication"])
        })
    }
    

サンプル画像

なんだか胸がモヤモヤします。気持ちいいものではありませんね。。。。

まとめ

WatchKitの検証よりもヒゲが伸びて僕の気持ちがどう動くかの訳のわからぬお恥ずかしい検証になってしまいました。。。失礼しました。

(※2015/3/5追記)AppleWatchの発表があるとのAppleカンファレンス<3月9日>がもうすぐです!事前のまとめ情報をGIZMODE様で見つけましたので共有です!
発表会直前! 世界が注目するApple Watch事前情報まとめ

前の記事はこちらからです!

次の記事はこちらからです!

↓こんな記事もありますよ!


2021-05-14 14:21:41

WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。

AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、 昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は...

2021-05-06 14:04:37

LINEのアニメーションスタンプ制作の落とし穴、、、失敗談

ゴールデンウィークにLINEスタンプを作成してみました。 作り切って申請も通したんですが、意図したアニメーションと違う、、、、 LINEクリエーターの画面だと、アニメーションのプレビュー...

2021-05-01 18:05:35

久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。

忘れないようにメモ エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。 ターゲット→ex...
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!