> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Android 用プッシュ通知

> Firebase プロジェクトをセットアップし、サーバー秘密キーをアップロードし、Unity3D クライアントでテストすることで、Android 向けの PlayFab プッシュ通知を構成します。

# Android 用プッシュ通知

## 前提条件

* [プッシュ通知クイックスタート](/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/quickstart)
* [Unity3D クイックスタート](/services/playfab/sdks/unity3d/quickstart)
* **任意** [Unity Editor Extensions](https://blog.playfab.com/blog/new-unity-editor-extensions-beta)
* **任意** [Postman クイックスタート](/services/playfab/sdks/postman/postman-quickstart)

## Android 通知チャネルの構成

### Firebase セットアップ

使用および同期する必要がある Google ウェブサイトが 3 つあります。Google/Firebase には Projects と Apps の両方があります:

* **Project**:
  * まだ存在しない場合、プロジェクトを [Firebase Console](https://console.firebase.google.com/) にインポートします。

* **App**:
  * [Firebase](https://console.firebase.google.com/) プロジェクトにはアプリが含まれています。
  * アプリが両方の場所に、同じ名前と識別子で存在することを確認してください (例: [Unicorn Battle と com.playfab.unicornbattle2](https://play.google.com/store/apps/details?id=com.playfab.unicornbattle2))。

### PlayFab はサーバー秘密キー ファイルを必要とします

* この秘密キー ファイルは [Firebase Console](https://console.firebase.google.com/) から入手できます
* **Firebase Console**:
  * **Project** または **App** を選択し、**Settings** オプションを見つけます (これを行う方法は多数あり、すべて同じ場所に移動します)。
  * **Service accounts** タブで、**Generate new private key** ボタンを選択して JSON ファイルをダウンロードします。

## 秘密キー ファイルの使用

* 次の 2 つの方法のいずれかで秘密キー ファイルを提供します:

  1. 秘密キー ファイルを **Game Manager UI** に直接アップロード: **Settings** (**Title** の) > **Push Notifications** > **Android**。

  2. または、Server API メソッドを有効にした Postman または Unity プロジェクトを使用して、[SetupPushNotification](xref:titleid.playfabapi.com.admin.title-widedatamanagement.setuppushnotification) を呼び出します。

  * Name: **your\_game\_name**
  * Platform: **GCM**
  * Credential: (**秘密キー ファイルの内容を文字列として**): `{ ... }`
  * Overwrite OldARN: `true`
  * 次のようなデータを含む **HTTP 200 OK** 応答を受信するはずです。

    ```json theme={null}
    // Postman JSON result output
    {
        "code": 200,
        "status": "OK",
        "data": { "ARN" : "arn:*******/GCM/your_game_name" }
    }
    ```

* 適切にセットアップされたら (どちらの方法でも)、**Game Manager UI** の **Settings (タイトルの) > Push Notifications > Android** でこれが表示されるはずです。

  <img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-settings-push-notification-android.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=82a441669374a02ba190157403cbb222" alt="PlayFab 設定 - プッシュ通知 - Android" width="617" height="404" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-settings-push-notification-android.png" />

## 使い始め: Android + Unity 用プッシュ通知

Unity プロジェクトをセットアップするには:

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

* **任意** [PlayFab Unity Editor Extensions](https://aka.ms/playfabunityextension) パッケージをインポートします。

* [Unity PlayFab SDK](https://aka.ms/playfabunitysdkdownload) パッケージをインポートします。

* [FCM Unity](https://firebase.google.com/docs/cloud-messaging/unity/client) ガイドに従って FCM メッセージングをインストールし、プッシュ通知用にプロジェクトをセットアップします。
  * 完了したら、このガイドを続けて PlayFab からメッセージを受信できます。
  * 次の例では、FCM と PlayFab を組み合わせた完全な FCM 対応 monoBehaviour スクリプトを提供します。

* FCM ガイドで、Firebase プラグインをセットアップする monobehavior スクリプトを作成しました。
  * その monobehavior スクリプトを使用し続けるか、次の例のものに置き換えることができます。

### 最初のプッシュ通知のセットアップ

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

```csharp theme={null}
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 プロジェクトをビルドしてデバイスで実行します。**Push notifications registered successfully** というテキストのプッシュ通知を受信できれば、すべてが期待どおりに動作しています。

<Note>
  `PlayFabSettings.TitleId = TITLE_ID`。ご自分の `TitleId` を設定する必要があります。この例は、この `TitleId` を更新しない場合は動作しません。当社のタイトルは当社の Firebase キーと設定で登録されているためであり、*お客様の* ものではありません。この行のコメントを外して `TITLE_ID` をご自分の `titleId` に置き換えるか、前のセクションで言及した任意の Editor Extensions プラグインからタイトルを選択できます。
</Note>

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

* Firebase Console からテスト プッシュ通知を送信できることを確認します。
  * できない場合、Firebase プラグインが正しくセットアップされていないため、Firebase ドキュメントを確認して理由を調べるか、Firebase サポートに問い合わせる必要があります。

* FCM クライアントの pushToken が適切に設定されていることを確認します。
  * 例の `OnTokenReceived` 関数が呼び出され、有効なトークンを持っているはずです。
  * 呼び出され *ない* 場合、Firebase プラグインが *正しく* セットアップされていないため、Firebase ドキュメントを確認して理由を調べるか、Firebase サポートに問い合わせる必要があります。

* `titleId` が所有するタイトルに設定され、Firebase プロジェクトのサーバー API キーで登録されていることを確認します。

### 高度な機能

**server.[SendPushNotification](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification)** では、**[request.Package](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification#pushnotificationpackage).CustomData** を使用して任意のデータをデバイスに配信できます。前の例では、これは次のコメントを持つセクションに配信されます。

```csharp theme={null}
 Debug.Log("PlayFab: Received a message with data:");
```

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

**[request.Package](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification#pushnotificationpackage).CustomData** または **[AdvancedPlatformDelivery](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification#advancedpushplatformmsg)** を使用して、多くのサードパーティ プラグインに配信することもできます。

<Note>
  サードパーティ プラグインの配信はサポートされておらず保証されませんが、上級ユーザー向けに利用可能です。
</Note>

## 追加のサポート

ヘルプ、バグの例、および関連する質問については、[フォーラム](https://community.playfab.com/index.html) までご連絡ください。

現在、当社はこのドキュメントで説明されている標準フローに対してのみサポートしています。他の一般的なプッシュ サービスやプラグインでさらなる機能が必要な場合はお知らせください! 開発者コミュニティからのフィードバックをいただくのが大好きです。

Amazon SNS 経由のプッシュ ペイロードに関するドキュメント:

* [Amazon SNS メッセージと JSON 形式](https://docs.aws.amazon.com/sns/latest/dg/json-formats.html)


## Related topics

- [プッシュ通知クイックスタート](/ja-jp/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/quickstart.md)
- [iOS 用プッシュ通知](/ja-jp/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-ios.md)
- [プッシュ通知](/ja-jp/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/index.md)
- [Android Studio とプッシュ通知の使い始め](/ja-jp/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/getting-started-android-studio-push-notifications.md)
- [プッシュ通知テンプレート](/ja-jp/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notification-templates.md)
