XUser 物件來管理與遊戲互動之使用者的身分識別。每個 XUser 執行個體代表一位已登入遊戲的使用者。每位使用者都以 XUserHandle 表示。遊戲可以使用 XUserHandle 執行下列作業。
- 查詢 XBOX services 登入狀態。
- 擷取使用者的玩家代號。
- 擷取使用者的玩家圖片。
- 判斷使用者的年齡群組。
- 判斷允許參與即時通訊或參與多人遊戲工作階段的使用者具有哪些權限。
- 擷取已驗證的權杖。
XUser 識別碼
與指定XUser 相關聯的識別碼有兩種:本機識別碼和 XBOX services 識別碼 (XUID)。
「本機識別碼」是在遊戲工作階段內,於使用者的整個存留期間都會跟隨該使用者的識別碼。在遊戲衍生的任何處理序之間,或遊戲呼叫 XLaunchNewGame 時,請使用本機識別碼。但是,請勿使用本機識別碼來跨遊戲工作階段識別使用者。 若要取得使用者的本機識別碼,請使用
XUserGetLocalId 函式。
「XBOX services 識別碼 (XUID)」是與 XBOX services 通訊或叫用遊戲可呼叫 UI (TCUI) 時必須使用的識別碼。若要取得使用者的 XUID,請使用 XUserGetId 函式。取得 XUID 可能需要使用者同意。如果需要此同意但未獲得授與,XUserGetId 會傳回 E_GAMEUSER_RESOLVE_USER_ISSUE_REQUIRED。若要解決此問題並收集同意,遊戲接著應呼叫 XUserResolveIssueWithUiAsync。
XUser 狀態
使用者可能處於下列三種狀態之一:已登入 XBOX services、正在登出 XBOX services,或已完全登出。遊戲可以使用XUserGetState 函式查詢指定使用者的此狀態。遊戲也可以使用 XUserRegisterForChangeEvent 函式註冊變更通知。
請勿根據 XUser 狀態判斷網路連線能力。如果 XUserState 為 SignedIn,這表示使用者曾在某個時間點通過 XBOX services 驗證,可以將其視為作用中的使用者。但是,網路可能並未連線。
在遊戲中新增或移除使用者
與 XBOX One ERA 的模型不同,遊戲只能與遊戲透過呼叫XUserAddAsync 函式所要求的使用者互動。例如,假設有兩位使用者登入主機:使用者 A 和使用者 B。
- 有人啟動遊戲。在此案例中,由誰啟動並不重要。
- 遊戲使用
XUserRegisterForChangeEvent註冊使用者狀態變更。 - 遊戲呼叫
XUserAddAsync,使用者 A 登入遊戲。 - 遊戲現在有代表使用者 A 的
XUserHandle。 - 使用者 B 從指南中選擇登出。
- 遊戲不會收到任何登入變更事件。遊戲從來都不知道使用者 B 的存在。
- 使用者 A 從指南中選擇登出。
- 遊戲會收到一個變更事件,首先指出使用者 A 正在登出,最後再收到另一個事件,指出使用者 A 現在已登出。
- 遊戲可以使用
XUserCloseHandle函式關閉代表該使用者的所有控制代碼。 - 使用者使用指南從主機登出。
- 使用者登入其他裝置。
使用者類型
XBOX One 支援兩種類型的使用者:XBOX 玩家和來賓。 「XBOX 玩家」在系統上擁有完整的使用者功能。他們最初是透過在帳戶選擇器 (系統提供的使用者登入 UI) 中新增帳戶來建立。XBOX 玩家會一直保留在主機上,直到使用 [設定] 應用程式明確移除為止。 「XBOX 來賓」在主機上只有單一工作階段。當他們在帳戶選擇器中選擇以來賓身分遊玩時便會建立,並由另一位已登入的 XBOX 玩家贊助。來賓會一直保留,直到其登出、贊助的 XBOX 玩家登出,或主機關機為止。 想要允許來賓的遊戲在呼叫XUserAddAsync 時,必須指定 AllowGuest 選項。
新增使用者的模式
遊戲必須一律嘗試建立初始使用者。有兩種主要方式可以達成此目的。選項 1:在不顯示 UI 的情況下盡快判斷使用者
- 使用
AddDefaultUserSilently呼叫XUserAddAsync。此函式會嘗試在不顯示任何 UI 的情況下,判斷是誰啟動了遊戲。 - 對
XUserAddAsync的呼叫可能會失敗並傳回E\_GAMEUSER\_NO\_DEFAULT\_USER。如果發生這種情況,表示首次啟動遊戲時沒有任何人登入。若要建立初始使用者,遊戲需要在不使用AddDefaultUserSilently旗標的情況下呼叫XUserAddAsync。與「無訊息」選項不同,此呼叫可確保所有同意問題都已完全解決,而且如果呼叫成功,使用者就已登入 XBOX services。遊戲可以為該使用者建立 XBOX 內容。
選項 2:在可能顯示 UI 的情況下判斷使用者
使用AddDefaultUserAllowingUI 呼叫 XUserAddAsync。與先前的選項 (使用「無訊息」) 一樣,此函式會嘗試判斷是誰啟動了遊戲。與先前選項不同的是,如果無法判斷預設使用者,它會顯示 UI 讓玩家登入或選取自己。如果 XUserAddResult 成功,遊戲就有一位已完全登入 XBOX services 的使用者,遊戲可以為該使用者建立 XBOX 內容。
如需示範這些步驟的範例程式碼,請參閱操作說明:登入使用者的最佳做法。
管理 XUserHandle
每個XUserHandle 代表一位使用者。但是,可能會有多個這類控制代碼都代表同一位使用者。遊戲應使用下列基本模式。
- 維護一個
XUserHandle執行個體的集合,代表遊戲所關注的使用者集合。 - 呼叫
XUserRegisterForChangeEvent註冊XUser狀態變更。當您發現某位使用者正在登出時,請更新您的使用者集合。 - 當您從
XUserAddAsync取得新的XUserHandle時,請務必檢查它是否代表新的使用者。您可以使用XUserCompare直接比較控制代碼。您也可以使用呼叫XUserGetLocalId所取得的本機識別碼進行比較。 - 如果您有多個代表同一位使用者的
XUserHandle執行個體,請使用XUserCloseHandle移除多餘的執行個體。
XLaunchNewGame 時,請使用本機識別碼。但是,請勿使用本機識別碼來跨遊戲工作階段識別使用者。