/ 开发笔记

#Facebook Instant Game# 什么时候会收到messaging_game_plays 消息?

Facebook Instant Game与微信小游戏最大的不同点之一,是Facebook推荐使用Bot来提升用户的留存。

Facebook的各种应用都可以使用Bot来进行自动化,通过监听不同的消息(Event),做相应的处理。

其中,messaging_game_plays 消息是Instant Game独有的。这个消息什么时候发出呢?

消息时机

参考
https://developers.facebook.com/docs/messenger-platform/reference/webhook-events/messaging_game_plays/

Snip20181213_18

官方解释

This callback occurs after a person played a round of Instant Games.

翻译:玩家每玩完一轮游戏时发出。

那么,a round (一轮)又具体是指什么呢?

官方另一处说法

https://developers.facebook.com/docs/games/instant-games/getting-started/bot-setup
Once your bot is correctly configured, your server application will start receiving messaging_game_plays web hooks every time a player closes the Instant Game.

这个比较清楚了,当玩家关闭游戏页面时,会发出这个消息。

实际测试的时候,也确实在关闭页面时收到了消息。

测试的消息示例:

{"object":"page",
    "entry":[
        {
            "id":"1009260959273885",
            "time":1544628852444,
            "messaging":[
                {
                 "recipient":{"id":"1009260959273885"},
                 "timestamp":1544628852444,
                 "sender":{"id":"1605880706178143"},
                 "game_play":
                     {
                         "game_id":"360189154536649",
                         "payload":"{\\"msg\\":\\"game start\\"}",
                         "player_id":"2087169211340109"
                     }
                 }
             ]
         }
     ]
 }

其中,payload是我在游戏中通过 FBInstant.setSessionData 设置的。

Snip20181213_20

https://developers.facebook.com/docs/games/instant-games/sdk/fbinstant6.2

Snip20181213_19

消息格式

参考
https://developers.facebook.com/docs/messenger-platform/reference/webhook-events/messaging_game_plays/

Snip20181213_21

其中值得注意的几个值

  1. context_type
    本次游戏的场景,分为:
    SOLO - 单人游戏
    THREAD - ??
    GROUP - 群组内游戏
  2. score
    玩家在该游戏场景中的排行榜分数
  3. payload
    可以通过FBInstant.setSessionData来传递的数据

其他

THREAD和GROUP环境下的游戏,还在摸索中,待续。

补充

找到了官方对于Context类型的描述:

The type of the current game context.
POST - A facebook post.  (应该是对应到facebook 的文章吧)
THREAD - A messenger thread. (messenger的聊天窗)
GROUP - A facebook group. (Facebook的群)
SOLO - Default context, where the player is the only participant. (默认,只有当前玩家)