次の方法で共有


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

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

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

注意

これらのシステムのいずれかのリンクが解除されていると、クライアントは通知を受け取ることができません。 3 つのシステムのうちの 1 つを誤って変更し、リンクを解除してしまうことはよくあります。 さらに、すべてのシステムが適切に構成されているかどうかをフローのあらゆる時点で把握することは困難です。

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

すべての PlayFab タイトルで、一度に 1 つの Google (GCM) プッシュ通知と 1 つの Apple プッシュ通知 (APNS、APNS_SANDBOX) チャンネルを有効にできます。 2 つの方法のうち、 1 つの方法で設定することができます。

  1. [設定] - >[プッシュ通知] にある [ゲーム マネージャー] の UI を使用する。
  2. PlayFab 管理 API - SetupPushNotificationを使用します。

より詳細な設定情報については、以下のチュートリアルを読んでください。

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

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

  • Android でプッシュを受信する- プラグインが必要です。 最もサポートされているプラグインはネイティブの FCM プラグインです。
  • iOS でプッシュを受信する- 基本的なプッシュ メッセージ用のプラグインを必要としません

ヒント

FCM Unity プラグインを設定する方法、またはAndroid Studio でプッシュ通知を設定する方法については、FCM に関するドキュメントを参照してください。

設定のテスト

タイトルとクライアントを設定した場合、PlayFabサーバー API - SendPushNotification を使用して構成をテストできます。 この API を使用すると、追加料金なしで必要なだけプッシュ通知を送信できます。

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

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

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

  • タイトルのプレイヤーは、ランク統計に基づいて、ランキングにアクセスすることができます。

  • 各プレイヤーは 1 CH 通貨を支払い、現在のプレイヤーから最大 5 ポジション離れた別のプレイヤーに挑戦することができます。

まず、下のスクリーンショットの例のような仮想通貨を考えます (仮想通貨の定義方法については通貨チュートリアルを参照してください)。

PlayFab Economy - 通貨 - 新しい通貨

それでは、各プレイヤーに定義されている次の統計を考えてみましょう (テスト ランキングの生成方法については、「アーカイブ トーナメントの結果にアクセスする」チュートリアルを参照してください)。

PlayFab プレイヤー統計 - ランク

これらの前提条件を設定したら、プッシュ通知チャレンジ システムを設定できます。

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

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 コードはリクエストを処理し、ランキングの状態を検証し、チャレンジ プッシュ通知をターゲットに送信します。

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 つになります。

プッシュ通知は配信を保証するものではないファイア アンド フォーゲットのメッセージ プロトコルです。

注意

プレイヤーがメッセージを受け取ったり、開いたり、関与したりするという保証はありません。 このため、メッセージは、ゲームプレイのループの重要な部分としてではなく、ボーナス機能として使用することをお勧めします。

iOS プラットフォームの場合、アプリには OS からワンタイム ダイアログ プロンプトが表示され、ユーザーはプッシュ通知のステータスを判断できます。 ユーザーが最初の選択をした後も、この設定は次のようになるまで持続します。

  • アプリは更新または再インストールされます。

  • ユーザーは携帯電話の設定メニューから設定を変更します。

Android アプリの場合、通知は既定で有効になっており、クライアントから任意にオン/オフを切り替えることができます。

ヒント

セッションごとに通知リスナーを再初期化することをお勧めします。

リソース

以下のリソースは、このクイックスタートのトピックに関する追加情報です。