Firebase Dynamic Links API を使用して短いダイナミック リンクまたは長いダイナミック リンクを作成できます。この API でリンクを作成する際、オプションとして複数のパラメータ構造体を渡すことができます。短いリンクは、生成済みの長いリンクから作成することもできます。Firebase Dynamic Links では、次のような URL が生成されます。
https://example.page.link/WXYZ
Android と iOS それぞれに必要な設定を追加すれば、両方のプラットフォームで C++ SDK を機能させることができます。
準備
Firebase Dynamic Links を使用するには以下の作業が必要です。
C++ プロジェクトを登録して Firebase を使用するように構成する。
C++ プロジェクトですでに Firebase を使用している場合は、登録と Firebase 用の構成は完了しています。
Firebase C ++ SDK を C++ プロジェクトに追加する。
Firebase を C++ プロジェクトに追加するには、Firebase コンソールと開いている C++ プロジェクトの両方でこのタスクを行う必要があります(コンソールから Firebase 構成ファイルをダウンロードして C++ プロジェクトに移動するなど)。
Android
- Firebase コンソールで [Dynamic Links] セクションを開きます。
利用規約に同意せずに Dynamic Links ドメインを設定している場合、プロンプトに従って利用規約に同意します。
Dynamic Links ドメインを作成している場合は、それをメモしておきます。ダイナミック リンクをプログラムで作成する場合は、Dynamic Links ドメインを指定する必要があります。

- 推奨: ディープリンクやフォールバック リンクで許可される URL パターンを指定します。これにより、お客様のドメインからお客様の管理外のサイトへリダイレクトするダイナミック リンクが不正ユーザーによって作成されるのを防止できます。URL パターンをホワイトリストに登録するをご覧ください。
iOS
- Firebase コンソールで [Dynamic Links] セクションを開きます。
利用規約に同意せずに Dynamic Links ドメインを設定している場合、プロンプトに従って利用規約に同意します。
Dynamic Links ドメインを作成している場合は、それをメモしておきます。ダイナミック リンクをプログラムで作成する場合は、Dynamic Links ドメインを指定する必要があります。

- iOS では、Firebase Dynamic Links の C++ クライアント ライブラリはカスタム URL スキームを使用してリンクを処理します。ダイナミック リンクの受信に対応したアプリにするには、カスタム URL スキームをアプリに追加する必要があります。
- 左側のツリービューでプロジェクト名をダブルクリックしてプロジェクト構成を開きます。[ターゲット] セクションでアプリを選択し、[情報] タブを開いて [URL タイプ] セクションを展開します。
- [+] ボタンをクリックし、反転クライアント ID の URL スキームを追加します。この値を確認するには、
GoogleService-Info.plist構成ファイルを開いてREVERSED_CLIENT_IDキーを探します。見つかったキーの値をコピーし、構成ページの [URL スキーム] ボックスに貼り付けます。その他の入力欄は空白にしておきます。 - [+] ボタンをクリックし、2 個目の URL スキームを追加します。これはアプリのバンドル ID と同じものにします。たとえば、バンドル ID が
com.example.iosであれば、その値を [URL スキーム] ボックスに入力します。アプリのバンドル ID はプロジェクト構成の [全般] タブ([ID] > [バンドル ID])で確認できます。
Firebase コンソールの使用
テスト用に、またはマーケティング チームがソーシャル メディア投稿などで使用できるリンクを簡単に作成できるように、1 つのダイナミック リンクを生成する必要がある場合、Firebase コンソールを開き、各手順が示されたフォームに沿って手動で作成するのが最も簡単です。
Firebase Dynamic Links API の使用
アプリを作成して初期化する
ダイナミック リンクを作成するには、まず 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 Links ライブラリを初期化しておく必要があります。
::firebase::dynamic_links::Initialize(app, null);
パラメータから長いダイナミック リンクを作成する
ダイナミック リンクを作成するには、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);
短いダイナミック リンクを作成する
短いダイナミック リンクを作成するには、生成済みの長いリンクを 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());
}
}

