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 [XIBファイル] コードでの呼び出し方まとめ

1 はじめに1.1 前提条件2 TableViewCell2.1 XIBの準備2.2 ViewControllerでの呼び出し3 CollectionView3.1 XIBの準備3.2 ViewCon ...

【Swift】QuickActionを動的に変更する

1 はじめに2 動的なショートカットの追加3 実装3.1 UIMutableApplicationShortcutItem4 動的にショートカットを設定する5 さいごに6 おすすめ書籍 はじめに こん ...

Sign in with Appleの実装

1 はじめに2 Sign in with Appleとは2.1 iOS レビューガイドライン2.2 つまり3 準備4 実装5 デザイン6 さいごに7 おすすめ書籍 はじめに こんにちは、nukkyです ...

【Swift】SwiftUIの理解のためDSL記法とFunctionBuilderを調べてみた

1 はじめに2 DSL(ドメイン固有言語)について3 関数ビルダ3.1 定義方法3.2 使用方法3.3 SwiftUIの関数ビルダ4 カスタム属性5 さいごに6 おすすめ書籍 はじめに Xcode11 ...

swift

SwiftでLTMorphingLabelを使ってみた

1 はじめに2 LTMorphingLabelとは3 準備4 実装 はじめに 今回はLTMorphingLabelというライブラリが面白そうなので使ってみました。 LTMorphingLabelとは ...

フォロー

blog-page_side_responsive

2020年9月
 12345
6789101112
13141516171819
20212223242526
27282930  

アプリ情報

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