Android アプリから Firebase Invites を送受信する

準備

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

招待を送信する

AppInviteInvitation.IntentBuilder クラスを使用して Intent の作成を開始します。

 verbatim 3574e14eb53be9cfff6d1c4daf49b9ee private void onInviteClicked() {
    Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
            .setMessage(getString(R.string.invitation_message))
            .setDeepLink(Uri.parse(getString(R.string.invitation_deep_link)))
            .setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
            .setCallToActionText(getString(R.string.invitation_cta))
            .build();
    startActivityForResult(intent, REQUEST_INVITE);
} endverbatim 3574e14eb53be9cfff6d1c4daf49b9ee 

招待をカスタマイズする

招待 Intent を作成するときは、招待ダイアログのタイトルと送信する招待メッセージを指定する必要があります。また、上記の例のように、招待で送信する画像とディープリンク URL をカスタマイズできます。HTML を指定してリッチな招待メールを送信できます(推奨される方法)。詳しくは、Firebase Invites: おすすめの方法をご覧ください。

メソッドチャネル説明
setMessage メールと SMS 招待で送信するデフォルトのメッセージを設定します。送信者は招待ダイアログでこのメッセージを編集できます。100 文字以内で指定してください。
setDeepLink メールと SMS 招待で送信するアプリへのリンクを設定します。特定のコンテンツを受信者と共有する場合、またはユーザーが招待状からアプリを開くときの動作をカスタマイズする場合にリンクを指定します。
setCustomImage メール 招待メールに含めるカスタム画像の URL を設定します。画像は 600×600 ピクセル程度の正方形にする必要があります。画像は 4,000×4,000 ピクセル以内のサイズにしてください。
setCallToActionText メール 招待メールに表示するボタンに表示する、行動を促すフレーズのテキストを設定します。32 文字以内で指定してください。
setEmailHtmlContent メール 推奨: 招待メールのコンテンツを設定します。 リッチ HTML 招待メールを送信するときは、これを設定します。HTML にはプレースホルダ文字列 %%APPINVITE_LINK_PLACEHOLDER%% を含めてください。これは、受信者が招待を承諾するときに開く URL で置き換えられます。カスタムのメール メッセージを指定する場合、setDescriptionsetCustomImagesetCallToActionText メソッドの効果はありません。
setEmailSubject メール setEmailHtmlContent を使用する場合は必須です。招待メールの件名を設定します。

アプリに iOS バージョンがあり、Android だけでなく iOS でも開くことができる招待を送信する場合は、アプリの招待インテントを作成するときに iOS アプリの OAuth 2.0 クライアント ID を setOtherPlatformsTargetApplication に渡します。iOS アプリのクライアント ID は、Firebase console からダウンロードした GoogleService-Info.plist ファイルにあります。次に、例を示します。

Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
    ...
    .setOtherPlatformsTargetApplication(
        AppInviteInvitation.IntentBuilder.PlatformMode.PROJECT_PLATFORM_IOS,
        getString(IOS_APP_CLIENT_ID))
    ...
    .build();

AppInviteInvitation インテントを起動すると、ユーザーが招待する連絡先を選択できる連絡先選択ツールが開きます。ユーザーが連絡先を選択して招待を送信すると、アプリは onActivityResult へのコールバックを受信します。

 verbatim 3dee1cd6e60a875f89652769e3b5a2bc @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d(TAG, "onActivityResult: requestCode=" + requestCode + ", resultCode=" + resultCode);

    if (requestCode == REQUEST_INVITE) {
        if (resultCode == RESULT_OK) {
            // Get the invitation IDs of all sent messages
            String[] ids = AppInviteInvitation.getInvitationIds(resultCode, data);
            for (String id : ids) {
                Log.d(TAG, "onActivityResult: sent invitation " + id);
            }
        } else {
            // Sending failed or it was canceled, show failure message to the user
            // ...
        }
    }
} endverbatim 3dee1cd6e60a875f89652769e3b5a2bc 
    

招待状を受信する

ユーザーが招待状を受信したときにまだアプリをインストールしていない場合、ユーザーは Google Play ストアからアプリをインストールする選択ができます。アプリのインストール完了後、またはアプリを既にインストールしてある場合は、アプリが起動し、アプリのコンテンツの URL が送信されている場合はその URL を受信します。アプリのコンテンツの URL を受信するには、getInvitation メソッドを呼び出します。

 verbatim 543a45afe8f78f6275dc24b66b6d66a4 @Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    // Create an auto-managed GoogleApiClient with access to App Invites.
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(AppInvite.API)
            .enableAutoManage(this, this)
            .build();

    // Check for App Invite invitations and launch deep-link activity if possible.
    // Requires that an Activity is registered in AndroidManifest.xml to handle
    // deep-link URLs.
    boolean autoLaunchDeepLink = true;
    AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
            .setResultCallback(
                    new ResultCallback<AppInviteInvitationResult>() {
                        @Override
                        public void onResult(AppInviteInvitationResult result) {
                            Log.d(TAG, "getInvitation:onResult:" + result.getStatus());
                            if (result.getStatus().isSuccess()) {
                                // Extract information from the intent
                                Intent intent = result.getInvitationIntent();
                                String deepLink = AppInviteReferral.getDeepLink(intent);
                                String invitationId = AppInviteReferral.getInvitationId(intent);

                                // Because autoLaunchDeepLink = true we don't have to do anything
                                // here, but we could set that to false and manually choose
                                // an Activity to launch to handle the deep link here.
                                // ...
                            }
                        }
                    });
} endverbatim 543a45afe8f78f6275dc24b66b6d66a4 
    

launchDeepLink パラメータが true の場合、アプリはアプリのコンテンツの URL を使用して自動的に再起動します。この URL はアプリで通常どおり処理できます。launchDeepLink パラメータが false の場合、getInvitationIntent によって返されたインテントを手動で開始することで、状況に応じて URL を処理できます。

リンクによって起動されるすべてのアクティビティで getInvitation() を呼び出してください。getIntent().getData() を使用してインテントからリンクを取得できる場合でも呼び出す必要があります。getInvitation() を呼び出すと、リンクと招待 ID が取得されてデータがクリアされるため、アプリで処理されるのは 1 回だけとなります。

通常、getInvitation() を呼び出すのはメインのアクティビティと、リンクと一致するインテント フィルタによって起動されたアクティビティです。

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