トークンの有効期限の処理

PlayFab Services SDK は、この SDK で再ログインとトークンの更新を自動的に処理しようとします。 PlayFab エンティティ トークンの有効期限が切れると、SDK はエラーを検出し、最初にログイン要求に指定したハンドルまたはトークンを使用して新しいエンティティ トークンの取得を試みます。 この再ログインが成功すると、SDK は元の失敗した呼び出しを自動的に再試行します。 また、元のログイン呼び出しによって返された PFEntityHandle は引き続き有効なままです。

自動更新の失敗

トークンの自動更新が失敗する場合があります。 このエラーは、最初にログイン要求に指定したハンドルまたはトークンが有効でなくなっていることが原因である可能性があります。 このシナリオを処理するために、ゲームをコールバックに登録して新しいハンドルまたはトークンを提供し、ログインを再試行することができます。 PFEntityRegisterTokenExpiredEventHandler を使用してコールバックに登録し、PFAuthenticationReLoginWith*Async を使用して新しいハンドルまたはトークンを指定し、ログインを再試行します。

    PFRegistrationToken registrationTokenExpired{};
    hr = PFEntityRegisterTokenExpiredEventHandler(nullptr, nullptr, [](void* ctx, PFEntityKey const* entityKey)
    {
        PFAuthenticationLoginWithXUserRequest request{};
        request.createAccount = true;
        request.user = user; // An XUserHandle obtained from XUserAddAsync

        XAsyncBlock async{};
        HRESULT hr = PFAuthenticationReLoginWithXUserAsync(GlobalState()->entityHandle, &request, &async); // This assumes the entity handle was stored in the game's global state
        hr = XAsyncGetStatus(&async, true); // This is doing a blocking wait for completion, but you can use the XAsyncBlock to set a callback instead for async style usage

        // After login we could potentially get back a new player entity with a new entity key
        PFEntityKey const* pEntityKey{};
        std::vector<char> entityKeyBuffer;
        size_t size{};
        hr = PFEntityGetEntityKeySize(GlobalState()->entityHandle, &size); // Add your own error handling when FAILED(hr) == true

        entityKeyBuffer.resize(size);
        hr = PFEntityGetEntityKey(GlobalState()->entityHandle, entityKeyBuffer.size(), entityKeyBuffer.data(), &pEntityKey, nullptr);
    }, &registrationTokenExpired);

透過的な更新

SDK がプレイヤーのエンティティ トークンを自動的に更新するタイミングをゲームで知りたいと思う場合は、コールバックに登録できます。

    PFRegistrationToken registrationTokenRefreshed{};
    hr = PFEntityRegisterTokenRefreshedEventHandler(nullptr, nullptr, [](void* ctx, PFEntityKey const* entityKey, const PFEntityToken* newToken)
    {
        // Perform any logging or other desired actions on token refresh
    }, &registrationTokenRefreshed);

ハンドラーの登録解除

PlayFab をシャットダウンするとき、またはトークンの有効期限と更新コールバックの受信を停止する場合は、適切な登録解除機能を呼び出します。

    PFEntityUnregisterTokenExpiredEventHandler(registrationTokenExpired);
    PFEntityUnregisterTokenRefreshedEventHandler(registrationTokenRefreshed);

リファレンス

API リファレンス ドキュメント