Firebase Invites for C++ を使ってみる

クロスプラットフォームの Firebase Invites クライアント アプリを C++ で記述するには、Firebase Invites API を使用します。Android と iOS それぞれに必要な設定を追加すれば、両方のプラットフォームで C++ SDK を機能させることができます。

準備

Android

  1. アプリを Firebase プロジェクトに接続していない場合は、Firebase コンソールで接続します。
  2. Firebase Dynamic Links を有効にしていない場合は、Firebase コンソールから [Dynamic Links] セクションを開き、表示される利用規約に同意して、有効にします。Firebase Invites は Firebase Dynamic Links 上に構築されているため、Firebase Invites を使用するには Firebase Dynamic Links を有効にする必要があります。
  3. Firebase を Android プロジェクトに追加します
  4. Firebase Invites の依存関係をアプリレベルの build.gradle ファイルに追加します。
    dependencies {
         compile 'com.google.firebase:firebase-invites:11.4.0'
    }
  5. C++ SDK の静的ライブラリ libapp.alibinvites.a をリンクします。

iOS

  1. アプリを Firebase プロジェクトに接続していない場合は、Firebase コンソールで接続します。
  2. Firebase Dynamic Links を有効にしていない場合は、Firebase コンソールから [Dynamic Links] セクションを開き、表示される利用規約に同意して、有効にします。Firebase Invites は Firebase Dynamic Links 上に構築されているため、Firebase Invites を使用するには Firebase Dynamic Links を有効にする必要があります。
  3. Firebase を iOS プロジェクトに追加します
  4. Firebase Invites C++ クライアント ライブラリは、iOS で Google ログインを使用します。招待を送信するにはユーザーはログインする必要があり、デベロッパーはサポートするためにカスタム 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])で確認できます。
  5. Podfile で次のポッドをインクルードします。
    pod 'Firebase/Invites'
  6. pod install を実行します。
  7. 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"));

招待を作成して設定する

招待を送信するためのヘッダー ファイルを追加します。

#include "firebase/invites.h"

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

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

firebase::invites::Invite の新しいインスタンスを作成して、招待の設定でそのインスタンスを設定します。

firebase::invites::Invite invite;
invite.title_text = "Invite Friends";
invite.message_text = "Try my app today, and get 200 free coins!";
invite.call_to_action_text = "Download now!";

招待の設定の全一覧と各プラットフォームでサポートされる設定については、こちらをご覧ください。

招待のカスタマイズについて詳しくは、Firebase Invites: おすすめの方法をご覧ください。

招待を送信する

招待を表示する準備ができたら、SendInvite() を呼び出します。

firebase::invites::SendInvite(invite);

Invites クライアント UI が表示され、ユーザーが受信者を選択したり必要に応じてメッセージを変更したりできるようになります。この UI は、ユーザーが招待を送信するかキャンセルするまでは、画面に表示されたままになります。

SendInvite() の結果がすぐに返され、UI が非同期的に表示されます。結果は firebase::Future を通して返されます。これにより、招待が送られたかどうか確認し、UI を画面から消すタイミングを決定できます。

SendInviteLastResult() を呼び出して、最新の firebase::Future を取得することもできます。この呼び出しでは、SendInvite() の直近の呼び出しと同じ結果が返されます。

auto future_result = firebase::invites::SendInviteLastResult();
if (future_result.status() == future::kFutureStatusComplete) {
    if (future_result.error() == 0) {
        auto result = *future.result();
        if (result.invitation_ids.size() > 0) {
            // One or more invitations were sent. You can log the invitation IDs here for
            // analytics purposes, as they will be the same on the receiving side.
        }
        else {
            // Zero invitations were sent. This tells us that the user canceled sending
            // invitations.
        }
    } else {
        // error() is nonzero, which means an error occurred. You can check
        // future_result.error_message() for more information.
    }
} else {
    // The SendInvite() operation has not completed yet, which means the Invites
    // client UI is still on screen. Check the status() again soon.
}

status() をポーリングするのではなく、OnCompletion() を使用してコールバックを設定し、SendInvite() が完了したら通知を受けて Invites UI の終了を判断することができます。詳しくは、firebase::Future のドキュメントをご覧ください。

クロスプラットフォームの招待

Firebase コンソールのプロジェクトに含まれているアプリケーションがプラットフォームごとに 1 つだけの場合、Firebase Invites は自動的にそれらのアプリケーションを相互に関連付けます。たとえば iOS ユーザーが Android ユーザーから送信された招待状でクリックすると、各自のプラットフォームにアプリをインストールできる適切な場所に誘導されます。

プラットフォームごとにアプリケーションが複数ある場合は、ios_platform_client_id または android_platform_client_id を設定し、代替プラットフォームの Firebase クライアント ID を渡すことができます。

招待を受信する

ユーザーが招待を受信したときにまだアプリをインストールしていない場合、ユーザーは自分のプラットフォームのアプリストアからアプリをインストールすることを選択できます。

その後、アプリをインストールすると、またはアプリをすでにインストールしてある場合、アプリが起動し、アプリのコンテンツの URL が送信されている場合はその URL を受信します。アプリは、招待 ID も受信します。この招待 ID は、送信側の招待 ID と一致します。

通常、アプリでは新着の招待を起動時に 1 回確認する必要があります。

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

受信した招待を確認するには、まず 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"));

リスナーを実装して新着の招待を確認する

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

#include "firebase/invites.h"

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

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

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

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

void OnInviteReceived(const char* invitation_id, const char* deep_link,
                      bool is_strong_match) override {
  // Fetch succeeded, let's find out what we received.
  if (invitation_id != nullptr) {
    // The app received an invitation ID. This will match the invitation ID
    // that the sender got when they sent the invitation, so you can use this
    // to track when invitations are completed.
  }
  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.
  }
}

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

ご不明な点がありましたら、Google のサポートページをご覧ください。