トークンの有効期限の処理
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);
}, ®istrationTokenExpired);
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
}, ®istrationTokenRefreshed);
PlayFab をシャットダウンするとき、またはトークンの有効期限と更新コールバックの受信を停止する場合は、適切な登録解除機能を呼び出します。
PFEntityUnregisterTokenExpiredEventHandler(registrationTokenExpired);
PFEntityUnregisterTokenRefreshedEventHandler(registrationTokenRefreshed);