カスタムURLスキームを使用して他のアプリを起動する方法をいくつか紹介しました。
- カスタムURLスキームを使って地図アプリに位置座標を渡して連携起動する - iOSアプリ開発の逆引き辞典
- カスタムURLスキームを使って通話アプリに電話番号を渡して連携起動する - iOSアプリ開発の逆引き辞典
上記で紹介した方法は、呼び出し元アプリと呼び出し先アプリが異なるケースです。呼び出し元が呼び出し元のカスタムURLスキームを使っているケースはあまり知りません。
本記事では呼び出し元アプリ側にカスタムURLスキームを設定して、呼び出し元アプリがカスタムURLスキームを使って自分自身を呼び出す方法を紹介します。
使い道はあまりないかもしれませんが、カスタマイズ可能なAR機能を提供するAurasma SDKやグループチャット機能を提供するLobi SDK(旧称:nakamap SDK)を使用して、制御がアプリから離れてライブラリ側に持っていかれている際に、ユーザー操作によるアプリ側の振る舞いを制御することができるかもしれません。
例えば、Aurasma SDKでは、マーカーを認識するとターゲットに画像や動画を被せることができます。その被せている画像や動画(オーバーレイ・オブジェクト)をタップするとWebサイトへ遷移することができます。これはSDK側・ライブラリ側で実装されていますので、Safariを起動させるのではなく、アプリ内ブラウザ(UIWebView)で表示させたい時にアプリ側でトリガーを拾うことができません。
Info.plistの「URL Types」を追加する
URL Schemesの値をcallmyselfapp
に設定しておきます。
他のアプリからcallmyselfapp://
というURLを開くことで、このアプリを起動させることができるようになりました。
カスタムURLスキームを開く
ここではサンプル的に下記のようにボタンがタップされるとカスタムURLスキームを開いています。
- (IBAction)tappedButton:(id)sender { NSURL *url = [NSURL URLWithString:@"callmyselfapp://"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; } }
カスタムURLスキームが開かれたのを受信する
カスタムURLスキームが呼ばれると、AppDelegateのapplication:openURL:sourceApplication:annotation
が呼ばれます。
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return YES; }
ここで条件によって処理を分ければ良いでしょう。