次の方法で共有


CloudScript でのエラーの処理

このチュートリアルでは、CloudScript ハンドラー内でのエラーを認識および処理する方法を説明します。

特定

最初の手順は、エラーを特定することです。 キャッチされないエラーはログに記録され、呼び出し元 (クライアント) への応答から利用できますが、try/catch ブロックを使用して早期にエラーをキャッチできる場合があります。

エラーを生成し、キャッチする以下の CloudScript スニペットを検討してください。

"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        let error = ex.apiErrorInfo.apiError.error; // In this case - "InvalidParams"
        let errorCode = ex.apiErrorInfo.apiError.errorCode; // In this case : 1000
    }
}

catch ブロック内で、どのようにエラー コードが抽出されたかを確認してください。 エラーの完全な一覧については、「グローバル API メソッドのエラー コードに関するドキュメント」を参照してください。

注意

エラー コードのみで、十分にエラーを特定できます。

ログ記録

すべての未処理のエラーは応答に追加され、クライアントは問題を処理できます。

同時に、CloudScript エラー エントリが作成され、CloudScript ダッシュボードで利用可能な総合統計情報に追加されます。

ゲーム マネージャー - API エラーのグラフを示す CloudScript ダッシュボード

JSON 文字列の形式で例外を強制的にログ記録するには、log オブジェクト経由でエラー ログを使用します。

"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        log.error(ex);
    }
}

最後に、後で分析処理をするために、タイトル/プレイヤー イベントを記述できます。

"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        server.WriteTitleEvent({
            EventName : 'cs_error',
            Body : ex
        });
    }
}

リカバリ

エラーから復旧できない場合もあります。 InvalidArguments のような問題の場合は、プレイヤーに問題を報告する以外にできることはありません。

一部のエラーのサブセットには、再試行の戦略を適用できます。 再試行可能なエラー タイプは、グローバル API メソッド エラー コードで説明しています。

再試行の戦略を適用する場合は、以下の要件を満たしていることを必ず確認してください。

  • 再試行するたびに、次の再試行までの遅延は指数関数的に増加します。 これによって呼び出しが成功する可能性が高くなり、ゲームが PlayFab サーバーに大量の呼び出しを実行する (その結果、さらに 呼び出しが拒否される) ことを防ぐことができます。

  • 再試行の戦略は、選択的に適用し、再試行が適切なコードのみに使用してください。

CloudScript timeout error

CloudScript API 呼び出しの実行時間は 4 秒に制限されます。

実行時間が 4 秒を超えると、InternalServerError が発生し、PlayStream イベントは次のような Logs オブジェクトを書き込みます。

    "Logs":[
        {
        "Level":"Error",
        "Message":"PlayFab API request failure",
        "Data":{
            "request":{
                "PlayFabId":"9437A5ADDAE3012D"
            },
            "error":"Timeout",
            "api":"/Server/GetPlayerSegments"
        }
        }
    ]

このエラーが発生した場合は、次のことができます: