> ## 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.

# プッシュ通知クイックスタート

> Game Manager または SetupPushNotification Admin API を介して、Amazon SNS ルーティングで iOS APNS および Android GCM チャネル向けの PlayFab プッシュ通知をセットアップします。

PlayFab からのプッシュ通知は、3 つの主要なシステムのリンクによって有効になります:

1. プレイヤーのデバイス OS (Android、iOS など)
2. ベンダー固有のチャネル (Google、Apple など)
3. クロスプラットフォーム メッセージ ルーティング (Amazon Simple Notification Service (SNS) を介した PlayFab)。

<Note>
  これらのシステムのいずれかがリンクされていない場合、クライアントは通知を受信しなくなります。3 つのシステムのいずれかを誤って変更してリンクが切れることは非常に簡単に起こります。さらに、フローの個別のポイントで、すべてのシステムが適切に構成されているかどうかを知ることは困難です。
</Note>

## PlayFab プッシュ ルーティング システム

各 PlayFab タイトルは、特定の時点で 1 つの Google (GCM) と 1 つの Apple Push (APNS、APNS\_SANDBOX) 通知チャネルを有効にできます。これらは次の 2 つの方法のいずれかで構成できます:

1. **Game Manager** の **Settings -> Push Notifications** の下の UI を使用。
2. **PlayFab Admin API** - [SetupPushNotification](xref:titleid.playfabapi.com.admin.title-widedatamanagement.setuppushnotification) を使用。

より詳細なセットアップ情報については、次のチュートリアルを参照してください:

* [Android 用プッシュ通知](/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-android)
* [iOS 用プッシュ通知](/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-ios)

## ゲーム内でのプッシュ メッセージ

プッシュ メッセージは開発エンジン/プラットフォームによって異なります。ただし、プッシュ通知を受信する最も簡単な方法は、Android では当社の SDK と Firebase Cloud Messaging (FCM) プラグインを使用した Unity プロジェクトを使用し、iOS では単に Unity を使用することです。

* **Android でプッシュを受信する** - これにはプラグインが必要です。最もよくサポートされているプラグインはネイティブ FCM プラグインです。
* **iOS でプッシュを受信する** - 基本的なプッシュ メッセージにはプラグインは *必要ありません*。

<Tip>
  [FCM Unity プラグイン](https://firebase.google.com/docs/cloud-messaging/unity/client) の設定方法、または [Android Studio](https://firebase.google.com/docs/cloud-messaging/android/client) でのプッシュについては、FCM のドキュメントを参照してください。
</Tip>

## セットアップのテスト

タイトルとクライアントを構成した後、PlayFab サーバー API - [SendPushNotification](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification) を使用して構成をテストできます。この API を使用すると、追加費用なしで必要な数のプッシュ通知を送信できます。

PlayFab CloudScript サービスは、迅速で安全なサーバー API 環境として使用できます。そこから、必要に応じてプッシュ通知を送信できます。

構成をテストするためにこの方法を使用するには、次の例のコードをタイトルの CloudScript にアップロードまたは追加します。

### 例

次のシナリオを考えてみましょう:

* タイトル内のプレイヤーは、ランクの統計に基づくリーダーボードにアクセスできます。

* 各プレイヤーは 1 CH 通貨を支払い、現在のプレイヤーから 5 位以内の別のプレイヤーに挑戦できます。

まず、以下の例のスクリーンショットに示すような仮想通貨を考えます (仮想通貨の定義方法については [通貨](/services/playfab/economy-monetization/economy-v2/tutorials/currencies) チュートリアルを参照してください)。

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-new-currency.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=529f8a8499e64af54013e73f64e933fd" alt="PlayFab Economy - Currencies - 新しい通貨" width="1800" height="969" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-new-currency.png" />

次に、各プレイヤーに対して定義される次の統計を考えます (テスト用リーダーボードの生成方法については [アーカイブされたトーナメント結果へのアクセス](/services/playfab/community/leaderboards/tournaments-leaderboards/accessing-archived-tournament-results) チュートリアルを参照してください)。

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-statistics-player-rank.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=dfd2bdb1c0160f95676fd7fbf69781af" alt="PlayFab プレイヤー統計 - Rank" width="1026" height="456" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-statistics-player-rank.png" />

これらの前提条件をセットアップすると、プッシュ通知の挑戦システムをセットアップできます。

次のクライアント コードは、CloudScript `ChallengePlayer` を呼び出します。

```csharp theme={null}
public void ChallengeRandomClosePlayer(string currentPlayerId) {
    PlayFabClientAPI.GetLeaderboardAroundPlayer(new GetLeaderboardAroundPlayerRequest() {
        MaxResultsCount = 10,
        StatisticName = "Rank",
        PlayFabId = currentPlayerId,
    }, result => OnLeaderboardLoaded(result,currentPlayerId),OnPlayFabError);
}

private void OnLeaderboardLoaded(GetLeaderboardAroundPlayerResult leaderboard, string currentPlayerId) {
    var index = (int)(UnityEngine.Random.value * (leaderboard.Leaderboard.Count-1));
    if (leaderboard.Leaderboard[index].PlayFabId == currentPlayerId)
        index = (index + 1) % leaderboard.Leaderboard.Count;
    var targetId = leaderboard.Leaderboard[index].PlayFabId;

    PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest() {
        FunctionName = "ChallengePlayer",
        FunctionParameter = new Dictionary<string, object>() {
            { "TargetId", targetId }
        }
    }, null, OnPlayFabError);
}

public void OnPlayFabError(PlayFabError obj) {
    Debug.Log(obj.GenerateErrorReport());
}
```

`ChallengePlayer` CloudScript コードは、リクエストを処理し、リーダーボードの状態を検証し、挑戦のプッシュ通知をターゲットに送信します。

```javascript theme={null}
handlers.ChallengePlayer = function (args) {
    var targetId = args.TargetId;
    var leaderboard = server.GetLeaderboardAroundUser({
        MaxResultsCount : 10,
        PlayFabId : currentPlayerId,
        StatisticName : "Rank"
    });

    for(var i = 0; i < leaderboard.Leaderboard.length; i++) {
        var target = leaderboard.Leaderboard[i];
        if(target.PlayFabId !== targetId) continue;

        // subtract virtual currency from current player
        server.SubtractUserVirtualCurrency({
            VirtualCurrency : "CH",
            PlayFabId : currentPlayerId,
            Amount : 1
        });

        // get current player profile
        var profile = server.GetPlayerProfile({
            PlayFabId : currentPlayerId
        }).PlayerProfile;

        // try to send push notification
        try {
            server.SendPushNotification({
                Recipient : targetId,
                Package : {
                    Message : `${profile.DisplayName} challenges you for a battle!`,
                    Title: "You have been challenged",
                }
            });
        } catch (ex) {
            // Target player has not registered for Push Notifications
        }
        return;
    }
}
```

## プッシュ通知の使用

プッシュ通知を使用できる能力は素晴らしい力です。しかし、*乱用* されると、ユーザーが将来の通知をオプトアウトしたり、*ゲームを完全に離れたり* する原因になる可能性があります。

賢明に使用すれば、プッシュ通知はゲーム コミュニティを構築・維持するための最高のツールの 1 つとなります。

プッシュ通知は、配信を保証しない *fire and forget* のメッセージ プロトコルです。

<Note>
  プレイヤーがメッセージを受信、開封、またはエンゲージすることについて *保証はありません*。この注意点を考慮すると、メッセージをゲームプレイ ループの重要な部分ではなく、*ボーナス* 機能として使用することが良い実践です。
</Note>

iOS プラットフォームでは、アプリは OS から 1 回限りのダイアログ プロンプトが与えられ、ユーザーはプッシュ通知の状態を決定できます。ユーザーが最初の選択を行った後、次のいずれかまでこの設定は維持されます:

* アプリが更新または再インストールされる。

* ユーザーが自身の携帯電話の設定メニューから設定を変更する。

Android アプリでは、通知は既定で有効になっており、クライアントからいつでもオンまたはオフにできます。

<Tip>
  セッションごとに通知リスナーを再初期化することは良い実践です。
</Tip>

## リソース

以下のリソースは、このクイックスタートのトピックに関する追加情報を提供します:

* [Firebase Unity SDK](https://firebase.google.com/docs/unity/setup): Unity 用のオールインワン FCM ソリューション。この SDK は、他のすべての機能と共に、FCM 経由で送信されたプッシュ通知の受信と処理を可能にします。
* [Push It Real Good: How to Get Players to Say Yes to Push Notifications](https://blog.playfab.com/blog/push-it-real-good-how-get-players-say-yes-push-notifications/): このブログ投稿では、プッシュ通知の使用のための追加の戦略とテクニックについて詳しく説明します。
* [プッシュ通知](https://blog.playfab.com/blog/push-sep-17): このブログ投稿では、プッシュ機能の最新のアップグレードと、Android の主要プラグインとしての FCM への切り替えについて説明しています。
* [Postman クイックスタート](/services/playfab/sdks/postman/postman-quickstart): このクイックスタートは、Postman を使用して API をテストする方法を示します。
