PlayFab 서비스 SDK 호출에서 비동기 API 호출이 실패할 수 있는 여러 가지 지점이 있습니다. 이러한 오류 처리는 작업의 실패 방법과 시기에 따라 다릅니다.
GDK의 대부분의 비동기 호출과 마찬가지로 PlayFab API는 동일한 일반 호출 패턴을 따릅니다.
- PF*Async(...)호출은 비동기 작업을 시작합니다.
- (선택 사항) XAsyncGetStatus(...) 호출은 비동기 작업의 상태 추적합니다. 비동기 작업의 완료를 기다리는 데 사용할 수 있습니다.
- PF*GetResultSize(...) 호출은 결과 페이로드의 크기를 바이트 단위로 검색합니다.
- PF*GetResult(...) 호출은 비동기 작업의 결과를 검색합니다.
이러한 각 호출은 여러 가지 이유로 실패할 수 있습니다. 다음 섹션에서는 가장 일반적으로 발생하는 실패 유형을 자세히 설명합니다.
동기 오류
동기 오류는 초기 PF*Async 호출이 오류를 반환하는 경우입니다. 이 유형의 실패는 일반적으로 잘못된 호출 패턴, 인수 무효화 등 프로그래밍 오류를 나타냅니다. 이러한 유형의 오류는 개발 과정에서 해결되어야 합니다. 대부분의 다른 동기 오류는 치명적이며 쉽게 처리할 수 없습니다(예: E_OUTOFMEMORY).
비동기 오류
비동기 오류는 XAsyncGetStatus, PF*GetResultSize 또는 PF*GetResult가 실패하는 경우입니다. 비동기 오류의 범위는 더 넓습니다. 잘못된 인수로 인한 오류 외에도 비동기 오류는 다음 섹션에 자세히 설명된 여러 범주로 나뉩니다.
토큰 유효성 검사 오류
PlayFab 서비스 호출을 시작하기 전에 SDK는 필요한 인증 토큰을 사용할 수 있고 여전히 유효한지 확인하기 위해 클라이언트 쪽 유효성 검사를 수행합니다. 이 검사에 실패하면 다음 오류 중 하나가 반환됩니다.
E_PF_NOENTITYTOKEN (0x89235411): 제공된 PFEntityHandle과 연결된 EntityToken이 만료되었음을 나타냅니다. 이 상황을 처리하는 방법에 대한 자세한 정보는 토큰 만료 처리를 참고하세요.E_PF_NOSECRETKEY (0x89235412): 제공된 PFEntityHandle에 연결된 SecretKey가 없다는 것을 나타냅니다. SecretKey가 없다는 것은 일반적으로 잘못된 엔터티 형식으로 요청을 시도했음을 의미합니다. SecretKey가 필요한 API는 타이틀 엔터티에서만 호출할 수 있습니다. SecretKey API는 서버 또는 관리자 시나리오를 대상으로 하며 GDK에서 사용할 수 없습니다.
PlayFab 서비스 오류
SDK가 PlayFab 서비스 요청을 성공적으로 수행해도 서비스가 여전히 오류를 반환할 수 있습니다. PlayFab 서비스 오류의 두 가지 유형에는 모든 PlayFab API에서 반환될 수 있는 전역 오류와 API별 특정 오류가 있습니다. 다음은 전역 오류의 전체 목록입니다.
E_PF_API_CLIENT_REQUEST_RATE_LIMIT_EXCEEDED (0x892354dd)E_PF_API_CONCURRENT_REQUEST_LIMIT_EXCEEDED (0x8923556b)E_PF_CONCURRENT_EDIT_ERROR (0x8923549b)E_PF_DATA_UPDATE_RATE_EXCEEDED (0x89235534)E_PF_DOWNSTREAM_SERVICE_UNAVAILABLE (0x89235495)E_PF_INVALID_API_ENDPOINT (0x89235499)E_PF_OVER_LIMIT (0x892354ec)E_PF_SERVICE_UNAVAILABLE (0x89235491)E_PF_ACCOUNT_BANNED (0x89235423)E_PF_ACCOUNT_DELETED (0x89235557)E_PF_ACCOUNT_NOT_FOUND (0x89235422)E_PF_API_REQUESTS_DISABLED_FOR_TITLE (0x8923553c)E_PF_INVALID_CONTENT_TYPE (0x892354a6)-
E_PF_INVALID_ENTITY_TYPE (0x8923558a): E_PF_INVALID_PARAMS (0x89235421)E_PF_INVALID_REQUEST (0x89235468)E_PF_INVALID_TITLE_ID (0x89235425)E_PF_NOT_AUTHENTICATED (0x8923546b)E_PF_NOT_AUTHORIZED (0x89235478)E_PF_NOT_AUTHORIZED_BY_TITLE (0x892354d5)E_PF_PROFILE_DOES_NOT_EXIST (0x8923553f)E_PF_TITLE_DELETED (0x89235570)E_PF_UNKNOWN_ERROR (0x89235448)
서비스 오류 다시 시도 지침에 대한 자세한 내용은 PlayFab Service Global API 메서드 오류 코드를 참조하세요.
제한 실패
서비스 오류의 한 가지 범주는 HTTP 429 상태 코드로 표시되는 제한 오류입니다. PlayFab 서비스가 제한 오류를 반환하면 클라이언트가 특정 기간에 엔드포인트를 너무 자주 호출한다는 의미입니다. SDK가 제한 오류를 가져오면 작은 백오프 후에 요청을 자동으로 다시 시도합니다. 구성된 다시 시도 창 내에서 요청이 여전히 성공적으로 이루어지지 못하면 오류가 타이틀에 전달됩니다. SDK 재시도 설정은 PFSetHttpRetrySettings를 호출하여 구성할 수 있습니다.
네트워크 오류
기본 네트워크 스택에서 오류를 반환하면 해당 오류가 클라이언트에 전달됩니다. 네트워크 오류에 따라 다양한 오류가 발생할 수 있습니다. 대부분의 네트워크 오류는 E_HC_NO_NETWORK (0x89235006)로 이어집니다.
추가 오류 세부 정보 및 추적
HRESULT 외에도 PlayFab 서비스는 때때로 errorDetails 문자열을 반환합니다. 이 문자열은 최종 클라이언트에 노출되지 않지만 개발 및 디버깅 과정에서 유용할 수 있습니다. 자세한 정보 추적을 사용하여 반환된 errorDetails 문자열을 확인하는 방법을 알아보려면 추적 가이드를 참고하세요.
참조
[Microsoft 게임 개발 키트에서 오류 처리][/gaming/gdk/_content/gc/system/overviews/error-handling]