iOS

【Swift】URLスキームのアプリ間連携について

投稿日:

はじめに

こんにちは、suzukiです。iOSでアプリ間でデータのやり取りについてまとめました。今回の記事はURLスキームを主に説明いたします。

アプリ間連携とは

iOSではアプリ間で情報のやり取りをする方法がいくつかあります。
・URLスキーム
・App Groups
それぞれ簡単に特徴をまとめます。

URLスキーム

・異なるDeveloperアカウントから、リリースされたアプリで利用できる
・他のアプリからスキームを利用してアプリを起動することができる
・起動する際にURL形式で情報の受け渡しを行うことができる
・セキュアな情報のやり取りを行うと、脆弱性となりうる

App Groups

・同じDeveloperアカウントから、リリースされたアプリ間で利用できる
・他のアプリとUserDefault・KeyChain等を利用して、グループ内データの参照や編集ができる
・アプリの起動はできない

URLスキームの実装方法について

URLスキームの設定方法を具体的に説明すると、例えばSafariでtel://XXX-XXXX-XXXX(電話番号)と検索窓に入力すると電話アプリが呼び出されます。
電話アプリには”tel”というスキームが設定されているため、そのスキームが呼び出された際に起動が行われます。
上記の例では電話アプリでしたが、自作するアプリに任意のスキームを設定し、スキームを外部からの呼び出しを行うことができます。

URLスキームの設定

URLスキームに設定できる文字列には制限があります。Androidと微妙にルールが違うので、注意が必要です。
具体的にはハイフン、ドット、プラス以外の記号が使えない点に注意してください。
Androidはアンダースコアが設定できたりと動作が少し違います。
RFCに準拠したルールらしいです。
それでは実際に設定してみましょう。

TargetのInfoを選択すると下の方にURL Typesという項目があるので+ボタンを押します。
・identifierには適当な値(内部で参照されるだけなので重要ではない)
・urlSchemesには他のアプリからの呼出に使われる値
上記を入力しましょう。

ここまで完了したら実際にSafariの検索窓に”設定したスキーム://”と入力してください。
アプリの起動が確認できるはずです。

カスタムURLスキームの設定

さてURLスキームで呼び出すことに成功しましたが、その際に情報の受け渡しを行うことが可能です。
・アプリの特定の画面を呼び出したい
・他のアプリから、なんらかの値を渡したい
などを行いたい時は下記のようにURLスキームで呼び出された際のコードを記述しましょう。
SceneDelegate

基本的にはHostによって処理・画面を分岐させて、必要な情報はqueryとして受け取るという設計がいいみたいです。

ちなみにSafariでtest.scheme://category?id=7と入力した場合

こんな感じのログが出力されます。

URLスキームのセキュリティについて

URLスキームは便利なのですが、セキュリティの点でいくつか問題があります。
BundleIDのように一意な値ではないため、今回のtest.schemeを指定しても、必ず今回のアプリが開かれる保証がございません。
iOS11以降は同じスキームがある場合は先にインストールしたアプリが開かれます。
そのため、スキームが呼ばれた際に、どのアプリが起動されるかという保証がないためのっとりが行われたり等がございます。過去の事例として実際に問題になったこともあります。
URLスキームを利用し、セキュアな情報を連携することはやめた方が良さそうです。

最後に

最後までありがとうございます。異なるDeveloperアカウントからの連携を行う場合の方法を調べており、改めて機能としてまとめました。サーバーを介さないでセキュアな情報のやり取りは基本的にはできないという想定ですが、何かいい方法があるか調査中です。主にApp Extension周りは機能の追加が多いため、できることの確認から始めて行きます。

おすすめ書籍

[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus 詳解 Swift 第4版 [改訂新版]Swiftポケットリファレンス (POCKET REFERENCE)

blog-page_footer_336




blog-page_footer_336




-iOS
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

Xcode11のデバッグ機能

1 はじめに2 Device Conditions2.1 Thermal state condition2.2 Network link condition3 Environment Override ...

swift

[Swift]iPadのActionSheet表示でクラッシュする問題

1 はじめに2 エラー内容2.1 エラー原因2.2 まだこれで解決ではない3 さいごに はじめに こんにちは、nukkyです。 私は普段iPhoneアプリの開発を主に行っているのですが 慣れか油断かi ...

swift

[Swift3] SwitchとEnumを使ってSectionやCellを指定する

1 はじめに1.1 環境2 Enumの用意3 Tableの用意4 Cellの返却にEnumを使用する5 さいごに はじめに どうも、はじめです。 今回はSectionやCellの指定にSwitchとE ...

SwiftGenを使ってみた

1 はじめに2 SwiftGenの特徴2.1 コードジェネレートするリソースを選択することができる2.2 コードジェネレートするのにビルドが必要ない2.3 設定ファイルベースである3 インストール4 ...

[初心者向け]続・Xcodeの使い方(よく使うショートカットキーとエディタ)

1 はじめに1.1 前提条件2 ショートカットキー2.1 定義に移動(Jump to Definition)2.2 Quick Help2.3 Rename2.4 Edit All in Scope2 ...

フォロー

follow us in feedly

blog-page_side_responsive

2020年9月
 12345
6789101112
13141516171819
20212223242526
27282930 

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。