Custom URL scheme とは
iOSの場合 (Custom URL scheme) : やや非推奨
カスタムURLスキームは、アプリ内のリソースを参照する方法を提供します。たとえば、ユーザーがメール内のカスタム URL をタップすると、指定されたコンテキストでアプリが起動します。他のアプリが、特定のコンテキスト データを使用してアプリを起動するようにトリガーすることもできます。たとえば、フォト ライブラリ アプリは指定された画像を表示する場合があります。
https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app
実装方法
呼び出されるアプリにschemeを設定する
CFBundleURLTypes
を設定すると、作成しているアプリでアプリ自身を呼ぶことや、他のアプリ・ブラウザから呼び出しがあったときにそのアプリに遷移するようになる。
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>None</string>
<key>CFBundleURLName</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleURLSchemes</key>
<array>
<string>my-app-scheme</string>
</array>
</dict>
</array>
</dict>
schemeで他のアプリを呼び出すには
呼び出し側のアプリでcanOpenURL(_:)を使用し、Schemeに対応したアプリがデバイスにインストールされているかを確認する場合は、LSApplicationQueriesSchemes
に配列でSchemeを設定しておく必要がある。
※設定していない場合は、canOpenURL(_:) の返却値が一律falseになる。
なお作成しているアプリが自身をcanOpenURL(_:)で判別した場合は、LSApplicationQueriesSchemes
の設定に関わらず一律trueが返却される。
※設定していない場合でも、open(_:options:completionHandler:)による「該当アプリの呼び出し自体」を拒否出来る訳ではない。(iOS 15.2で確認)
<dict>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>scheme</string>
</array>
</dict>
// インストール状況を確認してからアプリを呼び出す
if UIApplication.shared.canOpenURL(URL(string: "my-app-scheme://")!) {
UIApplication.shared.open(URL(string: "my-app-scheme://")!, options: [:])
}
or
// インストール状況を確認を確認せずにアプリを呼び出す。なお自身の application(_:didFinishLaunchingWithOptions:) を呼ぶ際は、canOpenURL がなくても良い様に思う
UIApplication.shared.open(URL(string: "my-app-scheme://")!, options: [:])
Androidの場合 (Deep links) : やや非推奨
ディープリンクは、ユーザーをアプリの特定の部分に直接誘導する、あらゆるスキームのURIです。ディープリンクを作成するには、アプリ内の適切なアクティビティにユーザーを誘導するインテント フィルタを追加します。次のコード スニペットをご覧ください。
https://developer.android.com/training/app-links?hl=ja#deep-links
実装方法
Deep Linking とは
iOSの場合 (Deep Linking) : 非推奨
iOSでURIリンクをタップした際に、対応したアプリがインストールされている場合はそのアプリへ遷移する仕組み。
Webページを開いた後に、更にアプリへ遷移するアニメーションが入るため、Universal Links
と比べるとUXが劣ります。
またインストールされていない場合はブラウザでWebページを開いた状態で終わり、App Storeへの流入は行えません。
iOSの場合 (Universal Links) : 推奨, iOS 9+
Deep Linking
のUXが低い部分を改善した、App Storeやアプリへ遷移する仕組み。
アプリのインストールがされていない場合は、App Storeのアプリ紹介ページへ送ります。
インストールされている場合は、そのアプリで開きURLパラメータとから、データを受け取ります。
実装方法
Androidの場合 (Web links) : 非推奨
ウェブリンクは、HTTP または HTTPS スキームを使用するディープリンクです。Android 12 以降では、ウェブリンク(Android アプリリンクではない)をクリックすると、常にウェブブラウザにコンテンツが表示されます。以前のバージョンの Android を搭載したデバイスでは、自分のアプリ、またはユーザーのデバイスにインストールされている他のアプリもウェブリンクを処理できる場合、ユーザーはブラウザに直接移動しない可能性があります。代わりに、図 2 のような確認ダイアログが表示されます。
https://developer.android.com/training/app-links?hl=ja#web-links
Androidの場合 (Android App Links) : 推奨, Android 6.0+
特定のドメインを開いた際に、ユーザーにどのアプリで尋ねずに直接対応したアプリで開く仕組み。
またAndroid 12以降であれば、システム設定画面から「そのアプリがデフォルトで開くドメインを、ユーザーが選択出来る」ようになった。
Android 6.0(API レベル 23)以降で利用可能な Android アプリリンクは、HTTP および HTTPS スキームを使用し、autoVerify 属性を含むウェブリンクです。この属性を使用すると、アプリは特定のタイプのリンクのデフォルト ハンドラとしてアプリ自体を指定できます。アプリがインストールされていれば、ユーザーが Android アプリリンクをクリックするとすぐに起動し、確認ダイアログは表示されません。
https://developer.android.com/training/app-links?hl=ja#android-app-links
Android アプリリンクとは? | Adjustモバイルマーケティング用語集 | Adjust
実装方法
Android AppLinksについて #Android - Qiita
HTTP URLをAndroidアプリで開くために調べたこと #Android - Qiita
Deferred Deep Link とは
アプリのインストールがされていない場合は、App Storeのアプリ紹介ページ(*1)へ送ります。
App Storeからアプリをインストールして起動後に、流入時のコンテキスト(データ)を引き継ぐことが出来る。
受け取る主なコンテキストとしては特定の画面に遷移するためのID、キャンペーンIDやクーポンコードなどになると思います。
インストール済みの場合は、そのアプリで開きURLとURLパラメータ(コンテキスト)を受け取ります。
*1: ランディングページ(LP)を用意し、Appsflyer OneLinkやAdjustなどを用いれば、LPでアプリ紹介とApp Storeを案内をすることも出来る
Deep LinkingとDeferred Deep Linkの違い
- Deep Linkingの場合
- 未インストール
- App Storeを表示する。コンテキストはその場で破棄される
- インストール済
- アプリが起動し、コンテキストを受け取る
- 未インストール
- Deferred Deep Linkingの場合
- 未インストール
- App Storeを表示する
- App Storeの表示する代わりに、LPを表示する
- App Storeからアプリをインストールして起動後に、流入時のコンテキストを引き継ぐことが出来る
- インストール済
- アプリが起動し、コンテキストを受け取る
- 未インストール
Deferred Deep Linkに対応している主なサービスプロバイダ・ベンダー
- Adjust OneLink
- AppsFlyer
- Bitly
- Branch
- Kochava
関連する技術
App Tracking Transparency (ATT) と SKAdNetwork (SKAN)
Appleのユーザープライバシー規制により、トラッキング目的でデータを収集しパートナーと共有する場合、iOSデバイスのIDFAにアクセスするためのユーザー同意が必要となります。
AdjustのiOSおよびSKANソリューションを使用すると、プロセスの全段階でユーザープライバシーを保護しつつ、効果的なiOSキャンペーンを実施できます。
サポートOS
- App Tracking Transparency iOS 14.5以降
- SKAdNetwork 3 : iOS 11.3以降
- SKAdNetwork 4 : iOS 16.1以降
参考ページ
- ATTとSKAN
- ATT
- SKAdNetwork