다음을 통해 공유


XGameSaveInitializeProviderAsync

XGameSave 제공자 핸들을 제공하고 비동기적으로 초기화합니다.

구문

HRESULT XGameSaveInitializeProviderAsync(  
         XUserHandle requestingUser,  
         const char* configurationId,  
         bool syncOnDemand,  
         XAsyncBlock* async  
)  

매개 변수

requestingUser _In_
형식: XUserHandle

Xbox Live 사용자에 대한 핸들입니다.

configurationId _In_z_
형식: char*

SCID(서비스 구성 ID)입니다.

syncOnDemand _In_
형식: bool

true이면 필요한 경우에만 syncOnDemand가 서비스에서 데이터를 다운로드합니다. 장치가 오프라인이면 작동하지 않습니다. true로 설정하면 동기화 진행 UI가 표시될 수 있습니다.

async _In_
형식: XAsyncBlock*

비동기 호출에 대한 정보를 포함합니다. 여기에는 호출 컨텍스트 및 XGameSaveInitializeProviderResult 함수에 대한 호출이 포함됩니다.

반환 값

형식: HRESULT

함수 결과입니다.

비고

이 함수는 다른 XGameSave API가 사용되기 전에 성공적으로 호출되어야 합니다.

참고 항목

XGameSave API를 사용하려면 타이틀 ID 및 SCID(서비스 구성 ID)가 올바르게 구성되어 있어야 합니다. 이러한 필수 ID에 대한 자세한 내용은 Xbox Live 개발을 위한 샌드박스 설정을 참조하세요. 게임이 파트너 센터에서 Xbox Live에 대해 활성화되어 있어야 합니다.

SCID 및 타이틀 ID를 올바르게 구성하지 않으면 XSaveGame API 호출이 실패하고 다음 오류 코드가 표시됩니다.

E_GS_NO_ACCESS - 0x80830002 - 타이틀에 컨테이너 저장소 공간에 대한 액세스 권한이 없기 때문에 작업이 실패했습니다.

결과 XGameSaveProviderHandleXGameSaveInitializeProviderResult 함수에서 가져옵니다. 이 핸들을 사용하여 XGameSaveProvider에 액세스합니다.

syncOnDemand를 true로 설정하여 이 API를 호출하면 호출자 관점에서 동일하게 작동하지만, 나머지 API에서 몇 가지 동작 차이가 발생합니다. SyncOnDemandXGameSaveProvider는 필요한 경우에만 서비스에서 데이터를 다운로드하지만, 컨테이너 작업이 이 경우에 표시될 수 있고, 이러한 지연으로 인해 동기화 진행 기간 동안 일부 UX가 사용자에게 표시될 수 있다는 단점이 있습니다. 다음 방법 중 하나를 사용하면 강제 동기화할 수 있습니다.

장치가 오프라인이거나 연결 문제가 있으면 컨테이너 액세스가 불가능하다는 또 다른 단점도 있습니다.

##예

// ASYNC Init - can be kicked off from a time sensitive thread 
//              work and callback will happen from platform provided threads 
void Sample::_InitializeAsync() 
{ 
    HRESULT hr; 
  
    struct InitContext 
    { 
        Sample* self; 
        XAsyncBlock async; 
    }; 
  
    InitContext* ctx = new InitContext{}; 
    if (ctx) 
    { 
        ctx->self = this; 
        ctx->async.context = ctx; 
        ctx->async.callback = [](XAsyncBlock* async) 
        { 
            auto ctx = reinterpret_cast<InitContext*>(async->context); 
            auto self = ctx->self; 
            XGameSaveProviderHandle provider = nullptr; 
            HRESULT hr = XGameSaveInitializeProviderResult(async, &provider); 
            if (SUCCEEDED(hr)) 
            { 
                self->_provider = provider; 
            } 
            else 
            { 
                self->_HandleInitializeErrors(self->_xalUser, hr); 
            } 
            delete ctx; 
        }; 
    } 
    else 
    { 
        hr = E_OUTOFMEMORY; 
    } 
  
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveInitializeProviderAsync(this->_xalUser, "SERVICE_CONFIG_ID-DEADBEEF0123", false, &ctx->async); 
    } 
    if (FAILED(hr)) 
    { 
        // if we didn't setup the async we need to cleanup our tracking context 
        delete ctx; 
        _HandleInitializeErrors(this->_xalUser, hr); 
    } 
} 

게임은 XGameSaveFiles의 사용량을 XGameSave 사용량과 혼합할 수 없습니다. 게임은 사용하려는 클라우드 저장 시스템을 많이 선택합니다. 게임이 XGameSaveFiles를 사용하고 나중에 XGameSaveInitializeProvider를 호출하면 E_GS_PROVIDER_MISMATCH와 함께 오류가 발생합니다. 마찬가지로 게임에서 XGameSave를 사용하고 나중에 XGameSaveFilesGetFolderWithUiAsync를 호출하면 E_GS_PROVIDER_MISMATCH와 함께 오류도 발생합니다.

요구 사항

헤더: XGameSave.h

라이브러리: xgameruntime.lib

지원되는 플랫폼: Windows, Xbox One 패밀리 콘솔 및 Xbox Series 콘솔

참고 항목

XGameSave
XGameSaveInitializeProviderResult
XGameSaveInitializeProvider
게임 저장 오류