Android 向けプッシュ通知
前提条件
- プッシュ通知のクイックスタート
- Unity3D クイックスタート
- [オプション]Unity エディターの拡張機能
- [オプション] Postman クイックスタート
Android の通知チャンネルを構成する
Firebase のセットアップ
使用して同期する必要がある Google Web サイトが 3 つあります。 Google/Firebaseには、プロジェクトとアプリの両方があります。
プロジェクト:
- プロジェクトがまだ存在しない場合は、Firebase コンソールにインポートします。
アプリ:
- Firebaseプロジェクトには、アプリが含まれます。
- アプリケーションが同じ名前と識別子で両方の場所に存在することを確認します (Unicorn Battle と com.playfab.unicornbattle2 などです)。
PlayFab には、サーバー秘密キー ファイルが必要です
- この秘密キー ファイルはFirebase コンソールから取得できます。
-
Firebase コンソール:
- プロジェクトまたはアプリを選択し、設定オプションを見つけます (実行する方法はたくさんありますが、すべて同じ場所に移動することができます)。
- [サービス アカウント] タブで、[新しい秘密キーの生成] ボタンを選択して JSON ファイルをダウンロードします。
秘密キー ファイルの使用
次の 2 つの方法のいずれかで秘密キー ファイルを入力します
- ゲーム マネージャー UI: [設定] (タイトル用) >[プッシュ通知]>[Android] に秘密キー ファイルをアップロードします。
- または、サーバー 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] に表示されます。
概要: 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_ID
をtitleId
に置き換えるか、前のセクションで述べたオプションの 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 経由のプッシュ ペイロードに関するドキュメントは、以下のとおりです。