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

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

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

注意

これらのシステムのいずれかにリンクされていない場合、クライアントは通知の取得を停止します。 3つのシステムのいずれかを誤って変更し、リンクを解除するのは非常に簡単です。 さらに、すべてのシステムが適切に構成されている場合は、フロー内の個々の点について知ることが困難です。

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

すべての PlayFab タイトルは、1つの Google (GCM) と1つの Apple Push (APNS, APNS_SANDBOX) 通知チャネルを一度に有効にすることができます。 これらは、次の2つの方法のいずれかで構成できます。

  1. ゲームマネージャーの [設定-> プッシュ通知] で UI を使用する。
  2. Playfab 管理 API - setuppushnotificationを使います。

設定の詳細については、次のチュートリアルを参照してください。

ゲーム内でメッセージをプッシュする

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

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

ヒント

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

セットアップのテスト

タイトルとクライアントを構成したら、PlayFab サーバー API- Sendpushnotificationを使って構成をテストできます。 この API を使用すると、必要に応じてプッシュ通知をいくつでも追加料金なしで送信できます。

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

このメソッドを使って構成をテストするには、次の例のコードをタイトルの CloudScript にアップロードするか、追加します。

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

  • タイトル内のプレイヤーは、ランク統計に基づいてスコアボードにアクセスできます。

  • 各プレイヤーは、1チャンネルの通貨を支払うことができます。また、現在のプレイヤーから5人の位置にいる別のプレイヤーにも挑戦してください。

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

PlayFab 経済-通貨-新しい通貨

ここでは、各プレイヤーに対して定義された次の統計情報について考えてみてください。テストスコアボードの生成方法については、「アーカイブされたトーナメントの結果にアクセスする」をご覧ください。

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 から1回限りのダイアログプロンプトが表示され、ユーザーはプッシュ通知の状態を確認できます。 ユーザーが最初の選択を行った後、この設定は次の場合まで維持されます。

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

  • ユーザーは、電話の [設定] メニューから設定に変更を加えます。

Android アプリの場合、通知は既定で有効になっていますが、クライアントからでも通知をオンまたはオフにすることができます。

ヒント

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

リソース

このクイックスタートのトピックに関する追加情報については、次のリソースを参照してください。

  • 焼討基地 UNITY SDK: unity 向けのオールインワン fcm ソリューション。 この SDK は、他のすべての機能の中で、FCM 経由で送信されたプッシュ通知を受信して処理することができます。
  • 優れたプッシュ配信:このブログの投稿には、プッシュ通知を使うための追加の戦略と手法が詳しく説明されています。
  • プッシュ通知: このブログ投稿では、プッシュ機能の最新のアップグレードについて説明し、Android 向けのプライマリプラグインとして fcm に切り替えることができます。
  • Postman クイックスタート: このクイックスタートでは、Postman を使って api をテストする方法について説明します。