09.その他‎ > ‎

カスタムURLスキームを使ったアプリ間連携

 本記事の最新版はこちらです。
本サイトは今後更新されませんのでご注意ください。

 プラットフォーム  iOS、Android、Web

スマートフォンのWebブラウザからアプリを起動したり、アプリから別のアプリを起動したい場合、カスタムURLスキーム(URL Scheme)を使って実現することができます。当社でもWebアプリとスマートフォンアプリが連携するサービスを数多く手がけています。

 特徴

         ・Webブラウザからスマートフォンアプリを起動します
         ・アプリから別アプリを直接起動できます
         ・アプリを起動する際にパラメータを渡して起動時の初期動作を変更することが可能です


実装サンプル(iOS)

アプリ連携には当然、呼び出す側と受ける側がありまが、
他アプリをへ連携する方法をサンプルとして記載します。

呼び出し方法は3つあります。
  1. openURLを利用したアプリ連携
  2. UIDocumentInteractionControllerを利用したアプリ連携
  3. UIActivityViewControllerを利用したアプリ連携(iOS6以降)

  • openURLを利用したアプリ連携
カスタムURLスキームを指定し呼び出す、昔からある基本方法です。
データの受け渡し方法は、UIPasteboard(iOSのクリップボード)」を使った方法や「カスタムURLスキームにファイルパスなどを付加」して渡す方法など
アプリによって様々となります。

呼び出しコード例
// メールアプリ起動
NSURL *mailURL = [NSURL URLWithString:@"mailto:"];
[[UIApplication sharedApplication] openURL:mailURL];

カスタムURLスキームは沢山あるので、一部だけ記載しておきます。
 アプリ名  カスタムURLスキーム
 メール  mailto: 
 電話  tel:xxx-xxxx-xxxx 
 iTunes  http://itunes.apple.com/jp/genre
 iBooks  itms-bookss:
 Maps  maps:
 リマインダー  x-apple-reminder://
 Twitter  twitter:
 Evernote  evernote:root


  • UIDocumentInteractionControllerを利用したアプリ連携
カスタムURLスキームを知らなくても、利用可能なアプリ一覧を表示、連携してくる便利なAPIです。

呼び出しコード例
// アプリ内にあるsample.pngのURL作成
NSURL* url = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"png"];
self.diController = [UIDocumentInteractionController interactionControllerWithURL:url];
self.diController.delegate = self;

// sample.pngを受け取れるアプリを表示
[self.diController presentOptionsMenuFromRect:openButton.frame
    inView:self.view animated:YES];


実行イメージ(iOS6)
【iPad」               【iPhone】

  • UIActivityViewControllerを利用したアプリ連携
iOS6以降という制限が可能であれば、UIActivityViewControllerを
利用した連携が非常に簡単です。
UIDocumentInteractionControllerと見た目もほぼ同じですが、
UIDocumentInteractionControllerは連携できるファイルは1つでしたが、
UIActivityViewControllerは、複数ファイルを渡すことができます。
確認出来ているのは、文字、画像、URLが渡すことができます。
さらに、UIActivityViewControllerの場合は、表示しないアプリ指定したり、
表示するアプリに独自アプリを追加できるなど拡張も可能となっています。

システムで用意されているアクティビティを呼び出すコード例
NSString *sendText = @"SendMessage";
NSArray *sendItems = [NSArray arrayWithObject:sendText];

UIActivityViewController *actController
    = [[UIActivityViewController alloc] initWithActivityItems:sendItems applicationActivities:nil];

// 表示したくないサービスを NSArrayで用意して、指定
NSArray *excludeActivities = @[UIActivityTypePostToWeibo];
actController.excludedActivityTypes = excludeActivities;

// activity処理完了時の動作
[actController  setCompletionHandler:^(NSString *activityType, BOOL completed) {
    NSLog(@"Completed: %@ - finished flag: %d", activityType, completed);
}];
    
// modalで表示
[self presentViewController:actController animated:YES completion:nil];


独自アプリを追加したコード例
NSString *sendText = @"SendMessage";
NSArray *sendItems = [NSArray arrayWithObject:sendText];

// 独自のActivityを作成する。
Game* game = [[Game alloc] init];
Pill* pill = [[Pill alloc] init];
NSArray* extItems = [NSArray arrayWithObjects:game, pill, nil];

UIActivityViewController *actController
    = [[UIActivityViewController alloc] initWithActivityItems:sendItems applicationActivities:extItems];

// ボタンを表示したくないサービスを指定する
NSArray *excludeActivities = @[UIActivityTypePostToWeibo];
actController.excludedActivityTypes = excludeActivities;

// activity処理完了時の動作
[actController  setCompletionHandler:^(NSString *activityType, BOOL completed) {
    NSLog(@"Ext Completed: %@ - finished flag: %d", activityType, completed);
}];

// modalで表示
[self presentViewController:actController animated:YES completion:nil];


実行イメージ
  【システム標準】        【独自追加】



 開発経緯や開発者による苦労話

今では当たり前になったカスタムURLスキームを使ったアプリ起動。弊社がアプリ開発を始めた当初はまだ情報が少なく、GoodReaderなどの有名なアプリの挙動を調べたり、英語の文献を探しながら手探り状態で実装しました
今では連携方法も増え、FacebookやTwitter等のSNSへ自動ログインしたりSNSアプリと連携することも可能になりました。

 サービスへの活用例

         ・Webサービスとスマートフォンアプリの連携
         ・スマートフォンアプリ同士の連携
         ・SNSのアカウントを利用したサービスの構築

 連携画面イメージ(iOS)

    【iOS5 iPad】        【iOS6 iPad】     【iOS6 iPhone】



     関連する記事

             ・iPhoneアプリを外部連携させてURLで起動させる方法(ブログ)

     まとめ

    アプリの起動だけではなく、アプリ間連携、SNSへの自動ログイン等も弊社では
    豊富なノウハウがあります。
    ぜひ一度ご相談ください