다음을 통해 공유


토큰 만료 처리

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);
    }, &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 참조 설명서.