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


関連記事

[Swift] プロトコルを弱参照するために

1 はじめに2 プロトコルとは2.1 プロトコルの作成方法2.2 プロトコルを採用したクラス作成2.3 使用例3 ClassOnlyProtocolとは3.1 メリット3.2 使用例4 最後に5 おす ...

swift

[Swift]UIViewからUIImageを作成しローカルに保存

1 はじめに1.1 前提条件2 実装2.1 UIViewからUIImageへ2.2 UIImageをローカルに保存2.3 おまけ:画像のリサイズ3 さいごに4 おすすめ書籍 はじめに こんにちは、nu ...

swift

[Swift]UITableViewのセルの入れ替えが簡単に実装できるライブラリ「SwiftReorder」

1 はじめに2 準備3 実装4 さいごに はじめに こんにちは、nukkyです。 今回は、UITableViewでセルを入れ替えたい際に、ドラッグ&ドロップ操作を簡単に実装できるライブラリ「S ...

【Swift】WKWebViewでJavaScriptを利用して値の受け渡し

1 はじめに2 WebViewを利用した値の受け渡し2.1 事前準備2.2 WebViewのJavaScriptから、ネイティブの処理を呼出2.3 ネイティブから、WebView内の要素の値を取得2. ...

swift

[Swift]AVSpeechSynthesizerで音声再生

1 はじめに2 実装2.1 コード2.2 呼び出し3 さいごに はじめに こんにちは、nukkyです。 音声読み上げはちょっと今更感が漂いますが、案件で使用したばっかというのと、備忘録兼、初心者向けと ...

フォロー

blog-page_side_responsive

2020年9月
 12345
6789101112
13141516171819
20212223242526
27282930  

アプリ情報

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