Getting started with Handoff
サンプルコード
https://github.com/sonsongithub/HandoffSample
iOS, OSXの設定
まず,Handoffの下準備として,iCloud経由でBluetoothデバイスが,同じiCloudアカウントに登録されなければならない. iOSの場合は,以下のように,デバイスからは削除できないBluetoothデバイスが登録されていることが表示されている必要がある. 正しく登録されれば,登録したデバイスがBluetoothのリストの中に表示される. iCloud経由で登録した場合は,デバイスがBluetoothの電波の圏外でかつ普通にペアリングがしたことがなくても,このリストに表示される.
また,OSXの場合は,以下のような画面になり,同様にOSXからもiCloud経由で登録したデバイスを削除できない.
OSXとiOSで同じiCloudアカウントにログインし,それぞれのデバイスで同じAppleIDでFaceTimeにサインインしていれば,OSX側のFaceTimeの環境設定ダイアログに以下のように,iPhoneへの着信をMacで受ける機能のチェックボックスが表示される.
次に基本的にデフォルトでオンになっているはずだが,Handoffの機能自体もオンにする必要がある.
NSUserActivityとSafariベースのシンプルなHandoff
別のデバイスに情報を転送するとき,このNSUserActivityクラスを使う. SafariにURLをHandoffで送信するアプリケーションを作ってみよう. まず,空のビューコントローラベースのアプリケーションのプロジェクト作成する. 次にViewControllerクラスに以下のコードを実装する.
@interface ViewController () {
NSUserActivity *_activity;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_activity = [[NSUserActivity alloc] initWithActivityType:@"com.sonson.HandoffSample"];
_activity.webpageURL = [NSURL URLWithString:@"http://www.apple.com"];
_activity.title = @"Browsing";
[_activity becomeCurrent];
}
@end
NSUserActivityクラスは,handoffで情報を引き渡すために利用するクラスである.
このサンプルでは,識別子をcom.sonson.HandoffTest
としてURLを引き渡す.
SafariにURLを引き渡すだけであれば,識別子は何であっても構わない.
まず,このプロジェクトを実行し,他のデバイス(このサンプルアプリケーションをインストールしていないもの)でアプリケーション切り替え画面か,ロック画面にしてみる.
正しく,handoffが動作しているならば,以下のような画面になっているはずである.
ここで,NSUserActivityクラスをビューコントローラのプロパティとして,保存しておく. そうしておかないと,NSUserActivityクラスはすぐに解放されてしまうので,Handoffのブロードキャストがすぐに終了してしまう. また,Handoffの発信を止めたい場合,再開したい場合には,それぞれメソッドが用意されている.
- (void)becomeCurrent;
- (void)invalidate;
ここで,ロック画面の場合は左下のSafariアイコンを上方向にスワイプ,アプリケーション切り替え画面の場合は,”iPad miniから”のアイコンをタップすると,Safariが起動し,NSUserActivityのwebpageURLで指定したURLが開かれる.このサンプルの場合は,http://www.apple.comがSafariで開かれる.
これでもっともシンプルなブラウジングのHandoffの実装は完了. かなり簡単であることがわかったと思う.
うまくいかないときのバッドノウハウ
ここまでのHandoffの実装がすんなりいった場合は,このセクションは読み飛ばしても構わない. しかしながら,Bluetooth関連の処理やiCloudの連携はうまくいかないのが,Appleの常だ. Handoffで行き詰まった場合のバッドノウハウについて書いてみる.
- iOS/OSXでのBluetoothの電源のON/OFFの切り替え
- iOS/OSXでのHandoffのON/OFFの切り替え
Handoffがうまく動かなくなったら,まずこの上の二つの操作を試してみよう. 以外にこれですんなり動くようになったりする. しかし・・・これだけでうまくいかないことがあるのも想定内である. 次に,完全にBluetoothのiCloud登録関連を初期化し,再度,登録を行うための手順を紹介する.
- OSX - iCloudをサインアウトする
- OSX - FaceTimeをサインアウトする
- OSX - iMessageをサインアウトする
- iOS - iCloudをサインアウトする
- iOS - FaceTimeをサインアウトする
- iOS - iMessageをサインアウトする
- OSXとiOSを再起動(用心深くやる場合)
- OSX - iCloudにサインイン
- OSX - FaceTimeにサインイン
- OSX - iMessageにサインイン
- iOS - iCloudにサインイン
- iOS - FaceTimeにサインイン
- iOS - iMessageにサインイン
この後,Bluetoothのデバイスリストと,FaceTimeの環境設定を確認すると良い. また,FaceTimeとiMessageには必ずしもログインする必要はない.
iOS8が正式リリースされたので,ここまで動かなくなることはないと思うが,以下の資料もご参考までにご覧くだしあ.
パート2に続く.