C++ で Dynamic Links を作成する

Firebase Dynamic Links API を使用して、短い、もしくは長い Dynamic Links を作成できます。この API でリンクを作成する際、オプションとして複数のパラメータ構造体を渡すことができます。短いリンクは、生成済みの長いリンクから作成することもできます。Firebase Dynamic Links は次のような URL を生成します。

https://example.page.link/WXYZ

Android と iOS それぞれに必要な設定を追加すれば、両方のプラットフォームで C++ SDK を機能させることができます。

始める前に

Firebase Dynamic Links を使用するには、次の作業が必要です。

  • C++ プロジェクトを登録して Firebase を使用するように構成します。

    C++ プロジェクトですでに Firebase を使用している場合、この登録と構成はすでに行われています。

  • Firebase C++ SDK を C++ プロジェクトに追加します。

Firebase を C++ プロジェクトに追加するには、Firebase コンソールと開いている C++ プロジェクトの両方でこのタスクを行う必要があります(コンソールから Firebase 構成ファイルをダウンロードして C++ プロジェクトに移動するなど)。

Android

  1. Firebase コンソールで [Dynamic Links] セクションを開きます。
  2. 利用規約に同意せずに Dynamic Links の URI 接頭辞を設定している場合、プロンプトに従って利用規約に同意します。

    Dynamic Links URI 接頭辞がすでに存在する場合は、それをメモしておきます。Dynamic Links をプログラムで作成する場合は、Dynamic Links URI 接頭辞を指定する必要があります。

  3. 推奨: ディープリンクやフォールバック リンクで許可される URL パターンを指定します。これにより、お客様のドメインからお客様の管理外のサイトへリダイレクトする Dynamic Links が不正ユーザーによって作成されるのを防止できます。URL パターンをホワイトリストに登録するをご覧ください。

iOS

  1. Firebase コンソールで [Dynamic Links] セクションを開きます。
  2. 利用規約に同意せずに Dynamic Links の URI 接頭辞を設定している場合、プロンプトに従って利用規約に同意します。

    Dynamic Links URI 接頭辞がすでに存在する場合は、それをメモしておきます。Dynamic Links をプログラムで作成する場合は、Dynamic Links ドメインを指定する必要があります。

  3. iOS では、Firebase Dynamic Links C++ クライアント ライブラリはカスタム URL スキームを使用してリンクを処理します。Dynamic Links の受信に対応したアプリにするには、カスタム URL スキームをアプリに追加する必要があります。
    1. 左側のツリービューでプロジェクト名をダブルクリックしてプロジェクト構成を開きます。[ターゲット] セクションでアプリを選択し、[情報] タブを開いて [URL タイプ] セクションを展開します。
    2. [+] ボタンをクリックし、反転クライアント ID の URL スキームを追加します。この値を確認するには、GoogleService-Info.plist 構成ファイルを開いて REVERSED_CLIENT_ID キーを探します。見つかったキーの値をコピーし、構成ページの [URL スキーム] ボックスに貼り付けます。その他の入力欄は空白にしておきます。
    3. [+] ボタンをクリックし、2 個目の URL スキームを追加します。これはアプリのバンドル ID と同じです。たとえば、バンドル ID が com.example.ios であれば、その値を [URL スキーム] ボックスに入力します。アプリのバンドル ID はプロジェクト構成の [全般] タブ([ID] > [バンドル ID])で確認できます。

Firebase コンソール の使用

テスト用や、マーケティング チームがソーシャル メディア投稿用にリンクを簡単に作成できるよう、単一の Dynamic Link を生成したい場合、Firebase コンソールを開き、各手順が示されたフォームに沿って手動で作成するのが最も簡単です。

カスタム ドメイン

Dynamic Link のブランディングを詳細に管理するには、goo.gl または page.link サブドメインではなく、独自のドメインを使用します。プロジェクトのカスタム ドメインを設定するには、こちらの手順に沿って行ってください。

Firebase Dynamic Links API の使用

アプリを作成して初期化する

Dynamic Links を作成するには、まず firebase::App オブジェクトを作成して初期化しておく必要があります。

firebase::App のヘッダー ファイルを追加します。

#include "firebase/app.h"

この次の手順はプラットフォームによって異なります。

Android

firebase::App を作成し、引数として JNI 環境と jobject 参照を Java アクティビティに渡します。

app = ::firebase::App::Create(::firebase::AppOptions("APPLICATION NAME"), jni_env, activity);

iOS

firebase::App を作成します。

app = ::firebase::App::Create(::firebase::AppOptions("APPLICATION NAME"));

Dynamic Links ライブラリを初期化する

Dynamic Link を作成するには、まず Dynamic Links ライブラリを初期化しておく必要があります。

::firebase::dynamic_links::Initialize(app, null);

パラメータから長い Dynamic Link を作成する

ダイナミック リンクを作成するには、DynamicLinkComponents オブジェクトを作成し、追加構成のオプションのメンバーを設定して dynamic_links::GetShortLink または dynamic_links::GetLongLink に渡します。

次のシンプルな例では、Android アプリ(com.example.android.package_name)と iOS アプリ(com.example.ios)で開く https://www.example.com/ への長いダイナミック リンクを作成しています。

firebase::dynamic_links::IOSParameters ios_parameters("com.example.ios");

firebase::dynamic_links::AndroidParameters android_parameters(
    "com.example.android.package_name");

firebase::dynamic_links::DynamicLinkComponents components(
    "https://www.example.com/", "example.page.link");
components.android_parameters = &android_parameters;
components.ios_parameters = &ios_parameters;

firebase::dynamic_links::GeneratedDynamicLink long_link =
    firebase::dynamic_links::GetLongLink(components);

短い Dynamic Link を作成する

短いダイナミック リンクを作成するには、生成済みの長いリンクを GetShortLink に渡すか、長いダイナミック リンクと同じ手順で DynamicLinkComponents を作成します。

GetShortLink では、オプションで PathLength という属性を持つ追加の DynamicLinkOptions 構成パラメータを使用できます。このパラメータにより、リンクの生成方法を制御できます。短いリンクを生成するには、Firebase バックエンドへのネットワーク リクエストが必要なため、GetShortLink は非同期で実行され、Future<GeneratedLink> を返します。

次に例を示します。

firebase::dynamic_links::DynamicLinkOptions short_link_options;
short_link_options.path_length = firebase::dynamic_links::kPathLengthShort;

firebase::Future<firebase::dynamic_links::GeneratedDynamicLink> result =
    firebase::dynamic_links::GetShortLink(components, short_link_options);

定期的に(たとえば、毎秒 30 回または 60 回)実行される更新ループがプログラムに含まれている場合、更新されるたびに 1 回結果を確認できます。

if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::dynamic_links::kErrorCodeSuccess) {
    firebase::dynamic_links::GeneratedDynamicLink link = *result.result();
    printf("Create short link succeeded: %s\n", link.url.c_str());
  } else {
    printf("Created short link failed with error '%s'\n",
           result.error_message());
  }
}