토큰 만료 처리
PlayFab 서비스 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);