> ## 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 服务进行编程

> 扁平 C 代码示例展示了如何向 XBOX 实时活动 (RTA) 服务注册和注销 XSAPI 处理程序以接收玩家统计数据更改。

本主题演示如何使用以下扁平 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 服务获取统计数据更改事件

您可以在[合作伙伴中心](https://partner.microsoft.com/dashboard)中定义统计数据并为 RTA 配置它们。有关详细信息,请参阅以下内容:

* [在合作伙伴中心中配置游戏管理的精选统计数据和排行榜](/services/xbox-services/player-data/stats-leaderboards/title-managed/config/live-tm-leaderboards-portal)

* [注册玩家统计数据更改通知](/services/xbox-services/fundamentals/rta/concepts/live-register-for-stat-notifications)

<Note>如果您是基于事件的统计数据开发者,请联系您的开发者客户经理 (DAM) 以获取关于在[合作伙伴中心](https://partner.microsoft.com/dashboard)中门户配置基于事件的统计数据的相关信息。有关详细信息,请参阅[在合作伙伴中心中配置 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 用于多人游戏会话,并且断开连接达 30 秒,则多人游戏会话目录 (MPSD) 会检测到 RTA 会话已关闭,并将玩家从会话中移除。XSAPI 随后会自动重新建立 RTA 连接。但是,在重新建立 RTA 订阅后,重写 MPSD 会话是游戏的职责。</Info>

## 另请参阅

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

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

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


## Related topics

- [实时活动 (RTA) 服务示例代码](/zh-CN/services/xbox-services/fundamentals/rta/how-to/live-rta-howto-nav.md)
- [操作指南](/zh-CN/services/xbox-services/fundamentals/rta/how-to/index.md)
- [对 XBOX 服务的服务调用](/zh-CN/services/xbox-services/fundamentals/s2s-auth-calls/s2s-calls/live-s2s-calls-nav.md)
- [使用 Microsoft Store API 对你的服务进行身份验证](/zh-CN/publishing/xstore-commerce/xstore-authenticating-service.md)
- [RTA 服务的最佳做法](/zh-CN/services/xbox-services/fundamentals/rta/concepts/live-rta-best-practices.md)
