1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Custom URL schemeとDeep Linkingの概要

Last updated at Posted at 2024-09-10

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を設定すると、作成しているアプリでアプリ自身を呼ぶことや、他のアプリ・ブラウザから呼び出しがあったときにそのアプリに遷移するようになる。

Info.plist: 呼び出されるアプリにschemeを設定する
<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で確認)

Info.plist: 呼び出し側のアプリで、呼び出したいアプリのSchemeを設定する
<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キャンペーンを実施できます。

ATTとSKANソリューション | Adjust Help Center

サポートOS

  • App Tracking Transparency iOS 14.5以降
  • SKAdNetwork 3 : iOS 11.3以降
  • SKAdNetwork 4 : iOS 16.1以降

参考ページ

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?