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

[Swift3]で直感的にアニメーションが記述できるライブラリ「Cheetah」

1 はじめに2 準備3 実装3.1 準備3.2 移動3.3 回転と拡大3.4 速度調整3.5 繰り返し3.6 アニメーションの終了4 さいごに はじめに こんにちは、nukkyです。 今回は、仕事でV ...

swift

SwiftでのDateクラスの煩わしさから解放されるSwiftDateを使ってみた

1 はじめに2 準備3 使ってみよう3.1 現在の取得3.2 パラメータの取得3.3 パラメータの操作3.4 文字列変換3.5 Dateの比較3.6 判定メソッド4 さいごに はじめに こんにちは、n ...

swift

iOSでライブラリFSCalendarをつかって簡単にカレンダー表示

1 はじめに2 準備3 実装3.1 Storyboard3.2 コード3.3 タップの取得4 さいごに はじめに こんにちは、nukkkyです。 ツール系アプリ開発時にカレンダー表示を よく使うと思い ...

iOS13で発生するUICollectionviewのカクつきを解消する

iOS13でCollectionViewの動作が少し変わりました。 Cellの入れ替え時にデータの更新を行う際にはどのように作成すれば良いか、関係のあるデリゲートを含め説明させていただいております。 おまけとして、Xcode11.3対応を行った際に対応した内容を簡単にですが記述しております。Xcode11対応をされる方の参考になればと思います。

swift

【Swift】Full Keyboard Accessが有効な際にボタンの動作が行われない。

1 はじめに2 フルキーボードアクセス3 今回の問題4 対応方法5 再現アプリ5.1 ViewController5.2 ChildView6 動かしてみた7 さいごに8 おすすめ書籍 はじめに こん ...

フォロー

blog-page_side_responsive

2020年9月
 12345
6789101112
13141516171819
20212223242526
27282930  

アプリ情報

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