> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 面向 GDK 的 Unity C# API 包装器

> 参考 GDK for Unity 包中的 XGamingRuntime C# 命名空间:命名约定、HRESULT 处理、异步模式,以及原生 vs. 托管代码示例。

请使用本主题理解如何借助 API 包装器从托管代码中正确调用 Microsoft Game Development Kit(GDK)以及 XBOX 服务的 API。

## 访问 Microsoft Game Development Kit(GDK)API

从 Unity 中导入 Microsoft GDK API 包后,其功能位于 XGamingRuntime 命名空间下。所有 Gaming Runtime API 都以 SDK 类上的静态方法提供。所有 XBOX 服务 API 都以 SDK.XBL 类上的静态方法提供。以下示例展示了这种用法。

```cpp theme={null}
using System;

// The namespace under which the "GDK" functionality is available.

using XGamingRuntime;

namespace TestGame
{
    static class Program
    {
        static void Main()
        {
            // All APIs are accessed through static methods on the SDK class.
            Int32 hr = SDK.XGameRuntimeInitialize();

            // All Xbox services APIs are accessed through static methods on the SDK.XBL class.
            Int32 hr = SDK.XBL.XblInitialize(SCID);
            ...
        }
    }
}
```

## API 覆盖与约定

<Note>
  并非所有 API 都可通过该包使用。完整列表参见本主题稍后列出的 Microsoft Game Development Kit(GDK)与 XBOX 服务 API 列表。
</Note>

约定:

* API 名称在可行的情况下与对应的 GDK 保持一致。
* 不使用异常。错误通过 HRESULT 反馈。
* API 表面扁平,没有面向对象封装。
* 用 out 参数返回结果的 API。
* 异步方法使用回调。详情参见下一节。

## 异步编程模型

大多数异步 API 将回调作为最后一个参数。示例如下。

```cpp theme={null}
using System;

using XGamingRuntime;

class SignInManager
{
    public void AddUser()
    {
        SDK.XUserAddAsync(XUserAddOptions.None, this.OnUserAddComplete);
    }

    private void OnUserAddComplete(Int32 hresult, XUserHandle userHandle)
    {
        // Check the result, and then do something with the handle.
    }
}
```

关于线程模型的信息如下。

* 异步方法立即返回,实际工作在线程池中某个可用线程上执行。
  * 线程池会在调用 SDK.XGameRuntimeInitialize() 之后在内部初始化。
  * 没有对外暴露线程池配置选项。
* 结果回调是在 dispatch 被调用之后触发的(也就是 SDK.XTaskQueueDispatch())。因此务必 *频繁调用* dispatch,理想情况下在游戏的 update 循环中调用。
* 结果回调运行在调用 dispatch 的线程上。

## 原生 API 与托管包装器的差异示例

原生 API 与托管包装器之间的差异很小。作为参考,下面两个示例展示了 **XUserAddAsync** 与 **XblAchievementsUpdateAchievementAsync** 在托管和原生代码中的签名与调用方式。

### XUserAddAsync 示例

XUserAddAsync 的原生签名如下。

```cpp theme={null}
STDAPI XUserAddAsync(
    _In_ XUserAddOptions options,
    _Inout_ XAsyncBlock* async
    ) noexcept;

STDAPI XUserAddResult(
    _Inout_ XAsyncBlock* async,
    _Out_ XUserHandle* newUser
    ) noexcept;
```

XUserAddAsync 的托管签名如下。

```csharp theme={null}
public static void XGamingRuntime.SDK.XUserAddAsync(
    XUserAddOptions options,
    XUserAddCompleted completionRoutine
);

public delegate void XUserAddCompleted(Int32 hresult, XUserHandle userHandle);
```

在原生代码中调用 XUserAddAsync 的示例如下。

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
asyncBlock->queue = _queue;
asyncBlock->context = this;
asyncBlock->callback = [](XAsyncBlock* ab)
{
    auto asyncBlock = std::unique_ptr<XAsyncBlock>(ab);
    XUserHandle user;
    RETURN_IF_FAILED(XUserAddResult(ab, &user));
};

if (SUCCEEDED_LOG(XUserAddAsync(
    XUserAddOptions::AddDefaultUserAllowingUI,
    asyncBlock.get())))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
    asyncBlock.release();
}
```

在托管代码中调用 XUserAddAsync 的示例如下。

```csharp theme={null}
Managed add user

SDK.XUserAddAsync(
    XUserAddOptions.AddDefaultUserAllowingUI,
    (hr, userHandle) =>
    {
        LOG("XUserAddAsync", hr);
        if (hr >= 0)
        {
            this.userHandle = userHandle;
            // Sign-in succeeded.
        }
        else
        {
            // Sign-in failed.
        }
    }
);
```

如果用户希望使用自定义队列,或者该 API 不包含回调实现,下面的示例展示如何创建一个 XAsyncBlock。用户还必须确保队列正确地 dispatch 与完成。更多信息请访问 [XTaskQueue 库概览](https://learn.microsoft.com/gaming/gdk/_content/gc/features/common/async/async-libraries/async-library-xtaskqueue)。

```csharp theme={null}

XAsyncBlock xAsyncBlock = new XAsyncBlock(queue, (_async) =>
{
    XUserHandle userHandle;
    int hr = SDK.XUserAddResult(_async, out userHandle);

    if (hr >= 0)
    {
        this.userHandle = userHandle;
        // Sign-in succeeded.
    }
    else
    {
        // Sign-in failed.
    }
}, IntPtr.Zero);

SDK.XUserAddAsync(XUserAddOptions.AddDefaultUserAllowingUI, xAsyncBlock);
```

### XblAchievementsUpdateAchievementAsync 示例

XblAchievementsUpdateAchievementAsync 的原生签名如下。

```cpp theme={null}
STDAPI XblAchievementsUpdateAchievementAsync(
    _In_ XblContextHandle xboxLiveContext,
    _In_ uint64_t xboxUserId,
    _In_z_ const char* achievementId,
    _In_ uint32_t percentComplete,
    _In_ XAsyncBlock* async
) XBL_NOEXCEPT;
```

XblAchievementsUpdateAchievementAsync 的托管签名如下。

```csharp theme={null}
public static void XGamingRuntime.SDK.XBL.XblAchievementsUpdateAchievementAsync(
    XblContextHandle xboxLiveContext,
    UInt64 xboxUserId,
    string achievementId,
    UInt32 percentComplete,
    XblAchievementsUpdateAchievementResult completionRoutine);

public delegate void XblAchievementsUpdateAchievementResult(Int32 hresult);
```

在原生代码中调用 XblAchievementsUpdateAchievementAsync 的示例如下。

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = Data()->queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*
    auto result = XAsyncGetStatus(asyncBlock, false);
    if (SUCCEEDED(result))
    {
        // Achievement updated.
    }
    else if (result == HTTP_E_STATUS_NOT_MODIFIED)
    {
        // Achievement isn't modified.
    }
    else
    {
        // Achievement failed to update.
    }
};

HRESULT hr = XblAchievementsUpdateAchievementAsync(
    Data()->xboxLiveContext,
    Data()->xboxUserId,
    achievementId.c_str(),
    percentComplete,
    asyncBlock.get()
);
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyn-cBlock*
    asyncBlock.release();
}
```

在托管代码中调用 XblAchievementsUpdateAchievementAsync 的示例如下。

```csharp theme={null}
SDK.XBL.XblAchievementsUpdateAchievementAsync(
    xblContextHandle,
    xboxUserId,
    achievementId,
    percentComplete
    (achievementUpdateResult) => {
        LOG("XblAchievementsUpdateAchievementAsync result", achievementUpdateResult);
        if (achievementUpdateResult == 0)
        {
        	//  Achievement updated.
       	}
        else if (achievementUpdateResult == HTTP_E_STATUS_NOT_MODIFIED) //  0x80190130
        {
       		//  Achievement isn't modified.
       	}
        else
        {
       		//  Achievement failed to update.
       	}
    }
);
```

### 在托管代码中初始化 XBOX Services API(XSAPI)

作为参考,以下是在托管代码中初始化 [XSAPI](https://learn.microsoft.com/gaming/gdk/_content/gc/services/fundamentals/xbox-services-api/live-gs-xbl-apis) 的示例。这是 XSAPI 在托管代码中的签名。

```csharp theme={null}
public static Int32 XGamingRuntime.SDK.XBL.XblInitialize(string scid)
```

以下是托管代码中 XSAPI 调用模式的示例。

```csharp theme={null}
Int32 hresult = SDK.XBL.XblInitialize(SCID);
```

## 托管包装器中包含的 Microsoft Game Development Kit(GDK)API 列表

GDK Unity 包中的托管包装器包含以下 Microsoft Game Development Kit(GDK)API。有关 Microsoft GDK API 的更多信息,参见 [System API reference](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/gc-reference-system-toc)。

* [XAccessibility](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xaccessibility/xaccessibility_members)
  * XClosedCaptionGetProperties
  * XClosedCaptionSetEnabled
  * XHighContrastGetMode
  * XSpeechToTextSendString
  * XSpeechToTextSetPositionHint
  * XSpeechToTextBeginHypothesisString
  * XSpeechToTextUpdateHypothesisString
  * XSpeechToTextFinalizeHypothesisString
  * XSpeechToTextCancelHypothesisString
* [XAppCapture](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xappcapture/xappcapture_members)
  * XAppBroadcastGetStatus
  * XAppBroadcastIsAppBroadcasting
  * XAppBroadcastShowUI
  * XAppBroadcastRegisterIsAppBroadcastingChanged
  * XAppCaptureCloseLocalStream
  * XAppCaptureCloseScreenshotStream
  * XAppCaptureEnableRecord
  * XAppCaptureDisableRecord
  * XAppBroadcastUnregisterIsAppBroadcastingChanged
  * XAppCaptureMetadataAddStringEvent
  * XAppCaptureMetadataAddInt32Event
  * XAppCaptureMetadataAddDoubleEvent
  * XAppCaptureMetadataStartStringState
  * XAppCaptureMetadataStartInt32State
  * XAppCaptureMetadataStartDoubleState
  * XAppCaptureMetadataStopState
  * XAppCaptureMetadataStopAllStates
  * XAppCaptureMetadataRemainingStorageBytesAvailable
  * XAppCaptureOpenScreenshotStream
  * XAppCaptureReadScreenshotStream
  * XAppCaptureRecordDiagnosticClip
  * XAppCaptureTakeDiagnosticScreenshot
  * XAppCaptureTakeScreenshot
  * XAppCaptureRegisterMetadataPurged
  * XAppCaptureUnRegisterMetadataPurged
  * XAppCaptureReadLocalStream
  * XAppCaptureRecordTimespan
  * XAppCaptureGetVideoCaptureSettings
* [XAsync](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xasync/xasync_members)
  * XAsyncGetStatus
  * XAsyncGetResultSize
  * XAsyncCancel
  * XAsyncRun
* [XDisplay](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xdisplay/xdisplay_members)
  * XDisplayTryEnableHdrMode
  * XDisplayAcquireTimeoutDeferral
  * XDisplayCloseTimeoutDeferralHandle
* [XError](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xerror/xerror_members)
  * XErrorSetCallback
  * XErrorSetOptions
* [XGameEvent](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgameevent/xgameevent_members)
  * XGameEventWrite
* [XGame](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgame/xgame_members)
  * XGameGetXboxTitleId
  * XLaunchNewGame
  * XLaunchRestartOnCrash
* [XGameInvite](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgameinvite/xgameinvite_members)
  * XGameInviteRegisterForEvent
  * XGameInviteUnregisterForEvent
* [XGameProtocol](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgameprotocol/xgameprotocol_members)
  * XGameProtocolRegisterForActivation
  * XGameProtocolUnregisterForActivation
* [XGameRuntimeFeature](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgameruntimefeature/xgameruntimefeature_members)
  * XGameRuntimeIsFeatureAvailable
* [XGameRuntimeInit](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgameruntimeinit/xgameruntimeinit_members)
  * XGameRuntimeInitialize
  * XGameRuntimeUninitialize
* [XGameSave](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgamesave/xgamesave_members)
  * XGameSaveInitializeProvider
  * XGameSaveInitializeProviderAsync
  * XGameSaveInitializeProviderResult
  * XGameSaveCloseProvider
  * XGameSaveGetRemainingQuota
  * XGameSaveGetRemainingQuotaAsync
  * XGameSaveGetRemainingQuotaResult
  * XGameSaveDeleteContainer
  * XGameSaveDeleteContainerAsync
  * XGameSaveDeleteContainerResult
  * XGameSaveCreateContainer
  * XGameSaveCloseContainer
  * XGameSaveGetContainerInfo
  * XGameSaveEnumerateContainerInfo
  * XGameSaveEnumerateContainerInfoByName
  * XGameSaveEnumerateBlobInfo
  * XGameSaveEnumerateBlobInfoByName
  * XGameSaveReadBlobData
  * XGameSaveReadBlobDataAsync
  * XGameSaveReadBlobDataResult
  * XGameSaveCreateUpdate
  * XGameSaveCloseUpdateHandle
  * XGameSaveSubmitBlobWrite
  * XGameSaveSubmitBlobDelete
  * XGameSaveSubmitUpdate
  * XGameSaveSubmitUpdateAsync
  * XGameSaveSubmitUpdateResult
* [XGameSaveFiles](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgamesavefiles/xgamesavefiles_members)
  * XGameSaveFilesGetFolderWithUiAsync
  * XGameSaveFilesGetFolderWithUiResult
  * XGameSaveFilesGetRemainingQuota
* [XGameStreaming](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgamestreaming/xgamestreaming_members)
  * XGameStreamingInitialize
  * XGameStreamingUninitialize
  * XGameStreamingIsStreaming
  * XGameStreamingGetClientCount
  * XGameStreamingGetClients
  * XGameStreamingGetConnectionState
  * XGameStreamingRegisterConnectionStateChanged
  * XGameStreamingUnregisterConnectionStateChanged
  * XGameStreamingHideTouchControls
  * XGameStreamingHideTouchControlsOnClient
  * XGameStreamingShowTouchControlLayout
  * XGameStreamingShowTouchControlLayoutOnClient
  * XGameStreamingRegisterClientPropertiesChanged
  * XGameStreamingUnregisterClientPropertiesChanged
  * XGameStreamingGetStreamPhysicalDimensions
  * XGameStreamingGetStreamAddedLatency
  * XGameStreamingGetServerLocationNameSize
  * XGameStreamingGetServerLocationName
  * XGameStreamingIsTouchInputEnabled
  * XGameStreamingGetLastFrameDisplayed
  * XGameStreamingUpdateTouchControlsState
  * XGameStreamingUpdateTouchControlsStateOnClient
  * XGameStreamingShowTouchControlsWithStateUpdate
  * XGameStreamingShowTouchControlsWithStateUpdateOnClient
  * XGameStreamingGetTouchBundleVersionNameSize
  * XGameStreamingGetTouchBundleVersion
  * XGameStreamingGetClientIPAddress
  * XGameStreamingGetSessionId
  * XGameStreamingGetDisplayDetails
  * XGameStreamingSetResolution
* [XGameUI](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgameui/xgameui_members)
  * XGameUIShowAchievementsAsync
  * XGameUIShowAchievementsResult
  * XGameUIShowMessageDialogAsync
  * XGameUIShowMessageDialogResult
  * XGameUIShowErrorDialogAsync
  * XGameUIShowErrorDialogResult
  * XGameUIShowTextEntryAsync
  * XGameUIShowTextEntryResultSize
  * XGameUIShowTextEntryResult
  * XGameUITextEntryClose
  * XGameUITextEntryGetExtents
  * XGameUITextEntryOpen
  * XGameUITextEntryGetState
  * XGameUITextEntryUpdatePositionHint
  * XGameUITextEntryUpdateVisibility
  * XGameUISetNotificationPositionHint
  * XGameUIShowSendGameInviteAsync
  * XGameUIShowSendGameInviteResult
  * XGameUIShowMultiplayerActivityGameInviteAsync
  * XGameUIShowMultiplayerActivityGameInviteResult
  * XGameUIShowWebAuthenticationAsync
  * XGameUIShowWebAuthenticationResult
  * XGameUIShowWebAuthenticationWithOptionsAsync
  * XGameUIShowWebAuthenticationResultSize
  * XGameUIShowPlayerProfileCardAsync
  * XGameUIShowPlayerProfileCardResult
  * XGameUIShowPlayerPickerAsync
  * XGameUIShowPlayerPickerResultCount
  * XGameUIShowPlayerPickerResult
* [XLauncher](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xlauncher/xlauncher_members)
  * XLaunchUri
* [XNetworking](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/networking/xnetworking/xnetworking_members)
  * XNetworkingGetConnectivityHint
  * XNetworkingQueryConfigurationSetting
  * XNetworkingQueryPreferredLocalUdpMultiplayerPort
  * XNetworkingQueryPreferredLocalUdpMultiplayerPortAsync
  * XNetworkingQueryPreferredLocalUdpMultiplayerPortAsyncResult
  * XNetworkingQuerySecurityInformationForUrlAsync
  * XNetworkingQuerySecurityInformationForUrlAsyncResultSize
  * XNetworkingQuerySecurityInformationForUrlAsyncResult
  * XNetworkingQuerySecurityInformationForUrlUtf16Async
  * XNetworkingQuerySecurityInformationForUrlUtf16AsyncResultSize
  * XNetworkingQuerySecurityInformationForUrlUtf16AsyncResult
  * XNetworkingQueryStatistics
  * XNetworkingRegisterConnectivityHintChanged
  * XNetworkingUnregisterConnectivityHintChanged
  * XNetworkingRegisterPreferredLocalUdpMultiplayerPortChanged
  * XNetworkingUnregisterPreferredLocalUdpMultiplayerPortChanged
  * XNetworkingVerifyServerCertificate
* [XPackage](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xpackage/xpackage_members)
  * XPackageGetCurrentProcessPackageIdentifier
  * XPackageIsPackagedProcess
  * XPackageGetUserLocale
  * XPackageEnumeratePackages
  * XPackageFindChunkAvailability
  * XPackageChangeChunkInstallOrder
  * XPackageInstallChunks
  * XPackageUninstallChunks
  * XPackageInstallChunksAsync
  * XPackageInstallChunksResult
  * XPackageRegisterPackageInstalled
  * XPackageUnregisterPackageInstalled
  * XPackageEnumerateFeatures
  * XPackageEnumerateChunkAvailability
  * XPackageMount
  * XPackageMountWithUiAsync
  * XPackageMountWithUiResult
  * XPackageGetMountPath
  * XPackageGetMountPathSize
  * XPackageCloseMountHandle
  * XPackageCreateInstallationMonitor
  * XPackageCloseInstallationMonitorHandle
  * XPackageGetInstallationProgress
  * XPackageUpdateInstallationMonitor
  * XPackageRegisterInstallationProgressChanged
  * XPackageUnregisterInstallationProgressChanged
  * XPackageEstimateDownloadSize
  * XPackageGetWriteStats
  * XPackageUninstallUWPInstance
  * XPackageUninstallPackage
* [XPersistentLocalStorage](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xpersistentlocalstorage/xpersistentlocalstorage_members)
  * XPersistentLocalStorageGetPathSize
  * XPersistentLocalStorageGetPath
  * XPersistentLocalStorageGetSpaceInfo
  * XPersistentLocalStoragePromptUserForSpaceAsync
  * XPersistentLocalStoragePromptUserForSpaceResult
* [XSpeechSynthesizer](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xspeechsynthesizer/xspeechsynthesizer_members)
  * XSpeechSynthesizerEnumerateInstalledVoices
  * XSpeechSynthesizerCreate
  * XSpeechSynthesizerCloseHandle
  * XSpeechSynthesizerSetDefaultVoice
  * XSpeechSynthesizerSetCustomVoice
  * XSpeechSynthesizerCreateStreamFromText
  * XSpeechSynthesizerCreateStreamFromSsml
  * XSpeechSynthesizerCloseStreamHandle
  * XSpeechSynthesizerGetStreamDataSize
  * XSpeechSynthesizerGetStreamData
* [XStore](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xstore/xstore_members)
  * XStoreCreateContext
  * XStoreCloseContextHandle
  * XStoreIsAvailabilityPurchasable
  * XStoreAcquireLicenseForPackageAsync
  * XStoreAcquireLicenseForPackageResult
  * XStoreCanAcquireLicenseForPackageAsync
  * XStoreCanAcquireLicenseForPackageResult
  * XStoreCanAcquireLicenseForStoreIdAsync
  * XStoreCanAcquireLicenseForStoreIdResult
  * XStoreCloseLicenseHandle
  * XStoreIsLicenseValid
  * XStoreQueryAddOnLicensesAsync
  * XStoreQueryAddOnLicensesResultCount
  * XStoreQueryAddOnLicensesResult
  * XStoreQueryGameLicenseAsync
  * XStoreQueryGameLicenseResult
  * XStoreQueryLicenseTokenAsync
  * XStoreQueryLicenseTokenResultSize
  * XStoreQueryLicenseTokenResult
  * XStoreRegisterGameLicenseChanged
  * XStoreUnregisterGameLicenseChanged
  * XStoreRegisterPackageLicenseLost
  * XStoreUnregisterGameLicenseChanged
  * XStoreUnregisterPackageLicenseLost
  * XStoreAcquireLicenseForDurablesAsync
  * XStoreQueryGameAndDlcPackageUpdatesAsync
  * XStoreQueryGameAndDlcPackageUpdatesResultCount
  * XStoreQueryGameAndDlcPackageUpdatesResult
  * XStoreDownloadAndInstallPackagesAsync
  * XStoreDownloadAndInstallPackagesResultCount
  * XStoreDownloadAndInstallPackagesResult
  * XStoreDownloadAndInstallPackageUpdatesAsync
  * XStoreDownloadAndInstallPackageUpdatesResult
  * XStoreDownloadPackageUpdatesAsync
  * XStoreDownloadPackageUpdatesResult
  * XStoreQueryPackageIdentifier
  * XStoreShowRedeemTokenUIAsync
  * XStoreShowRedeemTokenUIResult
  * XStoreShowRateAndReviewUIAsync
  * XStoreShowRateAndReviewUIResult
  * XStoreShowPurchaseUIAsync
  * XStoreShowPurchaseUIResult
  * XStoreQueryConsumableBalanceRemainingAsync
  * XStoreQueryConsumableBalanceRemainingResult
  * XStoreReportConsumableFulfillmentAsync
  * XStoreReportConsumableFulfillmentResult
  * XStoreGetUserCollectionsIdAsync
  * XStoreGetUserCollectionsIdResultSize
  * XStoreGetUserCollectionsIdResult
  * XStoreGetUserPurchaseIdAsync
  * XStoreGetUserPurchaseIdResultSize
  * XStoreGetUserPurchaseIdResult
  * XStoreQueryAssociatedProductsAsync
  * XStoreQueryAssociatedProductsResult
  * XStoreQueryEntitledProductsAsync
  * XStoreQueryEntitledProductsResult
  * XStoreQueryProductForCurrentGameAsync
  * XStoreQueryProductForCurrentGameResult
  * XStoreQueryProductForPackageAsync
  * XStoreQueryProductForPackageResult
  * XStoreQueryProductsAsync
  * XStoreQueryProductsResult
  * XStoreProductsQueryNextPageAsync
  * XStoreCloseProductsQueryHandle
  * XStoreAcquireLicenseForDurablesResult
  * XStoreEnumerateProductsQuery
  * XStoreProductsQueryHasMorePages
  * XStoreProductsQueryNextPageResult
  * XStoreShowAssociatedProductsUIAsync
  * XStoreShowAssociatedProductsUIResult
  * XStoreShowProductPageUIAsync
  * XStoreShowProductPageUIResult
* [XSystem](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xsystem/xsystem_members)
  * XSystemGetAnalyticsInfo
  * XSystemGetAppSpecificDeviceId
  * XSystemGetConsoleId
  * XSystemGetDeviceType
  * XSystemGetXboxLiveSandboxId
  * XSystemGetRuntimeInfo
  * XSystemIsHandleValid
  * XSystemHandleTrack
* [XTaskQueue](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xtaskqueue/xtaskqueue_members)
  * XTaskQueueCloseHandle
  * XTaskQueueCreate
  * XTaskQueueCreateComposite
  * XTaskQueueDispatch
  * XTaskQueueDuplicateHandle
  * XTaskQueueGetCurrentProcessTaskQueue
  * XTaskQueueGetPort
  * XTaskQueueRegisterMonitor
  * XTaskQueueRegisterWaiter
  * XTaskQueueSetCurrentProcessTaskQueue
  * XTaskQueueSubmitCallback
  * XTaskQueueSubmitDelayedCallback
  * XTaskQueueTerminate
  * XTaskQueueUnregisterMonitor
  * XTaskQueueUnregisterWaiter
* [XThread](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xthread/xthread_members)
  * XThreadIsTimeSensitive
  * XThreadSetTimeSensitive
  * XThreadAssertNotTimeSensitive
* [XUser](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xuser/xuser_members)
  * XUserDuplicateHandle
  * XUserCloseHandle
  * XUserCompare
  * XUserGetMaxUsers
  * XUserAddAsync
  * XUserAddResult
  * XUserAddByIdWithUiAsync
  * XUserAddByIdWithUiResult
  * XUserGetId
  * XUserFindUserById
  * XUserGetLocalId
  * XUserFindUserByLocalId
  * XUserGetIsGuest
  * XUserGetState
  * XUserGetGamertag
  * XUserGetGamerPictureAsync
  * XUserGetAgeGroup
  * XUserCheckPrivilege
  * XUserResolvePrivilegeWithUiAsync
  * XUserResolvePrivilegeWithUiResult
  * XUserGetTokenAndSignatureUtf16Async
  * XUserResolveIssueWithUiUtf16Async
  * XUserResolveIssueWithUiUtf16Result
  * XUserRegisterForChangeEvent
  * XUserUnregisterForChangeEvent
  * XUserCloseSignOutDeferralHandle
  * XUserFindControllerForUserWithUiAsync
  * XUserFindControllerForUserWithUiResult
  * XUserFindForDevice
  * XUserGetDefaultAudioEndpointUtf16
  * XUserGetGamerPictureResultSize
  * XUserGetGamerPictureResult
  * XUserGetSignOutDeferral
  * XUserGetTokenAndSignatureAsync
  * XUserGetTokenAndSignatureResultSize
  * XUserGetTokenAndSignatureResult
  * XUserGetTokenAndSignatureUtf16ResultSize
  * XUserGetTokenAndSignatureUtf16Result
  * XUserIsStoreUser
  * XUserRegisterForDefaultAudioEndpointUtf16Changed
  * XUserRegisterForDeviceAssociationChanged
  * XUserResolveIssueWithUiAsync
  * XUserResolveIssueWithUiResult
  * XUserUnregisterForDefaultAudioEndpointUtf16Changed
  * XUserUnregisterForDeviceAssociationChanged

## 托管包装器中包含的 XBOX 服务 API 列表

GDK Unity 包中的托管包装器包含以下 XBOX 服务 API。有关 XBOX 服务 API 的更多信息,参见 [XBOX Live API reference](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/gc-reference-live-toc)。

* [XblContext](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/xbox_live_context_c/xbox_live_context_c_members)
* [XblAchievements](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/achievements_c/achievements_c_members)
* [XblEvents](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/events_c/events_c_members)
* [XblLeaderboard](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/leaderboard_c/leaderboard_c_members)
* [XblPresence](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/presence_c/presence_c_members)
* [XblPrivacy](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/privacy_c/privacy_c_members)
* [XblSocialManager](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/social_manager_c/social_manager_c_members)
* [XblUserStatistics](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/user_statistics_c/user_statistics_c_members)
* [XblHttpCall](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/http_call_c/http_call_c_members)
* [XblGetErrorCondition](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/errors_c/errors_c_members)
* [XblMultiplayer](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/multiplayer_c/multiplayer_c_members)
* [XblMultiplayerManager](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/multiplayer_manager_c/multiplayer_manager_c_members)
* [XblMultiplayerActivity](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/multiplayer_activity_c/multiplayer_activity_c_members)
* [XblMatchmaking](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/matchmaking_c/matchmaking_c_members)
* [XblProfile](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/profile_c/profile_c_members)
* [XblRealTimeActivity](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/real_time_activity_c/real_time_activity_c_members)
* [XblTitleManagedStats](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/title_managed_statistics_c/title_managed_statistics_c_members)
* [XblSocial](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/social_c/social_c_members)
* [XblTitleStorage](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/title_storage_c/title_storage_c_members)
* [XblUserStatics](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/user_statistics_c/user_statistics_c_members)

## 参考 API 文档

* [XStore(API 内容)](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xstore/xstore_members)
* [XPackage(API 内容)](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xpackage/xpackage_members)

## 参见

[面向 PC 开发的 Unity 入门](/build/gdk-and-engines/unity/unity)


## Related topics

- [在 Unity 中使用 GDK](/zh-CN/build/gdk-and-engines/unity/unity.md)
- [在 Unity、Unreal 及其他引擎中使用 GDK](/zh-CN/build/gdk-and-engines/gdk-and-engines.md)
- [XThread](/zh-CN/reference/system/xthread/xthread_members.md)
- [XSystem](/zh-CN/reference/system/xsystem/xsystem_members.md)
- [XPersistentLocalStorage](/zh-CN/reference/system/xpersistentlocalstorage/xpersistentlocalstorage_members.md)
