生成 PlayStream 事件

本教程概述 PlayFab 中的自动和自定义 PlayStream 事件。

自动事件概述

顾名思义,自动事件是在正常 API 调用时自动发生的事件。 大多数现有 API 方法都会生成 PlayStream 事件。

但有时需要捕获非常特定于游戏但不是 PlayFab 即时提供的事件。

为此,可以考虑使用自定义事件(如下一节自定义事件概述所述)。

示例

如果电子邮件和密码对有效,则以下 API 调用将使用电子邮件和密码让玩家登录。

PlayFabClientAPI.LoginWithEmailAddress(new LoginWithEmailAddressRequest() {
    Email = "my@email.com",
    Password = "qwerty"
},
result=> Debug.Log(result.PlayFabId),
error=> Debug.LogError(error.GenerateErrorReport()));

副作用是,PlayFab 将记录 player_logged_in 事件。

自定义事件概述

尽管 PlayFab 自动记录大量事件,但有时你需要非常特定于游戏的事件。

自定义事件概念允许你发布具有任意类型和名称的事件。

与自动事件类似,自定义事件是完全通过实时分析工具加以体现的。 与自动事件不同,需要一些自定义代码才能发布自定义事件。

可通过实体分类自定义事件。 自定义事件可绑定到玩家、角色或游戏。 使用以下两个字段指定事件实体参考:

  1. EntityType
  2. EntityID

相关 API 调用

示例:发布自己的自定义事件

你想要收集玩家打开不同宝箱的信息。 除了标准事件信息,你想要记录 ChestTypeLevelID

很遗憾,PlayFab 不提供相应的现成自动事件。 使用自定义玩家事件可解决这一问题。

先决条件

玩家已登录。 在代码中,有一个回调 OnChestOpenLevelIDChestType 已传递到该回调中。

解决方案

执行后,以下代码将发布你的自定义玩家事件。

private void OnChestOpened(string chestType, int levelId) {
    PlayFabClientAPI.WritePlayerEvent(new WriteClientPlayerEventRequest() {
        Body = new Dictionary<string, object>() {
            { "ChestType", chestType },
            { "LevelId", levelId }
        },
        EventName = "player_chest_opened"
    },
    result => Debug.Log("Success"),
    error => Debug.LogError(error.GenerateErrorReport()));
}
  1. 该方法接收 ChestTypeLevelId
  2. 使用 WritePlayerEvent API 调用发布绑定到玩家的自定义事件。
  3. 提供特定于事件和需求的正文。 在本案例中,我们提供 ChestTypeLevelId 字段。
  4. 提供用于识别自定义事件的事件名称。 在本案例中,我们使用 player_chest_opened 事件类型名称。