This document is about: PUN 1
SWITCH TO

PUN Classic (v1)、PUN 2、Boltはメンテナンスモードとなっております。Unity2022についてはPUN 2でサポートいたしますが、新機能が追加されることはありません。お客様のPUNプロジェクトおよびBoltプロジェクトが停止することはなく、将来にわたってパフォーマンス性能が落ちることはありません。 今後の新しいプロジェクトについては、Photon FusionまたはQuantumへ切り替えていただくようよろしくお願いいたします。

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

イントロダクション

このドキュメントでは、PlayFabとPhotonのインテグレーションをサポートします。 このアプローチを使用すれば、PlayFabとPhotonを併用して、最大限活用できます。 請求は、それぞれのサービスについて個別に発生します。 PlayFabの Photonアドオンはこちら で参照してください-ご自分のタイトルの "アドオン" - "マルチプレイヤー" セクションの下です。 PlayFabのPhotonアドオンでは、1つまたは2つのPhotonアプリケーションをセットアップできます(1つのPhoton Realtimeアプリケーション、および/または1つのPhoton Chatアプリケーション)。 PlayFab側からの設定手順は こちらのガイドを参照してください。 Photon向けのセットアップ手順を参照してください。

カスタム認証

ダッシュボードの設定

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

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

クライアントコード

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

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

C#

PhotonNetwork.AuthValues = new AuthenticationValues();
PhotonNetwork.AuthValues.AuthType = CustomAuthenticationType.Custom;
PhotonNetwork.AuthValues.AddAuthParameter("username", PlayFabUserId);
PhotonNetwork.AuthValues.AddAuthParameter("token", PlayFabPhotonToken);
// do not set AuthValues.Token or authentication will fail
// connect

Realtime WebhookとWebRPC設定

アプリケーションにRealtime WebhookやWebRPCが不要な場合には、この部分はスキップしてください。

まず、カスタム認証をセットアップすることを推奨します。 カスタム認証がセットアップされていないと、Realtime WebhookやWebRPCは機能しません。

こちらのブログ投稿で発表したとおり、PlayFabはCloudScript (Classic)を非推奨としました。 CloudScript (Classic)を積極的に使用していた有償ユーザーのみが、以下のドキュメントで説明されているWebhooks統合を利用することができます。 詳細はこちらを参照してください。 以下のエラーメッセージError response ResultCode = '1' Message = 'Not authorized'が表示される場合には、PlayFabタイトルがCloudScript (Classic) にアクセスできないため、CloudScript (Classic)を使用するよう設定されたWebhooksでルームの作成や参加ができないことを意味しています。 PlayFabにお問い合わせいただくか、Photon Webhooksのエンドポイントを実装するための他のオプションの検討を開始してください。 たとえば、PlayFabはCloudScript ClassicをAzure Functionsを利用したCloudScript Functionsに置き換えました。

PlayFabタイトルと連携するよう、Realtime WebhookとWebRPCをセットアップする手順は以下のとおりです。

  1. Photonのダッシュボードに進みます。

  2. アプリケーションを選択するか、またはアプリケーションを新規作成します。

  3. 「管理」をクリックします。

  4. 「Webhook」セクションで、「新しいWebhoookを作成」をクリックします。

  5. ドロップダウンリスト「種類を選択」で、Webhook v1.2を選択します。

  6. [必須] 「BaseUrl」をhttps://{PlayFabTitleId}.playfablogic.com/webhook/1/prod/{PhotonSecretKey}に設定します。 -{PlayFabTitleId}プレースホルダーを実際のPlayFab TitleIdで置換するよう留意してください。

    • Photon Realtimeアプリケーションを追加すると、「Photonシークレットキー」がPlayFabのアドオンページに文字列として追加されます。
    • 最新の展開済み/アクティブなCloudScript修正ではなく、最新のアップロード済み/プッシュ済みのCloudScript修正を対象にしたい場合には、prodtestで置換することができます。
  7. [任意]必要に応じて、Webhooksパスを設定してください。 不要なものは削除してください。 詳細こちらを参照してください。

  8. [任意] 「IsPersistent」、「HasErrorInfo」、「AsyncJoin」を設定してください。 デフォルト値を保持したい場合には、これらのキーを削除してください。 詳細はこちらを参照してください。

備考

  • 「CustomHttpHeaders」設定は、CloudScriptハンドラーの影響を受けないためサポートされません。どのような値を設定しても有用ではありません。

  • PlayFabはRealtime Webhooks CloudScriptハンドラー機能に、以下の名前を推奨します:

    • "PathCreate": "RoomCreated"
    • "PathClose": "RoomClosed" (このハンドル名は変更しないでください)
    • "PathJoin": "RoomJoined"
    • "PathLeave": "RoomLeft"
    • "PathEvent": "RoomEventRaised"
    • "PathGameProperties": "RoomPropertyUpdated"

    「PathClose」以外は、他のパスに好きなハンドル名を選べます。 PlayFabは、すべてのWebhooksやWebRPCハンドラーで有効なPlayFabIdをUserId引数として求めます。 唯一の例外は「RoomClosed」です。

  • 「PathClose」以外のすべてのPhoton Realtime Webhookと、すべてのWebRPCではPlayFabのCloudScriptグローバル変数「currentPlayerId」を「UserId」引数の値に設定する必要があります。

  • クライアントに呼ばれた、設定済みのRealtime WebhookまたはWebRPCは、同じ名前のCloudScriptハンドラーが明示的に存在しない限り作動しません。

    例: 「PathJoin」を「GameJoined」に設定した場合、対象のCloudScript修正にこの機能を含める必要があります:

    JavaScript

    handlers.GameJoined = function(args)
    {
        // your custom code goes here
        return { ResultCode : 0, Message: "Success" };
    };
    

    クライアントが「foo」WebRPCメソッドを呼ぶ場合、対象のCloudScript修正にこの機能を含める必要があります:

    JavaScript

    handlers.foo = function(args)
    {
        // your custom code goes here
        return { ResultCode : 0, Message: "Success" };
    };
    
Back to top