Firebase Dynamic Links for C++ を使ってみる

Firebase Dynamic Links はアプリへのディープリンクで、ユーザーがアプリをインストール済みかどうかにかかわらず機能します。インストールされていないアプリへのダイナミック リンクをユーザーが開くと、そのアプリの Play ストアページが開き、そこからアプリをインストールすることができます。インストール後にユーザーがアプリを開くと、ディープリンクされたコンテンツが表示されます。

クロス プラットフォームの Firebase Dynamic Links クライアント アプリを C++ で記述するには、Firebase Invites C++ API を使用します。

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

準備

Android

  1. アプリを Firebase プロジェクトに接続していない場合は、Firebase console で接続します。
  2. Firebase を Android プロジェクトに追加します
  3. Firebase Invites の依存関係をアプリレベルの build.gradle ファイルに追加します。
    dependencies {
         compile 'com.google.firebase:firebase-invites:10.0.1'
    }
  4. 静的ライブラリの libapp.alibinvites.aC++ SDK でリンクします。

iOS

  1. アプリを Firebase プロジェクトに接続していない場合は、Firebase console で接続します。
  2. Firebase を iOS プロジェクトに追加します
  3. iOS では、Firebase Invites の C++ クライアント ライブラリはカスタム URL スキームを使用してリンクを処理します。ダイナミック リンクの受信に対応したアプリにするには、カスタム URL スキームをアプリに追加する必要があります。
    1. 左側のツリービューでプロジェクト名をダブルクリックしてプロジェクト設定を開きます。[ターゲット] セクションでアプリを選択し、[情報] タブを開いて [URL タイプ] セクションを展開します。
    2. [+] ボタンをクリックし、反転クライアント ID の URL スキームを追加します。この値を確認するには、GoogleService-Info.plist 設定ファイルを開いて REVERSED_CLIENT_ID キーを探します。見つかったキーの値をコピーし、設定ページの [URL スキーム] ボックスに貼り付けます。その他の入力欄は空白にしておきます。
    3. [+] ボタンをクリックし、2 個目の URL スキームを追加します。これはアプリのバンドル ID と同じものになります。たとえば、バンドル ID が com.example.app であれば、その値を [URL スキーム] ボックスに入力します。アプリのバンドル ID は [プロジェクトの設定] の [全般] タブ([ID] > [バンドル ID])で確認できます。
  4. Podfile で次のポッドをインクルードします。
    pod 'Firebase/Invites'
  5. pod install を実行します。
  6. C++ SDK で Xcode プロジェクトに firebase.frameworkfirebase_invites.framework を追加します。

ダイナミック リンクを受信する

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

受信したダイナミック リンクを確認するには、まず 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"));

リスナーを実装してダイナミック リンクを確認する

Firebase Invites C++ ライブラリは、ダイナミック リンクの受信でも使用されます。受信したダイナミック リンクを確認するには、firebase::invites::Listener クラスを実装して使用します。

招待を受信するヘッダー ファイルを追加します。

#include "firebase/invites.h"

Invites ライブラリを初期化します

::firebase::invites::Initialize(app);

firebase::invites::Listener を実装するオブジェクトを作成し、SetListener() を使ってそのオブジェクトを Invites ライブラリに指定します。

招待を受信するには、リスナークラスで OnInviteReceived 仮想関数を実装する必要があります。メソッドをオーバーライドすることで、ディープリンクを受信することができます(受信された場合)。

void OnInviteReceived(const char* invitation_id, const char* deep_link,
                      bool is_strong_match) override {
  if (deep_link != nullptr) {
    // The app received a Dynamic Link. This may have come from an invitation
    // (if invite.invitation_id is set), or it might have been sent using
    // Firebase Dynamic Links.
    // In any event, the app can now act on this link as you see fit.
  }
  if (invitation_id != nullptr) {
    // We received an invitation ID. See the Firebase Invites documentation
    // for more information.
  }
}

ダイナミック リンクを作成する

Firebase console を使用すると、ダイナミック リンクを簡単に作成できます。ダイナミック リンクのパラメータを含む URL を構築して、プログラムによってダイナミック リンクを作成することもできます。

Firebase console でダイナミック リンクを作成する

  1. Firebase console を開きます。
  2. サイドバー メニューの [Dynamic Links] をクリックし、[Dynamic Links] ページを開きます。このページには、作成済みダイナミック リンクの一覧とそれぞれのクリック率が表示されます。
  3. [新しいダイナミック リンク] をクリックし、[ダイナミック リンクを生成] が選択されていることを確認します。
  4. 作成するダイナミック リンクの基本情報を入力します。
    ダイナミック リンクの基本パラメータ
    リンク名 ダイナミック リンクの名前。
    リンク先 URL

    アプリで開くリンク。アプリ内のコンテンツへのリンクや、ユーザーへのクーポン付与や特定の開始画面の表示といったアプリ固有のロジックを開始する URL など、アプリで処理できるあらゆる URL を指定できます。このリンクは適切な形式の URL で、正しく URL エンコードされ、HTTP または HTTPS のスキームを使用している必要があります。

    Android アプリ リンクを開くために使う Android アプリのパッケージ名。Firebase console の [Overview] ページで、アプリとプロジェクトが接続されている必要があります。Android アプリを開くダイナミック リンクでは必須のパラメータです。
    iOS アプリ リンクを開くために使う iOS アプリのバンドル ID。Firebase console の [Overview] ページで、アプリとプロジェクトが接続されている必要があります。iOS アプリを開くダイナミック リンクでは必須のパラメータです。
    上記のパラメータを指定すると、基本的な機能を備えたダイナミック リンクを作成できます。ダイナミック リンクをクリックすると指定したアプリでリンクが開かれ、アプリがインストールされていない場合は、まずインストールが促されます。
  5. 省略可: 詳細オプションを指定して、ダイナミック リンクの動作をきめ細かく調整することもできます。
    Android 向け詳細パラメータ
    フォールバック リンク アプリがインストールされていない場合に開くリンク。モバイルウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに Play ストアからアプリをインストールする以外の動作をさせる場合に指定します。
    最小バージョン コード リンクを開くことができるアプリの最小バージョンの versionCode。インストールされているアプリのバージョンがそれよりも古い場合、ユーザーは Play ストアにリダイレクトされ、アプリのアップグレードを促されます。
    iOS 向け詳細パラメータ
    フォールバック リンク アプリがインストールされていない場合に開くリンク。モバイルウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作をさせる場合に指定します。
    iOS カスタム スキーム アプリのカスタム URL スキーム(アプリのバンドル ID とは異なるものを定義している場合)。
    iPad アプリ iPad でリンクを開くために使う iOS アプリのバンドル ID。Firebase console の [Overview] ページで、アプリとプロジェクトが接続されている必要があります。
    iPad のフォールバック リンク アプリがインストールされていない場合に iPad で開くリンク。ウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作をさせる場合に指定します。

プログラムによってダイナミック リンクを作成する

次のフォームを使用して URL を構築することで、プログラムによってダイナミック リンクを作成することもできます。

https://app_code.app.goo.gl/?link=your_deep_link&apn=package_name[&amv=minimum_version][&al=android_link][&afl=fallback_link]
Android 向けパラメータ
link

アプリで開くリンク。アプリ内のコンテンツへのリンクや、ユーザーへのクーポン付与や特定の開始画面の表示といったアプリ固有のロジックを開始する URL など、アプリで処理できるあらゆる URL を指定できます。このリンクは適切な形式の URL で、正しく URL エンコードされ、HTTP または HTTPS のスキームを使用している必要があります。

apn リンクを開くために使う Android アプリのパッケージ名。Firebase console の [Overview] ページで、アプリとプロジェクトが接続されている必要があります。Android アプリを開くダイナミック リンクでは必須のパラメータです。
afl 省略可: アプリがインストールされていない場合に開くリンク。モバイルウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに Play ストアからアプリをインストールする以外の動作をさせる場合に指定します。
amv 省略可: リンクを開くことができるアプリの最小バージョンの versionCode。インストールされているアプリのバージョンがそれよりも古い場合、ユーザーは Play ストアにリダイレクトされ、アプリのアップグレードを促されます。
  • utm_source
  • utm_medium
  • utm_campaign
  • utm_term
  • utm_content
  • gclid
省略可: カスタム キャンペーンのパラメータ。これらのパラメータはディープリンクを通して Play ストアへのリンクの referrer パラメータに渡されます。
iOS 向けパラメータ
link

アプリで開くリンク。アプリ内のコンテンツへのリンクや、ユーザーへのクーポン付与や特定の開始画面の表示といったアプリ固有のロジックを開始する URL など、アプリで処理できるあらゆる URL を指定できます。このリンクは適切な形式の URL で、正しく URL エンコードされ、HTTP または HTTPS のスキームを使用している必要があります。

ibi リンクを開くために使う iOS アプリのバンドル ID。Firebase console の [Overview] ページで、アプリとプロジェクトが接続されている必要があります。iOS アプリを開くダイナミック リンクでは必須のパラメータです。
ius 省略可: アプリのカスタム URL スキーム(アプリのバンドル ID とは異なるものを定義している場合)。
ifl 省略可: アプリがインストールされていない場合に開くリンク。モバイルウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作をさせる場合に指定します。
ipbi 省略可: iPad でリンクを開くために使う iOS アプリのバンドル ID。Firebase console の [Overview] ページで、アプリとプロジェクトが接続されている必要があります。
ipfl 省略可: アプリがインストールされていない場合に iPad で開くリンク。ウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作をさせる場合に指定します。
  • utm_source
  • utm_medium
  • utm_campaign
  • utm_term
  • utm_content
  • gclid
省略可: カスタム キャンペーンのパラメータ。これらのパラメータは App Store に渡されます。
  • at
  • ct
  • mt
  • pt
省略可: App Store のアフィリエイト リンクのパラメータ。これらのパラメータは App Store に渡されます。
d 省略可: ダイナミック リンクを読み込む代わりにフローチャートを作成し、別のプラットフォームおよび設定でのダイナミック リンクの動作をプレビューするために使用できます。

次に例を示します。

https://example.app.goo.gl/?link=https://www.example.com/someresource&apn=com.example.android&amv=3

ダイナミック リンクのデバッグ

ダイナミック リンクをデバッグするために、自動生成されたフローチャートを使用して、別のプラットフォームおよび設定でのダイナミック リンクの動作をプレビューすることができます。d=1 パラメータを長いダイナミック リンクに追加することで、フローチャートを生成します。

アナリティクス データを表示

プロモーションやキャンペーンの有効性を評価するために、アプリでショート ダイナミック リンクを開くと、次のアナリティクス イベントが自動的にログ記録されます。ショート ダイナミック リンクは Firebase console で作成できます。

アナリティクス イベント
dynamic_link_first_open ダイナミック リンクを使用して初めてアプリを開くと、ログに記録されます。
dynamic_link_app_open ダイナミック リンクを使用してアプリを開くと、ログに記録されます。
dynamic_link_app_update ダイナミック リンクを使用してアプリが新規バージョンに更新されると、ログに記録されます。Android のみ。

Firebase console の [Analytics] セクションで、ログに記録したデータを確認できます。

Firebase Analytics でのダイナミック リンク イベント ダイナミック リンク イベントをコンバージョンとしてマークすると、[アトリビューション] ページでダイナミック リンクのパフォーマンスを確認できます。

フィードバックを送信...