カスタムURLスキームを使ったアプリ間連携
スマートフォンのWebブラウザからアプリを起動したり、アプリから別のアプリを起動したい場合、カスタムURLスキーム(URL Scheme)を使って実現することができます。当社でもWebアプリとスマートフォンアプリが連携するサービスを数多く手がけています
特徴
・Webブラウザからスマートフォンアプリを起動します
・アプリから別アプリを直接起動できます
・アプリを起動する際にパラメータを渡して起動時の初期動作を変更することが可能です
実装サンプル(iOS)
アプリ連携には当然、呼び出す側と受ける側がありますが、
他アプリをへ連携する方法をサンプルとして記載します。
呼び出し方法は3つあります。
1. openURLを利用したアプリ連携
2. UIDocumentInteractionControllerを利用したアプリ連携
3. UIActivityViewControllerを利用したアプリ連携(iOS6以降)
・openURLを利用したアプリ連携
カスタムURLスキームを指定し呼び出す、昔からある基本方法です。
データの受け渡し方法は、「UIPasteboard(iOSのクリップボード)」を使った方法や「カスタムURLスキームにファイルパスなどを付加」して渡す方法など
アプリによって様々となります。
呼び出しコード例
1 2 3 |
// メールアプリ起動 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: Evernote evernote:root
・UIDocumentInteractionControllerを利用したアプリ連携
カスタムURLスキームを知らなくても、利用可能なアプリ一覧を表示、連携してくる便利なAPIです。
呼び出しコード例
1 2 3 4 5 6 7 8 |
// アプリ内にある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]; |
・UIActivityViewControllerを利用したアプリ連携
iOS6以降という制限が可能であれば、UIActivityViewControllerを
利用した連携が非常に簡単です。
UIDocumentInteractionControllerと見た目もほぼ同じですが、
UIDocumentInteractionControllerは連携できるファイルは1つでしたが、
UIActivityViewControllerは、複数ファイルを渡すことができます。
確認出来ているのは、文字、画像、URLが渡すことができます。
さらに、UIActivityViewControllerの場合は、表示しないアプリ指定したり、
表示するアプリに独自アプリを追加できるなど拡張も可能となっています。
システムで用意されているアクティビティを呼び出すコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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]; |
独自アプリを追加したコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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)
関連する記事
・iPhoneアプリを外部連携させてURLで起動させる方法(ブログ)
まとめ
アプリの起動だけではなく、アプリ間連携、SNSへの自動ログイン等も弊社では
豊富なノウハウがあります。ぜひ一度ご相談ください。