Android 向けプッシュ通知

前提条件

Android の通知チャンネルを構成する

Firebase のセットアップ

使用して同期する必要がある Google Web サイトが 3 つあります。 Google/Firebaseには、プロジェクトとアプリの両方があります。

PlayFab には、サーバー秘密キー ファイルが必要です

  • この秘密キー ファイルはFirebase コンソールから取得できます。
  • Firebase コンソール:
    • プロジェクトまたはアプリを選択し、設定オプションを見つけます (実行する方法はたくさんありますが、すべて同じ場所に移動することができます)。
    • [サービス アカウント] タブで、[新しい秘密キーの生成] ボタンを選択して JSON ファイルをダウンロードします。

秘密キー ファイルの使用

  • 次の 2 つの方法のいずれかで秘密キー ファイルを入力します

    1. ゲーム マネージャー UI: [設定] (タイトル用) >[プッシュ通知]>[Android] に秘密キー ファイルをアップロードします。
    2. または、サーバー API メソッドが有効になっている、Postman または Unity のプロジェクトを使用して SetupPushNotification を呼び出します。
    • 名前: your_game_name

    • プラットフォーム: GCM

    • 資格情報: (秘密キー ファイルの内容を文字列として): { ... }

    • OldARN の上書き:true

    • 次のようなデータを含むHTTP 200 OK を受け取るはずです。

      // Postman JSON result output
      {
          "code": 200,
          "status": "OK",
          "data": { "ARN" : "arn:*******/GCM/your_game_name" }
      }
      
  • (いずれかの方法を使用して) 適切に設定すると、[ゲーム マネージャー UI][設定 (タイトル用)] > [プッシュ通知] > [Android] に表示されます。

    PlayFab の設定 - プッシュ通知 - Android

概要: Android + Unityのプッシュ通知

Unity プロジェクトの設定:

  • 新しい Unity プロジェクトを作成します。

  • [オプション] PlayFab Unity エディターの拡張機能パッケージをインポートします。

  • Unity PlayFab SDK パッケージをインポートします。

  • Fcm Unity ガイドに従って、FCM メッセージングをインストールし、プッシュ通知用にプロジェクトを設定します。

    • 終了したら、このガイドを続行し、PlayFab からメッセージを受信できます。
    • 次の例では、FCM と PlayFab を組み合わせた完全な FCM 対応の monoBehaviour スクリプトを紹介します。
  • FCM ガイドでは、Firebase プラグインを設定する monobehavior スクリプトを作成しました。

    • monobehavior スクリプトを使い続けることも、次の例のスクリプトと置き換えることもできます。

最初にプッシュ通知を設定する

Unity で、FCM チュートリアルで作成したスクリプトを開き、内容を置き換えます。

using PlayFab;
using PlayFab.ClientModels;
using PlayFab.Json;
using UnityEngine;

public class MsgCatcher : MonoBehaviour
{
    public string pushToken;
    public string playFabId;
    public string lastMsg;

    // OnGUI should be deleted/replaced with your own gui - This is only provided for debugging
    public void OnGUI()
    {
        GUI.Label(new Rect(0, 0, Screen.width, 200), pushToken);
        GUI.Label(new Rect(0, 200, Screen.width, Screen.height - 200), lastMsg);
    }

    private void OnPfFail(PlayFabError error)
    {
        Debug.Log("PlayFab: api error: " + error.GenerateErrorReport());
    }

    public void Start()
    {
        // PlayFabSettings.TitleId = "TITLE_ID";
        Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
        Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
        LoginToPlayFab();
    }

    private void LoginToPlayFab()
    {
#if UNITY_ANDROID
        var request = new LoginWithAndroidDeviceIDRequest { AndroidDeviceId = SystemInfo.deviceUniqueIdentifier, CreateAccount = true, };
        PlayFabClientAPI.LoginWithAndroidDeviceID(request, OnPfLogin, OnPfFail);
#endif
    }

    private void OnPfLogin(LoginResult result)
    {
        Debug.Log("PlayFab: login successful");
        playFabId = result.PlayFabId;
        RegisterForPush();
    }

    private void RegisterForPush()
    {
        if (string.IsNullOrEmpty(pushToken) || string.IsNullOrEmpty(playFabId))
            return;

#if UNITY_ANDROID
        var request = new AndroidDevicePushNotificationRegistrationRequest {
            DeviceToken = pushToken,
            SendPushNotificationConfirmation = true,
            ConfirmationMessage = "Push notifications registered successfully"
        };
        PlayFabClientAPI.AndroidDevicePushNotificationRegistration(request, OnPfAndroidReg, OnPfFail);
#endif
    }

    private void OnPfAndroidReg(AndroidDevicePushNotificationRegistrationResult result)
    {
        Debug.Log("PlayFab: Push Registration Successful");
    }

    private void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token)
    {
        Debug.Log("PlayFab: Received Registration Token: " + token.Token);
        pushToken = token.Token;
        RegisterForPush();
    }

    private void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
    {
        Debug.Log("PlayFab: Received a new message from: " + e.Message.From);
        lastMsg = "";
        if (e.Message.Data != null)
        {
            lastMsg += "DATA: " + JsonWrapper.SerializeObject(e.Message.Data) + "\n";
            Debug.Log("PlayFab: Received a message with data:");
            foreach (var pair in e.Message.Data)
                Debug.Log("PlayFab data element: " + pair.Key + "," + pair.Value);
        }
        if (e.Message.Notification != null)
        {
            Debug.Log("PlayFab: Received a notification:");
            lastMsg += "TITLE: " + e.Message.Notification.Title + "\n";
            lastMsg += "BODY: " + e.Message.Notification.Body + "\n";
        }
    }
}

Unity プロジェクトをデバイス上でビルドして実行します。 「プッシュ通知は正常に登録されました」というテキストを含むプッシュ通知を受け取った場合は、すべて正常に機能しています。

注意

PlayFabSettings.TitleId = TITLE_ID. 自身のTitleIdを設定する必要があります。 TitleIdを更新しないと、この例は機能しません。タイトルは、ユーザーのものではなく当社の Firebase キーと設定に登録されているためです。 この行のコメントを外してTITLE_IDtitleIdに置き換えるか、前のセクションで述べたオプションの Editor Extensions プラグインからタイトルを選ぶことができます。

Android のトラブルシューティング

  • Firebase Console からテスト プッシュ通知を送信できることを確認します。

    • それができない場合は、Firebase プラグインが正しくセットアップされていないため、Firebase のドキュメントを調べて理由を確認するか、Firebase サポートに連絡してください。
  • FCM クライアントの pushToken が正しく設定されていることを確認してください。

    • この例の OnTokenReceived 関数を呼び出す必要があり、有効なトークンが必要です。
    • 関数が呼び出されていない場合、Firebase プラグインは正常に設定されていません。Firebase のドキュメントを調べて理由を確認するか、Firebase サポートに連絡してください。
  • 所有するタイトルに titleId が設定されていることと、Firebase プロジェクトからのサーバー API キーで登録されていることを確認してください。

高度な機能

server.SendPushNotification では、request.Package.CustomData を使用してデバイスに任意のデータを配信できます。 前述の例では、以下のコメントを付けてセクションに配信されます。

 Debug.Log("PlayFab: Received a message with data:");

任意の形でデータを利用するように、クライアント レシーバーをカスタマイズすることができます。 CustomData はプレイヤーには表示されないため、カスタム ゲーム情報をクライアントに配信したり、FCM プラグインを使用して将来の別の通知をローカルでスケジュールするために使用できます。

request.Package.CustomData を使用するか、AdvancedPlatformDelivery を要求して、多数のサードパーティー製プラグインに配信することもできます。

注意

サードパーティーのプラグイン配信はサポートも保証もされていませんが、上級ユーザー向けです。

その他のサポート

ヘルプ、バグの例、関連する質問については、フォーラムにご連絡ください。

現時点では、このドキュメントで説明されている標準的なフローのみが当社のサービスに対応しています。 チームが他の一般的なプッシュ サービスやプラグインで追加機能を探している場合、当社にご連絡ください。 当社は、デベロッパー コミュニティーからのフィードバックをお待ちしています。

Amazon SNS 経由のプッシュ ペイロードに関するドキュメントは、以下のとおりです。