生成 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 自动记录大量事件,但有时你需要非常特定于游戏的事件。
自定义事件概念允许你发布具有任意类型和名称的事件。
与自动事件类似,自定义事件是完全通过实时分析工具加以体现的。 与自动事件不同,需要一些自定义代码才能发布自定义事件。
可通过实体分类自定义事件。 自定义事件可绑定到玩家、角色或游戏。 使用以下两个字段指定事件实体参考:
- EntityType
- EntityID
相关 API 调用
示例:发布自己的自定义事件
你想要收集玩家打开不同宝箱的信息。 除了标准事件信息,你想要记录 ChestType
和 LevelID
。
很遗憾,PlayFab 不提供相应的现成自动事件。 使用自定义玩家事件可解决这一问题。
先决条件
玩家已登录。 在代码中,有一个回调 OnChestOpen
、LevelID
和 ChestType
已传递到该回调中。
解决方案
执行后,以下代码将发布你的自定义玩家事件。
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()));
}
- 该方法接收
ChestType
和LevelId
。 - 使用 WritePlayerEvent API 调用发布绑定到玩家的自定义事件。
- 提供特定于事件和需求的正文。 在本案例中,我们提供
ChestType
和LevelId
字段。 - 提供用于识别自定义事件的事件名称。 在本案例中,我们使用
player_chest_opened
事件类型名称。