Dynamic Links のカスタム ドメインを設定する

Dynamic Links のブランディングを詳細に管理するには、page.link サブドメインではなく、独自のドメインを使用します。カスタム ドメインを使用すると、次の例のようなダイナミック リンクを作成できます。

https://example.com/link-suffix
https://example.com/links/promos/link-suffix
https://links.example.com/link-suffix
https://ex.amp.le/link-suffix

URL の link-suffix より前の部分は URL 接頭辞 と呼ばれ、ダイナミック リンクのカスタム ドメインとパス接頭辞が含まれています。ダイナミック リンクを作成するときは、URL 接頭辞を指定する必要があります。

カスタム ドメインを設定するには、Firebase プロジェクトに対する編集者またはオーナーの権限が必要です。

ウェブドメインを Dynamic Links に使用する

ウェブページ、ユニバーサル リンク、アプリリンクとダイナミック リンクに同じドメインを使用できますが、その場合は、ダイナミック リンク URL がウェブの URL と競合しないように注意してください。特定の URL 接頭辞を使用するように Dynamic Links を構成している場合、その接頭辞で始まるすべての URL はダイナミック リンクとして扱われるため、この接頭辞の付いた URL を使用して通常のホスト コンテンツを指定することはできません。

たとえば、リソース https://example.com/my-resource(ウェブページ、ユニバーサル リンク、アプリリンク)のダイナミック リンクを作成する場合に Dynamic Links URL 接頭辞として https://example.com/ を使用すると、https://example.com/my-resource がダイナミック リンクとして扱われるため、この接頭辞は使用できません。代わりに、別のドメインまたは別のパス接頭辞を含む URL 接頭辞を使用する必要があります。

したがって、次に示す長い形式のダイナミック リンク(および同等な短いリンク)は、link パラメータで指定された URL の先頭に Dynamic Links URL 接頭辞 https://example.com/ が付いているため、意図したとおりに機能しません。

 https://example.com/?link=https://example.com/my-resource
 https://example.com/?link=https://example.com/resources/my-resource

ただし、次に示す長い形式のダイナミック リンク(および同等な短いリンク)は、URL 接頭辞が link の URL と競合しないため機能します。

 https://link.example.com/?link=https://example.com/my-resource
 https://example.com/links/?link=https://example.com/my-resource
 https://ex.amp.le/?link=https://example.com/my-resource

Firebase コンソールでカスタム ドメインを設定する

通常、カスタム ドメインは Firebase コンソールですべて設定できます。方法は次のとおりです。

  1. プロジェクトに Firebase Hosting を設定していない場合は、Firebase コンソールの [Hosting] ページを開き、[始める] をクリックして設定手順を進めます。この時点で指示された手順を完了する必要はありません。

  2. Firebase コンソールの [Dynamic Links] ページを開きます。

  3. これまでに Dynamic Links を使用したことがない場合は、[始める] をクリックします。それ以外の場合は、プルダウン メニューから [URL 接頭辞を追加] をクリックします。

    次に設定ウィザードを完了し、プロンプトが表示されたら、使用するドメインとパス接頭辞を指定します。

  4. iOS のみ: Xcode プロジェクトの Info.plist ファイル内で FirebaseDynamicLinksCustomDomains キーを作成し、アプリの Dynamic Links URL 接頭辞にこのキーを追加します。次に例を示します。

    <key>FirebaseDynamicLinksCustomDomains</key>
    <array>
      <string>https://example.com/link</string>
      <string>https://example.com/promos</string>
    </array>
    

カスタム ドメインを手動で設定する

Dynamic Links のカスタム ドメインがすでに設定されていて別のドメインを追加する場合や、Hosting サイトにすでに接続されているドメインを追加する場合は、状況に応じてカスタム ドメインを手動で設定する必要があります。

方法は次のとおりです。

  1. まだドメインを Firebase Hosting に接続していない場合は、接続します。

    Firebase Hosting を使用してドメインを設定するには、ローカル プロジェクトのディレクトリ内に構成ファイル firebase.json を作成します。

  2. 最新バージョンの Firebase CLI に更新します(v6.5.0 以降)。

  3. プロジェクトの firebase.json ファイル内で、Dynamic Links 用の Hosting サイトを構成します。プロジェクトに複数のサイトが含まれている場合は、使用するドメインに接続されているサイトを構成してください。

    • [appAssociation] を [AUTO] に設定します。このように設定すると、assetlinks.json ファイルと apple-app-site-association ファイルがリクエストされたときに、Hosting がこれらを動的に生成します。

    • dynamicLinkstrue に設定して書き換えルールを設定することにより、Dynamic Links に使用するパス接頭辞を指定します。これらのパスに対するリクエストは、Dynamic Links にプロキシされます。

      URL のパスを書き換えるルールとは異なり、ダイナミック リンクの書き換えルールに正規表現を含めることはできません。

      ご使用のサイトに複数の書き換えルールがある場合は、リクエストと一致する最初の書き換えルールが Hosting によって実行されることにご注意ください。

    例:

    "hosting": {
      // ...
      "appAssociation": "AUTO",
      "rewrites": [
        {
          "source": "/promos/**",
          "dynamicLinks": true
        },
        {
          "source": "/links/share/**",
          "dynamicLinks": true
        }
      ]
    }
    

    上記の構成を使用すると、次の例のような URL 接頭辞を持つダイナミック リンクを作成できます。

    https://your-domain/promos/link-suffix
    https://your-domain/links/share/link-suffix
    

    このドメインを Dynamic Links 専用にする場合は、/** というソースパスを使用して、パス接頭辞を持たないダイナミック リンクを作成します。

    {
      "source": "/**",
      "dynamicLinks": true
    }
    

    上記の規則を使用して、次の例のようなダイナミック リンクを作成できます。

    https://your-domain/link-suffix

  4. Hosting の構成に関する変更をデプロイします。

    firebase deploy --only hosting

    (省略可)デプロイされた firebase.json の内容は、Hosting REST API を使用して確認できます。

  5. iOS のみ: Xcode プロジェクトの Info.plist ファイル内で FirebaseDynamicLinksCustomDomains キーを作成し、アプリの Dynamic Links URL 接頭辞にこのキーを追加します。次に例を示します。

    <key>FirebaseDynamicLinksCustomDomains</key>
    <array>
      <string>https://example.com/promos</string>
      <string>https://example.com/links/share</string>
    </array>
    

Dynamic Links と Hosting の優先順位

Dynamic Links ではホスティングの優先順位に注意する必要があります。

  • Dynamic Links URL 接頭辞は、それよりも優先度の高いホスティング構成と競合しないようにします。たとえば、ホストされる静的コンテンツは必ず再書き込みよりも優先されます。
  • rewrites 属性内では、Hosting のレスポンスは、リクエストされたパスをキャプチャする最初の source glob によって指定されたルールに従います。

たとえば、your-domain/source-path/link-suffix のダイナミック リンクが設定されていて、your-domain/source-path/index.html に静的コンテンツがある場合は、静的コンテンツが優先されます。エンドユーザーにはダイナミック リンクではなく index.html が表示されます。同様に your-domain/source-path/link-suffix に静的コンテンツがある場合は、エンドユーザーにはダイナミック リンクではなく静的コンテンツが表示されます。

Dynamic Links と Hosting の両方に同じブランディングを使用する場合は、Dynamic Links URL 接頭辞に次のいずれかのオプションを使用することを検討してください。

  • パス接頭辞と一致するように source 属性を設定します。たとえば、example.com というカスタム ドメインがある場合は、再書き込みルールを次のようにします。

    // Domain is example.com
    "rewrites": [ {
      "source": "/links/**",  // Dynamic Links start with "https://example.com/links/"
      "dynamicLinks": true
    } ]
    
  • Dynamic Links に使用するサブドメインを設定してから、そのサブドメインと一致するように source 属性を設定します。たとえば、links.example.com というサブドメインがある場合は、再書き込みルールを次のようにします。

    // Domain is links.example.com
    "rewrites": [ {
      "source": "/**",  // Dynamic Links start with "https://links.example.com/"
      "dynamicLinks": true
    } ]