Dynamic Links からアプリリンクとユニバーサル リンクに移行する

この移行ガイドでは、アプリリンクユニバーサル リンクを使用する方法を説明し、必要に応じて Firebase Hosting を使用してアプリサイトの関連ファイルをホストします。

この移行は、次の Firebase Dynamic Links 機能を置き換えるものです。

機能 Firebase Dynamic Links アプリリンク / ユニバーサル リンク
リンクを 1 回クリックするだけで、ユーザーをデバイスに合ったストアに誘導する
遅延ディープリンクを使用して、アプリをダウンロードしインストールした後、ユーザーにプロセスの継続を提供する
アプリ内のディープリンク コンテンツを利用し、ユーザーにコンテクスト体験を提供する(すでにインストールされている場合)
ダイナミック リンクのクリック イベントに関連する分析データを提供する
短縮リンク URL を作成する機能を提供する

このガイドでサポートされていない移行に関する他の Firebase Dynamic Links 機能を引き続き使用する必要がある場合は、Dynamic Links の非推奨に関するよくある質問ドキュメントの他の移行シナリオをご覧ください。

次のような Firebase Dynamic Links があるとします。

ダイナミック リンクの例
リンク名 Example.com へようこそ
ディープリンク https://example.web.app/welcome
Android アプリ com.example.android
Apple アプリ com.example.ios
長いダイナミック リンク https://example.page.link/?link=https://example.web.app/welcome&apn=com.example.android&isi=123456789&ibi=com.example.iuos
短いダイナミック リンク https://example.page.link/m9Mm

この移行ガイドの目的は、Firebase Dynamic Links を次のように置き換えることです。

https://example.page.link/m9Mm

置き換え後は、次のようなアプリリンク / ユニバーサル リンクになります。

https://your-project-domain.web.app/welcome

アプリリンク / ユニバーサル リンクのディープリンクでは、ユーザーに次のものが提供されます。

  • アプリがインストール済みの場合にアプリを開くためにクリックできるディープリンク
  • 続きのユーザー ジャーニー(アプリを開いたときにアプリの特定部分に移動)

ただし、アプリリンク / ユニバーサル リンクのディープリンクでは、(Firebase Dynamic Links が以前行っていた)ユーザーに対する次の動作は提供されません。

  • アプリをダウンロードとインストールを行うために、ユーザーをデバイスに合ったストアへ誘導する
  • 初めてアプリを起動してインストールした後、ユーザー ジャーニーの続きを提供する

これらのアプリリンク / ユニバーサル リンクのの動作や機能は、上の表に示した Firebase Dynamic Links とは異なることに注意してください。

始める前に

Firebase Dynamic Links は、アプリのインストール後にディープリンク機能を提供するために、アプリリンク(Android の場合)とユニバーサル リンク(iOS の場合)を独自の基盤となる実装で利用します。

このガイドでは、Firebase Hosting を使用して独自のアプリリンクとユニバーサル リンクを作成し、Firebase Dynamic Links から新しいアプリリンク / ユニバーサル リンクの移行ソリューションに移行しながら、Firebase Dynamic Links の機能の一部を置き換える方法について説明します。

移行を完了するには、次の情報が必要です。

  • 移行する Firebase Dynamic Links
  • ダイナミック リンクに含まれるディープリンク URL パラメータ
  • 以前の Firebase Dynamic Links ドメインを置き換える際に使用するドメイン(該当するドメインがある場合)

Dynamic Links メタデータのエクスポート ガイドは、既存のリンク メタデータをエクスポートし、上記の情報を取得するために使用します。

移行手順の概要

  1. Firebase Hosting を使用して、アプリリンク / ユニバーサル リンク構成ファイルをホストする新しいドメイン(まだ使用していない場合)をプロビジョニングします。

  2. アプリリンク / ユニバーサル リンクの構成ファイルを作成してホスティング ドメインでホストします。

  3. Firebase Dynamic Links で使用されるディープリンク スキーマに一致する新しいアプリリンク / ユニバーサル リンクを作成します。

  4. ディープリンクを受け取るために、Android / iOS アプリとアプリコードを更新します。

  5. アプリリンクとユニバーサル リンクのインテグレーションをテストします。

  6. 公開または共有する Firebase Dynamic Links をアプリリンクとユニバーサル リンクに置き換えます。

最初の手順は、アプリリンクとユニバーサル リンクの両方の移行フローで共通です。残りの内容はプラットフォームによって異なるため、最初に移行するプラットフォームに応じて、以下のガイドの該当するセクションに進んでください。

ドメインを選択する

まず、アプリリンク / ユニバーサル リンクに使用するドメインを選択します。このドメインは、ユーザーと共有する新しいリンクに使用されます。

Firebase Hosting を使用する場合、your-project-domain.web.app または your-project-domain.firebaseapp.com 形式のプロジェクト サブドメインは無料で自動的にプロビジョニングされます。Firebase Hosting の有無にかかわらず、必要に応じてカスタム ドメインを使用してアプリリンク / ユニバーサル リンク構成ファイルをホストすることもできます。

Firebase Hosting の設定

次に、Firebase Hosting インスタンスをセットアップして設定する必要があります。

Firebase Hosting インスタンスの設定が完了すると、必要に応じて your-project-domain.web.app のようなドメイン、すなわちカスタム ドメインが作成されています。

アプリリンクを使用するには、リンクで使用されるドメインとアプリの間に安全な関連付けを確立するための構成ファイルをホストする必要があります。アプリリンクの場合、これは assetlinks.json ファイルです。

assetlinks.json ファイルを作成してホストする手順

assetlinks.json ファイルを使用すると、App Links に使用するウェブドメインのコンテンツを扱える承認済みアプリのリストを提供できます。assetlinks.json ファイル自体は、ウェブドメインのルート(/.well-known)でホストする必要があります。

以下の手順に沿って構成を完了します。

  1. Firebase Hosting ルート ディレクトリの public フォルダの下に .well-known フォルダを作成します。

  2. .well-known フォルダの下に assetlinks.json という名前のファイルを作成します。

  3. 以下の内容を、各フィールドの意味に注意して assetlinks.json ファイルにコピーします。

    [{
      "relation": ["delegate_permission/common.handle_all_urls"],
      "target": {
        "namespace": "android_app",
        "package_name": "com.example.android",
        "sha256_cert_fingerprints":
          ["01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF"]
      }
    }]
    
    • namespace - 提供するアプリケーションの名前。
    • package_name - アプリの build.gradle ファイルで宣言されている applicationId を指します。
    • sha256_cert_fingerprints - アプリの署名に使用するキーストア ファイルの SHA256 フィンガープリントを指します。

    Android Studio が使用する debug.keystore ファイルは、デバッグ目的で sha256_cert_fingerprints レコードを生成するために使用できます。このファイルは、Mac と Linux では /Users/<username>/.android/debug.keystore、Windows では C:\Users\<username>\.android\debug.keystore にあります。

    keytool を使用してこのキーストアから SHA256 値を取得できます。

    この方法の完全な手順については、アプリリンクに関するドキュメントのこちらのセクションをご覧ください。

    別の方法としては、Android Studio の App Links Assistant を使用して assetlinks.json ファイルの内容を生成し、アプリリンクを処理するようにアプリを構成することもできます。

  4. ホスティング用にファイルをインデックス化するために firebase.json ファイルを更新します。

    "headers": [
      {
        "source": "/.well-known/assetlinks.json",
        "headers": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ]
      }
    ]
    
  5. assetlinks.json ファイルは用意したので、firebase deploy を実行して変更をホストします。

    上記の deploy コマンドを実行するには、Firebase CLI をインストールする必要があります。

    firebase deploy --only hosting
    
  6. https://your-project-domain.web.app/.well-known/assetlinks.json にアクセスして assetlinks.json ファイルを確認します。

このステップでは、アプリリンク用に作成した新しいドメインと一致する通常のディープリンク URL を使用して、Firebase Dynamic Links のディープリンクを再作成します。

たとえば、次の Firebase Dynamic Linksがあるとします。

ダイナミック リンクの例
リンク名 Example.com へようこそ
ディープリンク https://example.web.app/welcome
Android アプリ com.example.android
Apple アプリ com.example.ios
長いダイナミック リンク https://example.page.link/?link=https://example.web.app/welcome&apn=com.example.android&isi=123456789&ibi=com.example.iuos
短いダイナミック リンク https://example.page.link/m9Mm

この場合は、ディープリンク パラメータ(https://example.web.app/welcome)を抽出し、アプリのアプリリンク パラメータとして使用します。

アプリリンクやユニバーサル リンクを使用して、移行する Firebase Dynamic Links ごとにこのプロセスを繰り返し、使用したディープリンク スキーマを複製します。

たとえば、次の Firebase Dynamic Links のショートリンク、ディープリンク パラメータ、移行されたディープリンク値をご覧ください。

ショートリンク ディープリンク パラメータ 移行済みのディープリンク
yourapp.page.link/welcome https://example.com/welcome yourapp.web.app/welcome
yourapp.page.link/c7sn https://example.com/main/?p=23&t=1 yourapp.web.app/main/?p=23&t=1
yourapp.page.link/social https://example.com/friendinvite/?add=1 yourapp.web.app/friendinvite/?add=1

次に、移行済みの新しいディープリンクによって公開または共有された Firebase Dynamic Links のインスタンスを、ユーザーが以前の Firebase Dynamic Links ではなく、これらのアプリリンクをクリックできるように置き換える必要があります。

ドメインを選択してディープリンク スキーマを選択し、Firebase Dynamic Links をアプリリンクに移行した後は、Android アプリとアプリケーション コードを更新して新しいディープリンクを受け取ります。

ディープリンクを処理するようにアプリを構成する方法については、こちらのアプリリンクに関するドキュメントか、Android Studio ガイドに従うことをおすすめしますが、主な手順は次のとおりです。

  1. それぞれのディープリンクを処理するアクティビティを特定する
  2. そのアクティビティ用のインテント フィルタをAndroidManifest.xml ファイルに追加する
  3. アクティビティのアプリケーション コードでディープリンクを受信する

たとえば、MainActivity を使用してディープリンクの一部を処理するとします。そのためには、AndroidManifest.xml ファイルの MainActivity に次のインテント フィルタを追加する必要があります。

<activity android:name=".MainActivity"
   android:exported="true">
   <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
   <intent-filter android:autoVerify="true">
       <action android:name="android.intent.action.VIEW" />
       <category android:name="android.intent.category.DEFAULT" />
       <category android:name="android.intent.category.BROWSABLE" />
       <data android:host="example.web.app" android:scheme="http"
           android:pathPrefix="/welcome" />
       <data android:host="example.web.app" android:scheme="https"
           android:pathPrefix="/welcome" />
   </intent-filter>
</activity>

このステップでは、wxample.web.app ドメインからのディープリンクの処理先として /welcome パス プレフィックスを含む MainActivity を指定します。また、android:autoVerify="true" 属性も指定する必要があります。これにより、アプリをこの特定の種類のリンクのデフォルト ハンドラに指定できます。

最後に、MainActivity にコードを追加してディープリンク データを取得し、それを使用してアプリのディープリンク エクスペリエンスを推進する必要があります。これは、Firebase Dynamic Links と統合したときにアプリ内ですでにコーディングされているロジックに似ています。

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.main)

  val  data: Uri? = intent?.data

  val toast = Toast.makeText(this, data, duration)
  toast.show()
}

作成したアプリリンクは、アプリを実機または Android Emulator で実行することによりテストできます。

アプリリンク用に構成したドメインを使用してクリック可能なリンクを作成し、そのリンクをクリックして、それがアプリで開かれ、目的のアクティビティに移動することを確認します。

別の方法としては、Android Studio のアプリリンク アシスタントを使ってアプリリンクのインテグレーションをテストすることもできます。すなわち、アプリリンク URL に次のコマンドを使用し、それが一致するアクティビティを正しく起動することを確認します。

adb shell am start -a android.intent.action.VIEW -d <your_deep_link_url>

移行の最終ステップは、公開または共有する Firebase Dynamic Links を可能な限りアプリリンクに置き換え、その後もアプリリンクを使用し続けることです。

この手順は Firebase Dynamic Links を公開する場所と方法によって異なりますが、どのリンクが存在するのかを追跡できるように、既存の Firebase Dynamic Links メタデータをエクスポートすることができます。Dynamic Links メタデータのエクスポート ガイドをご覧ください。

ユニバーサル リンクを使用するには、リンクで使用されるドメインとアプリの間に安全な関連付けを確立するための構成ファイルをホストする必要があります。ユニバーサル リンクの場合、これは apple-app-site-association ファイル(AASA ファイルとも呼ばれます)です。

apple-app-site-association ファイルを作成してホストする手順

AASA ファイルを使用すると、ユニバーサル リンクに使用するウェブドメインのコンテンツを扱える承認済みアプリのリストを提供できます。AASA ファイル自体は、ウェブドメインのルート(/.well-known)でホストする必要があります。

以下の手順に沿って構成を完了します。

  1. Firebase Hosting ルート ディレクトリの public フォルダに「.well-known」フォルダを作成します。

  2. 「.well-known」フォルダに「apple-app-site-association」という名前のファイルを作成します。

  3. 次の内容を、各フィールドの意味に注意して apple-app-site-association ファイルにコピーします。

    {
      "applinks": {
        "apps": [],
        "details": [
          {
            "appId": "$TEAM_ID.com.firebase.UniversalLinks",
            "paths": [
              "NOT /_/*",
              "/*"
            ]
          }
        ]
      }
    }
    
    • $TEAM_ID.BundleId - リンクを処理する権限を持つアプリケーションの完全修飾名
  4. ホスティング用にファイルをインデックス化するために firebase.json ファイルを更新します。

    "headers": [
      {
        "source": "/.well-known/apple-app-site-association",
        "headers": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ]
      }
    ]
    
  5. AASA ファイルが用意できたので、変更をホストするように firebase deploy を行います。

  6. https://your-project-domain.web.app/.well-known/app-app-site-association にアクセスして、AASA ファイルを確認します。

このステップでは、ユニバーサル リンク用に作成した新しいドメインと一致する通常のディープリンク URL を使用して、Firebase Dynamic Links のディープリンクを再作成します。

たとえば、次の Firebase Dynamic Linksがあるとします。

ダイナミック リンクの例
リンク名 Example.com へようこそ
ディープリンク https://example.web.app/welcome
Android アプリ com.example.android
Apple アプリ com.example.ios
長いダイナミック リンク https://example.page.link/?link=https://example.web.app/welcome&apn=com.example.android&isi=123456789&ibi=com.example.iuos
短いダイナミック リンク https://example.page.link/m9Mm

この場合は、ディープリンク パラメータ(https://example.web.app/welcome)を抽出し、アプリのユニバーサル リンク パラメータとして使用します。

アプリリンクやユニバーサル リンクを使用して、移行する Firebase Dynamic Links ごとにこのプロセスを繰り返し、使用したディープリンク スキーマを複製します。

たとえば、次の Firebase Dynamic Links のショートリンク、ディープリンク パラメータ、移行されたディープリンク値をご覧ください。

ショートリンク ディープリンク パラメータ 移行済みのディープリンク
yourapp.page.link/welcome https://example.com/welcome yourapp.web.app/welcome
yourapp.page.link/c7sn https://example.com/main/?p=23&t=1 yourapp.web.app/main/?p=23&t=1
yourapp.page.link/social https://example.com/friendinvite/?add=1 yourapp.web.app/friendinvite/?add=1

次に、移行済みの新しいディープリンクによって公開または共有された Firebase Dynamic Links のインスタンスを、ユーザーが以前の Firebase Dynamic Links ではなく、これらのユニバーサル リンクをクリックできるように置き換える必要があります。

ドメインを選択してディープリンク スキーマを選択し、Firebase Dynamic Links をユニバーサル リンクに移行した後は、iOS アプリとアプリケーション コードを更新して新しいディープリンクを受け取ります。

ディープリンクを処理するためのアプリの設定については、こちらのユニバーサル リンクに関するドキュメントの全文を確認することをおすすめしますが、主な手順は以下のとおりです。

  1. プロジェクト構成を更新して、新しく作成したドメインのディープリンクをアプリが処理できるようにします。

  2. アプリケーション コードでディープリンクを受け取る

プロジェクト構成を更新してアプリがディープリンクを処理できるようにするには、apple-app-site-associate ファイルをホストするために使用する予定のドメインの xCode で、関連するドメインをドメインに追加する必要があります。

これは、次のように行います。

  1. Xcode を開く
  2. ファイル ナビゲータでプロジェクトを選択する
  3. プロジェクト設定の [Signing & Capabilities] タブに移動する
  4. [関連ドメイン] セクションまで下に移動する
  5. [+] ボタンをクリックして、「applinks:」の形式でプロジェクトにドメインを追加する

最後に、受信ディープリンクを受け取ることができるようにアプリケーション コードを更新する必要があります。

これを行うには、まず、ユニバーサル リンクに応答するように次のコードを追加することで、AppDelegate.swift ファイルを更新します。

func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
  AppDelegate.showReceivedUrl(userActivity: userActivity);
  return true
}

static func showReceivedUrl(userActivity: NSUserActivity) {
  if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
    let url = userActivity.webpageURL!
    print(url.absoluteString)
}

上記のコードは、ユニバーサル リンクのコールバック メソッドをオーバーライドし、ディープリンク URL(存在する場合)をログに記録します。

ユーザーがユニバーサル リンクをクリックした時点ですでにアプリが開いている場合、SceneDelegate 内のユニバーサル リンク コールバックが呼び出されるため、SceneDelegate クラスからも同じ showReceivedUrl メソッドを呼び出します。

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
  AppDelegate.showReceivedUrl(userActivity: userActivity)
}

作成したユニバーサル リンクは、アプリを実機またはシミュレータで実行することによりテストできます。

ユニバーサル リンク用に構成したドメインを使用してクリック可能なリンクを作成し、そのリンクをクリックして、それがアプリで開かれ、目的の画面に移動することを確認します。

スマートアプリ バナーのサポート

ユーザーに Firebase Dynamic Links と同様のエクスペリエンスを提供する方法として、スマートアプリ バナーの使用を強くおすすめします。

スマートアプリ バナーを使用すると、アプリがまだデバイスにインストールされていない場合、ユーザーは App Store にリダイレクトされ、そこでアプリの一覧が表示されます。また、オプションとして、アプリがダウンロードされインストールされた後にアプリに渡すパラメータを構成して、ユーザー ジャーニーの続きをユーザーに提供することもできます。アプリがすでにインストールされている場合は、このパラメータをアプリに渡すことでアプリが開き、ユーザーがクリックしたスマートアプリ バナーに基づいて適切なコンテンツに移動できるようになります。

移行の最終ステップは、公開または共有する Firebase Dynamic Links を可能な限りユニバーサル リンクに置き換え、その後もユニバーサル リンクを使用し続けることです。

このステップは、Firebase Dynamic Links を公開する場所と方法によって異なります。

既存の Firebase Dynamic Links の移行を追跡できるように、Firebase Dynamic Links の短縮リンク メタデータをエクスポートする方法に関するガイドを公開する予定です。詳細については、Dynamic Links の非推奨に関するよくある質問のドキュメントをご覧ください。