> ## 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.

# 對 RTA 服務進行程式設計

> 示範如何向 XBOX 即時活動 (RTA) 服務註冊和取消註冊 XSAPI 處理常式以接收玩家統計資料變更的平面 C 程式碼範例。

本主題使用下列平面 C 程式碼範例，示範如何呼叫即時活動 (RTA) 服務。

* [註冊處理常式以從 RTA 服務取得統計資料變更事件](#registering-a-handler-to-get-statistic-changes-events-from-the-Real-Time-Activity-service)
* [從 RTA 服務取消註冊](#unregistering-from-the-Real-Time-Activity-service)

<a id="registering-a-handler-to-get-statistic-changes-events-from-the-Real-Time-Activity-service" />

## 註冊處理常式以從 RTA 服務取得統計資料變更事件

您可以在 [Partner Center](https://partner.microsoft.com/dashboard) 中定義統計資料並為 RTA 設定這些統計資料。如需詳細資訊，請參閱下列內容：

* [在 Partner Center 中設定遊戲管理的主打統計資料和排行榜](/zh-TW/services/xbox-services/player-data/stats-leaderboards/title-managed/config/live-tm-leaderboards-portal)

* [註冊玩家統計資料變更通知](/zh-TW/services/xbox-services/fundamentals/rta/concepts/live-register-for-stat-notifications)

<Note>如果您是以事件為基礎之統計資料的開發人員，請連絡您的開發人員客戶經理 (DAM)，以取得在 [Partner Center](https://partner.microsoft.com/dashboard) 中以事件為基礎之統計資料的入口網站設定相關資訊。如需詳細資訊，請參閱[在 Partner Center 中設定 XBOX Live 統計資料和統計資料規則)](https://developer.microsoft.com/en-us/games/xbox/partner/windows-configure-stats)。</Note>

在您的遊戲中，您需要設定要讓 RTA 追蹤的統計資料。每當其中一個設定的統計資料變更時，就會叫用遊戲處理常式，如下列程式碼範例所示。

#### 平面 C

```cpp theme={null}
// Add a statistic changed handler.
void* context{ nullptr };
XblFunctionContext statisticChangedFunctionContext = XblUserStatisticsAddStatisticChangedHandler(
    xboxLiveContext,
    [](XblStatisticChangeEventArgs eventArgs, void* context)
    {
        // Handle statistic change. 
        LogToScreen("Statistic changed callback: stat changed (%s = %s)",
            eventArgs.latestStatistic.statisticName,
            eventArgs.latestStatistic.value);
    },
    context
    );

// Configure the statistics that you want RTA to track. Titles only receive real-time updates for tracked statistics.
// Note that you can update the set of tracked statistics independently from the handlers.
std::vector<const char*> statisticNames{ "TotalPuzzlesSolved" };
HRESULT hr = XblUserStatisticsTrackStatistics(
    xblContextHandle,
    &xboxUserId,
    1,
    scid,
    statisticNames.data(),
    statisticNames.size()
);
```

<a id="unregistering-from-the-Real-Time-Activity-service" />

## 從 RTA 服務取消註冊

當不再需要特定統計資料 (或一組統計資料) 的更新時，您的遊戲只需停止追蹤該統計資料即可。
如果完全不再需要統計資料更新，移除所有已註冊的處理常式會自動移除相關的 RTA 訂閱，如下列程式碼範例所示。

#### 平面 C

```cpp theme={null}
// Stop receiving updates for a particular statistic.   
std::vector<const char*> statisticNames{ "TotalPuzzlesSolved" }; 
HRESULT hr = XblUserStatisticsStopTrackingStatistics(
    xblContextHandle,
    &xboxUserId,
    1,
    scid,
    statisticNames.data(),
    statisticNames.size()
);

// Alternatively, stop receiving updates for statistics changes altogether.
XblUserStatisticsRemoveStatisticChangedHandler(
    xblContextHandle,
    statisticChangedFunctionContext
);
```

<Info>如果用戶端將 RTA 用於多人遊戲工作階段，並中斷連線三十秒，多人遊戲工作階段目錄 (MPSD) 會偵測到 RTA 工作階段已關閉，並將玩家從工作階段中移除。XSAPI 接著會自動重新建立 RTA 連線。不過，在重新建立 RTA 訂閱之後，重寫其 MPSD 工作階段是遊戲的責任。</Info>

## 另請參閱

[XblStatisticChangeEventArgs](/zh-TW/reference/live/xsapi-c/user_statistics_c/structs/xblstatisticchangeeventargs)

[XblUserStatisticsAddStatisticChangedHandler](/zh-TW/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsaddstatisticchangedhandler)

[XblUserStatisticsRemoveStatisticChangedHandler](/zh-TW/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsremovestatisticchangedhandler)


## Related topics

- [即時活動 (RTA) 服務範例程式碼](/zh-TW/services/xbox-services/fundamentals/rta/how-to/live-rta-howto-nav.md)
- [操作說明](/zh-TW/services/xbox-services/fundamentals/rta/how-to/index.md)
- [對 XBOX 服務的服務呼叫](/zh-TW/services/xbox-services/fundamentals/s2s-auth-calls/s2s-calls/live-s2s-calls-nav.md)
- [非同步程式設計的設計目標與改進](/zh-TW/build/core-features/common/async/async-whitepaper.md)
- [如何使用 XBOX 服務 API (XSAPI)](/zh-TW/services/xbox-services/fundamentals/xbox-services-api/live-gs-xbl-apis.md)
