XUser 개체로 게임과 상호 작용하는 사용자의 ID를 관리합니다. 각 XUser 인스턴스는 게임에 로그인된 사용자를 나타냅니다. 각 사용자는 XUserHandle로 표현됩니다. 게임은 XUserHandle을 사용하여 다음을 수행할 수 있습니다.
- XBOX 서비스 로그인 상태 조회
- 사용자의 게이머 태그 가져오기
- 사용자의 게이머 그림 가져오기
- 사용자의 연령대 확인
- 실시간 통신에 참여하거나 멀티플레이어 세션에 참여할 수 있는 사용자에게 허용되는 권한 확인
- 인증된 토큰 가져오기
XUser 식별자
지정된XUser와 연결된 두 가지 다른 식별자가 있습니다. 로컬 ID와 XBOX 서비스 ID(XUID)입니다.
_로컬 ID_는 게임 세션 내에서 그 사용자의 수명 동안 사용자와 함께 유지되는 식별자입니다. 게임이 생성하는 모든 프로세스 또는 게임이 XLaunchNewGame을 호출할 때 로컬 ID를 사용하세요. 그러나 게임 세션 간에 사용자를 식별하기 위해로컬 ID를 사용하지 마세요. 사용자의 로컬 ID를 얻으려면
XUserGetLocalId 함수를 사용하세요.
_Xbox 서비스 ID(XUID)_는 XBOX 서비스와 통신하거나 title-callable UI(TCUI)를 호출할 때 사용해야 하는 식별자입니다. 사용자의 XUID를 얻으려면 XUserGetId 함수를 사용하세요. XUID를 얻는 데 사용자 동의가 필요할 수 있습니다. 이 동의가 필요하고 부여되지 않은 경우 XUserGetId는 E_GAMEUSER_RESOLVE_USER_ISSUE_REQUIRED를 반환합니다. 문제를 해결하고 동의를 수집하려면 게임은 XUserResolveIssueWithUiAsync를 호출해야 합니다.
XUser 상태
사용자는 세 가지 상태 중 하나에 있을 수 있습니다. XBOX 서비스에 로그인되어 있거나, XBOX 서비스에서 로그아웃 중이거나, 완전히 로그아웃된 상태입니다. 게임은XUserGetState 함수를 사용하여 지정된 사용자의 이 상태를 쿼리할 수 있습니다. 게임은 또한 XUserRegisterForChangeEvent 함수를 사용하여 변경 알림에 등록할 수 있습니다.
XUser 상태를 기반으로 네트워크 연결을 판단하지 마세요. XUserState가 SignedIn인 경우, 이는 어느 시점에 사용자가 XBOX 서비스로 인증되었고 활성 사용자로 취급될 수 있음을 나타냅니다. 그러나 네트워크가 연결되어 있지 않을 수 있습니다.
게임에 사용자 추가 또는 제거
XBOX One ERA의 모델과 달리, 게임은XUserAddAsync 함수를 호출하여 게임이 요청한 사용자와만 상호 작용할 수 있습니다. 예를 들어, 콘솔에 두 명의 사용자, 사용자 A와 사용자 B가 로그인되어 있다고 가정해 봅니다.
- 누군가가 게임을 실행합니다. 이 시나리오에서는 누가 실행했는지 중요하지 않습니다.
- 게임은
XUserRegisterForChangeEvent를 사용하여 사용자 상태 변경에 등록합니다. - 게임이
XUserAddAsync를 호출하고 사용자 A가 게임에 로그인합니다. - 이제 게임에는 사용자 A를 나타내는
XUserHandle이 있습니다. - 가이드에서 사용자 B가 로그아웃하기로 선택합니다.
- 게임에 로그인 변경 이벤트가 발생하지 않습니다. 게임은 사용자 B에 대해 전혀 몰랐습니다.
- 가이드에서 사용자 A가 로그아웃하기로 선택합니다.
- 게임은 먼저 사용자 A가 로그아웃 중임을 나타내는 변경 이벤트를 받고, 최종적으로 사용자 A가 이제 로그아웃되었음을 나타내는 다른 이벤트를 받습니다.
- 게임은
XUserCloseHandle함수를 사용하여 사용자를 나타내는 모든 핸들을 닫을 수 있습니다. - 사용자가 가이드를 사용하여 콘솔에서 로그아웃합니다.
- 사용자가 다른 장치에 로그인합니다.
사용자 유형
XBOX One은 두 가지 유형의 사용자를 지원합니다. XBOX 플레이어와 게스트입니다. _Xbox 플레이어_는 시스템에서 사용자로서의 모든 기능을 갖습니다. 처음에는 사용자를 로그인하기 위한 시스템 제공 UI인 계정 선택기(Account Picker)에서 새 계정을 추가하여 만들어집니다. XBOX 플레이어는 설정 앱으로 명시적으로 제거될 때까지 콘솔에 유지됩니다. _Xbox 게스트_는 콘솔에서 단일 세션을 갖습니다. 이들은 계정 선택기에서 게스트로 플레이하기로 선택할 때 만들어지며 다른 로그인된 XBOX 플레이어의 후원을 받습니다. 게스트는 로그아웃할 때까지, 후원하는 XBOX 플레이어가 로그아웃할 때까지, 또는 콘솔이 꺼질 때까지 유지됩니다. 게스트를 허용하려는 게임은XUserAddAsync를 호출할 때 AllowGuest 옵션을 지정해야 합니다.
사용자 추가 패턴
게임은 항상 초기 사용자를 설정하려고 시도해야 합니다. 이를 달성하는 두 가지 주요 방법이 있습니다.옵션 1: UI를 표시하지 않고 가능한 한 빨리 사용자 결정하기
AddDefaultUserSilently를 사용하여XUserAddAsync를 호출합니다. 이 함수는 UI를 표시하지 않고 누가 게임을 실행했는지 결정하려고 시도합니다.XUserAddAsync에 대한 호출이E\_GAMEUSER\_NO\_DEFAULT\_USER로 실패할 수 있습니다. 이 경우 게임이 처음 실행될 때 로그인된 사람이 없었습니다. 초기 사용자를 설정하려면 게임은AddDefaultUserSilently플래그를 사용하지 않고XUserAddAsync를 호출해야 합니다. “silent” 옵션과 달리, 이 호출은 동의와 관련된 모든 문제가 완전히 해결되도록 보장하며, 호출이 성공하면 사용자가 XBOX 서비스에 로그인됩니다. 게임은 그 사용자에 대한 XBOX 컨텍스트를 만들 수 있습니다.
옵션 2: UI 표시 가능성이 있는 사용자 결정하기
AddDefaultUserAllowingUI를 사용하여 XUserAddAsync를 호출합니다. 이전 옵션(“silent” 사용)과 마찬가지로, 이 함수는 누가 게임을 실행했는지 결정하려고 시도합니다. 이전 옵션과 달리, 기본 사용자를 결정할 수 없으면 플레이어가 로그인하거나 자신을 선택할 수 있는 UI를 표시합니다. XUserAddResult가 성공하면 게임에는 XBOX 서비스에 완전히 로그인된 사용자가 있으며 게임은 그 사용자에 대한 XBOX 컨텍스트를 만들 수 있습니다.
이러한 단계를 보여주는 샘플 코드는 How to: 사용자 로그인 모범 사례를 참조하세요.
XUserHandle 관리
각XUserHandle은 사용자를 나타냅니다. 그러나 여러 개의 그런 핸들이 각각 동일한 사용자를 나타낼 수 있습니다. 게임은 다음 기본 패턴을 사용해야 합니다.
- 게임이 관심을 갖는 사용자 컬렉션을 나타내는
XUserHandle인스턴스 컬렉션을 유지합니다. XUserRegisterForChangeEvent를 호출하여XUser상태 변경에 등록합니다. 사용자가 로그아웃되고 있음을 발견하면 사용자 컬렉션을 업데이트합니다.XUserAddAsync에서 새XUserHandle을 받으면 이것이 새 사용자를 나타내는지 반드시 확인하세요.XUserCompare를 사용하여 핸들과 직접 비교할 수 있습니다.XUserGetLocalId를 호출하여 찾은 로컬 ID를 사용하여 비교할 수도 있습니다.- 동일한 사용자를 나타내는 여러
XUserHandle인스턴스가 있는 경우XUserCloseHandle을 사용하여 추가 인스턴스를 제거합니다.
XLaunchNewGame을 호출할 때 로컬 ID를 사용하세요. 그러나 게임 세션 간에 사용자를 식별하기 위해 로컬 ID를 사용하지 마세요.