总览
本文以「人类跌落梦境」游戏为例,讲解如何在游戏场景下使用 LeanCloud IM SDK。
LeanCloud 提供的即时通信 SDK 可以应用在多种场景,比如在线客服,直播间弹幕,工作群聊软件等,本文主要介绍在游戏场景中如何快速实现好友聊天功能。在游戏开发中,即时聊天的需求很常见,尤其在多人对战类型的游戏中,即时聊天功能更是必不可少。
LeanCloud IM SDK 可以满足游戏内几乎所有的聊天场景,比如游戏大厅的开放聊天室,组队的房间内聊天,游戏中的快捷聊天与好友私信。
除了支持发送基础的文字、图片、音视频消息以外,还支持自定义消息类型,可以实现如赠送道具、交换皮肤等扩展消息类型。
在群聊和开放聊天室等业务场景里,我们也提供了敏感内容过滤、成员角色管理(禁言、踢人、加人、拉黑、更新他人权限)和黑名单的机制,以满足产品运营管理的多样需求。
SDK 的选择上,LeanCloud 提供了 Android(Java)、iOS(Objective-C/Swift 两个版本)、Unity、微信小游戏等平台的 SDK 供选择。其他游戏平台,如 Cocos Creator、Egret 引擎等也都支持。
开始游戏
首先我们来分析下「人类跌落梦境」游戏中涉及到哪些即时通信场景,我将其分为以下几种:
- 世界频道(综合聊天室)
- 好友私信
- 组队聊天(游戏中的聊天)
其他游戏还可能有
- 战队聊天室(战队、小队)
- 订阅频道消息
而 LeanCloud 设计了四种对话类型:
- 普通对话
- 聊天室
- 系统对话
- 临时对话
下面我们会依次介绍这些场景该如何选择对话类型以及注意事项。
一、世界频道(综合聊天室)
如上图,在「综合」聊天中,有大量用户在一个群里互动,有以下特点:
- 群聊人数非常多,群人员上限无限大
- 在线用户均可参与聊天,无需申请加入群聊,随时加入,随时退出
- 无固定成员列表,成员之间可能是无好友关系的陌生人
- 离线后不需要收到消息推送
针对这种场景 LeanCloud 提供了 聊天室 对话类型。
聊天室完美契合这种游戏场景,等于量身定制,不需要过多思考,可以拿来即用。
小 tips:
- 虽然「聊天室」原则上不限制成员数量,但对于终端用户而言即表现为过量消息不断刷屏,反而影响用户体验。建议每个聊天室的上限人数控制在 5000 人左右。开发者可以考虑从应用层面将大聊天室拆分成多个较小的聊天室。
- 聊天室因为没有成员列表,所以创建的时候指定 members 是没有意义的。
- 聊天室有消息优先级的概念,当某个连接因为消息过多出现阻塞写入缓慢的情况下,可以考虑指定消息优先级。低优先级消息在堵塞时会被丢弃,高优先级消息则排队等待下发。默认情况下消息都是中优先级。
「聊天室」类似的使用场景,还有直播中的弹幕。与综合聊天室一样,弹幕也是只关注在线成员数,而不是具体成员列表。所有参与者进入聊天界面就算加入,关闭界面就算退出,不存在邀请成员加入。
二、好友私信
如上图,在「好友」聊天中,可以从好友列表中点击任意好友头像发起聊天,好友聊天有以下特点:
- 群聊人数只有俩人,属于私聊
- 聊天记录持久化保存,每次发起聊天需要加载历史聊天记录
- 两个好友之间的对话是全局唯一的,再次发起聊天不会重新创建新的聊天对话。
好友对话是即时通信中最常见的一种的场景。在即时通信中对应 普通对话中--单聊/私聊 的对话类型。
普通对话和微信聊天的功能类似,普通对话分为单聊与群聊,在 IM SDK 中单聊与群聊的代码层面是无差别的,只不过单聊的成员(members)人数为2,群聊成员人数则大于 2。
普通对话与「聊天室」不同之处:
- 有人数限制,一个群聊中最大支持 500 个成员
- 可查成员列表、成员在线状态,关注成员信息
- 可查历史消息记录
- 允许增加、删除成员
- 成员离线状态下,可以收到消息推送通知,且上线后会进行消息同步
IM SDK 自动开启离线消息推送服务(前提是正确接入各平台需要的推送证书,推送配置正确)。如果不需要离线推送,可以在应用设置>安全中心中关闭「推送服务」的开关。
三、战队聊天室
其他游戏还有战队聊天室的场景,这种战队内聊天(或小队内聊天)与好友特征相同,聊天记录需要持久存储,在 IM SDK 中对应在即时通信中对应 普通对话中--群聊 的对话类型。
群聊与单聊除了成员人数不同以外,没有任何区别。
四、组队聊天(游戏中的聊天)
游戏中给队友发消息
如图所示,这种组队聊天有以下特点:
- 不需要保存聊天记录,不需要查询历史消息
- 玩家若突然离线,无需发离线消息推送
- 「房间」具有一次性,游戏结束「房间」即消失
- 聊天参与的人数较少(最多 8 人组队)
针对这种场景 LeanCloud 提供了 临时对话 这一对话类型,完全满足以上所有特征,也是开箱即用。
临时对话的信息不会被持久化保存,也即无法查询历史对话与聊天记录,聊天人数上线为 10 个。
临时对话在使用上与普通对话类似,其最大特点是较短的有效期(不会被保存到 _Conversation 表中),优势是可以 减少对话的持久化存储在服务端占用的存储空间,从而降低开发者的使用成本。
这种对话场景,常见于一些网页的弹窗客服。
小 tip:
- 用
createConversation
创建普通对话,用createChatRoom
创建聊天室,用createTemporaryConversation
创建临时对话。
五、订阅频道消息
某些游戏中,有用户主动订阅频道消息的场景,这种消息类型,在 IM SDK 中对应 系统对话(也叫服务号)。服务号的流程是:
利用系统对话可以发送广播消息给全部用户,可以参考 全局广播文档。
系统对话可以用于实现机器人自动回复、公众号、服务账号等功能。
开始聊天
第一步:安装 SDK
参考:各平台 SDK 安装指南
第二步:配置独立 API 域名
参考:域名绑定指南
第三步:从简单的单聊、群聊、收发图文消息开始
第四步:探索更多功能
其他参考文档
即时通讯服务总览
LeanCloud 即时通信使用指南
系统对话的使用
消息推送服务总览
小结
除了游戏场景以外,IM SDK 也适用于大多数即时通信场景,只要是对话聊天的需求,可以毫不犹豫的选择 LeanCloud SDK,省心省力省成本,还能大大缩短开发周期。
Photo by Adam Solomon on Unsplash