Behandeln des Tokenablaufs
Das PlayFab Services SDK versucht automatisch, die erneute Anmeldung und Tokenaktualisierung in diesem SDK zu verarbeiten. Wenn ein PlayFab-Entitätstoken abläuft, erkennt das SDK den Fehler und versucht, mithilfe des Handles oder Tokens, das Sie ursprünglich für die Anmeldeanforderung angegeben haben, ein neues Entitätstoken abzurufen. Wenn diese erneute Protokollierung erfolgreich ist, wiederholt das SDK den ursprünglichen fehlgeschlagenen Aufruf automatisch. Darüber hinaus ist die pfEntityHandle , die vom ursprünglichen Anmeldeaufruf zurückgegeben wurde, weiterhin gültig.
Es ist möglich, dass die automatische Tokenaktualisierung fehlschlägt. Dieser Fehler kann darauf zurückzuführen sein, dass das Handle oder Token, das Bzw. das Sie ursprünglich für die Anmeldeanforderung angegeben haben, nicht mehr gültig ist. Um dieses Szenario zu bewältigen, kann sich Ihr Spiel für einen Rückruf registrieren, um ein neues Handle oder Token bereitzustellen, und die Anmeldung wiederholen. Verwenden Sie PFEntityRegisterTokenExpiredEventHandler , um sich für einen Rückruf zu registrieren, und PFAuthenticationReLoginWith*Async , um das neue Handle oder Token bereitzustellen und die Anmeldung erneut zu aktualisieren.
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);
Wenn Ihr Spiel wissen soll, wann das SDK das Entitätstoken des Spielers automatisch aktualisiert, können Sie sich für einen Rückruf registrieren.
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);
Wenn Sie PlayFab herunterfahren oder den Empfang von Tokenablauf- und Aktualisierungsrückrufen beenden möchten, rufen Sie die entsprechende Funktion zum Aufheben der Registrierung auf.
PFEntityUnregisterTokenExpiredEventHandler(registrationTokenExpired);
PFEntityUnregisterTokenRefreshedEventHandler(registrationTokenRefreshed);