This document is about: FUSION 1
SWITCH TO

PlayFabとのインテグレーション

イントロダクション

このドキュメントでは、PlayFabとPhotonのインテグレーションをサポートします。
このアプローチを使用すれば、PlayFabとPhotonを併用して、最大限活用できます。
請求は、それぞれのサービスについて個別に発生します。

PlayFabとのWebHooks統合を有効にする方法にの詳細については、*Fusion WebHooks ドキュメント*を参照してください。

カスタム認証

ダッシュボードの設定

以下に、PlayFabでカスタム認証をセットアップする際の手順を示します:

  1. Photon ダッシュボードに進みます。
  2. アプリケーションを選択するか、またはアプリケーションを新規作成します。
  3. 「管理」をクリックします。
  4. 「認証」セクションで、「カスタムサーバー」をクリックします。
  5. [必須] 認証URLをhttps://{PlayFabTitleId}.playfabapi.com/photon/authenticateに設定します。
    {PlayFabTitleId}プレースホルダーを実際のPlayFab TitleIdで置換するよう留意してください。
    {および}、または波括弧をURLに入れないようにしてください。
    : PlayFab TitleIdがAB12の場合: https://AB12.playfabapi.com/photon/authenticate
  6. 「作成」をクリックして保存します。
  7. [推奨] 「設定済みのプロバイダと関係のない、匿名クライアントの接続を許可する」をチェックしないでください。

クライアントコード

クライアントは、キー/値のセットを機密情報として送信するよう予期されています。

  • ログインしたユーザーのPlayFabユーザーID
  • Photonトークン(GetPhotonAuthenticationToken クライアントAPIメソッドを使用して取得).

以下の例は、PlayFabを使用してプレイヤーを認証し、後にFusionで使用するために認証値を保存する方法になります。

C#

using Fusion.Photon.Realtime;
using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;

public static class PlayFabAuthenticator
{
    public static AuthenticationValues AuthValues { get; private set; }
    private static string _playFabPlayerIdCache;

    /*
     * ステップ 1
     * 現在のPlayFabユーザーは通常通り認証しています。
     * この場合、LoginWithCustomID API呼び出しを使って、簡潔にしています。
     * どのようなログインメソッドでも使用できます。
     * カスタムIDにはPlayFabSettings.DeviceUniqueIdentifierを使用しています。
     * 認証に成功した場合、次のステップとしてRequestPhotonTokenをコールバックに受け渡しています。
     */
    public static void AuthenticateWithPlayFab()
    {
        Debug.Log("PlayFab authenticating using Custom ID...");

        PlayFabClientAPI.LoginWithCustomID(new LoginWithCustomIDRequest()
        {
            CreateAccount = true,
            CustomId      = PlayFabSettings.DeviceUniqueIdentifier
        }, RequestPhotonToken, OnPlayFabError);
    }

    /*
     * ステップ 2
     * PlayFabからPhoton認証トークンをリクエストします。
     * Photonの認証トークンはPlayFabとは異なるので、これは欠かせないステップです。PlayFab SessionTicketを直接使用することはできないので、明示的にトークンをリクエストする必要があります。このAPI呼び出しには、Photon AppIDを受け渡す必要があります。App IDはハードコードされている可能性がありますが、この例では、PhotonAppSettingsクラスで便利な静的フィールドを使用することでアクセスしています。問題なくトークンを取得したら、AuthenticateWithPhotonに受け渡して、次のステップでコールバックとします。 
     */
    private static void RequestPhotonToken(LoginResult loginResult)
    {
        Debug.Log("PlayFab authenticated. Requesting photon token...");

        //We can player PlayFabId. This will come in handy during next step
        _playFabPlayerIdCache = loginResult.PlayFabId;

        PlayFabClientAPI.GetPhotonAuthenticationToken(new GetPhotonAuthenticationTokenRequest()
        {
            PhotonApplicationId = PhotonAppSettings.Global.AppSettings.AppIdFusion
        }, AuthenticateWithPhoton, OnPlayFabError);
    }

    /*
     * ステップ 3
     * これが最終かつ最も簡単なステップとなります。AuthenticationValuesインスタンスを作成し保管します。このクラスはPhoton環境内でプライヤーを認証する方法を説明しています。
     */
    private static void AuthenticateWithPhoton(GetPhotonAuthenticationTokenResult authenticationTokenResult)
    {
        Debug.Log("Photon token acquired: " + authenticationTokenResult.PhotonCustomAuthenticationToken + "  Authentication complete.");

        //AuthTypeをカスタムに設定しています。独自のPlayFab認証手順を採用しているという意味です。
        var customAuth = new AuthenticationValues() { AuthType = CustomAuthenticationType.Custom };

        //"username"パラメータを追加しています。ここで注意:PlayFabでは、このパラメータにユーザー名ではなくPlayFabID(!)を入れるようになっています。
        customAuth.AddAuthParameter("username", _playFabPlayerIdCache); //  PlayFab カスタム認証サービスにより期待されています。

        //"token"パラメータを追加しています。PlayFabでは、前のステップ中にPhoton Authentication Token発行を含むことになっています。
        customAuth.AddAuthParameter("token", authenticationTokenResult.PhotonCustomAuthenticationToken);

        //ここで、この認証パラメータを保管してアプリケーション全体で使えるようになります。
        AuthValues = customAuth;
    }

    private static void OnPlayFabError(PlayFabError obj)
    {
        Debug.Log(obj.GenerateErrorReport());
    }
}

FusionアプリケーションでPlayFabAuthenticatorクラスを使用する方法は以下の通りです。

C#

public class RunnerManager : MonoBehaviour
{
    private void Awake()
    {
        PlayFabAuthenticator.AuthenticateWithPlayFab();
    }

    private static async Task<NetworkRunner> StartGame(GameMode gameMode)
    {
        var runner = CreateNetworkRunner(); // カスタムNetworkRunner オブジェクトを作成します

        // PlayFabAuthenticatorAuthValuesを使用してプレイヤーを認証します
        var result = await runner.StartGame(new StartGameArgs()
        {
            GameMode   = gameMode,
            AuthValues = PlayFabAuthenticator.AuthValues // PlayFab認証値を取得します
        });

        return runner;
    }

    // ... その他のメソッド
}
Back to top