始める前に
Firebase Invites を使用するには、あらかじめ次の作業が必要です。
C++ プロジェクトを登録して Firebase を使用するように構成する。
C++ プロジェクトですでに Firebase を使用している場合、この登録と構成はすでに行われています。
Firebase C++ SDK を C++ プロジェクトに追加する。
Firebase を C++ プロジェクトに追加するには、Firebase コンソールと開いている C++ プロジェクトの両方でタスクを行う必要があります(コンソールから Firebase 構成ファイルをダウンロードし、それを C++ プロジェクトに移動するなど)。
Firebase Dynamic Links を有効にする
Firebase Invites は Firebase Dynamic Links 上に構築されているため、Firebase Invites を使用するには Firebase Dynamic Links を有効にする必要があります。
Firebase コンソールで [Dynamic Links] セクションを開きます。
利用規約にまだ同意していない場合は、プロンプトに従って同意します。
カスタム URL スキームを追加する(iOS の場合のみ)
Firebase Invites C++ クライアント ライブラリは、iOS で Google ログインを使用します。招待を送信するにはユーザーはログインする必要があり、デベロッパーはサポートするためにカスタム URL スキームをアプリに追加する必要があります。
左側のツリービューでプロジェクト名をダブルクリックしてプロジェクト構成を開きます。
[ターゲット] セクションでアプリを選択し、[情報] タブを選択して [URL タイプ] セクションを展開します。
[+] ボタンをクリックし、反転クライアント ID の URL スキームを追加します。この値を確認する手順は次のとおりです。
GoogleService-Info.plist構成ファイルを開いてREVERSED_CLIENT_IDキーを探します。見つかったキーの値をコピーし、構成ページの [URL スキーム] ボックスに貼り付けます。
その他の入力欄は空白にしておきます。
[+] ボタンをクリックし、2 個目の URL スキームを追加します。これはアプリのバンドル ID と同じです。
たとえば、バンドル ID が
com.example.appであれば、その値を [URL スキーム] ボックスに入力します。アプリのバンドル ID はプロジェクト構成の [全般] タブ([ID] > [バンドル ID])で確認できます。
招待を送信する
アプリを作成して初期化する
招待を送信するには、まず 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.
}
}

