5
头图

总览

本文以「人类跌落梦境」游戏为例,讲解如何在游戏场景下使用 LeanCloud IM SDK。

LeanCloud 提供的即时通信 SDK 可以应用在多种场景,比如在线客服,直播间弹幕,工作群聊软件等,本文主要介绍在游戏场景中如何快速实现好友聊天功能。在游戏开发中,即时聊天的需求很常见,尤其在多人对战类型的游戏中,即时聊天功能更是必不可少

LeanCloud IM SDK 可以满足游戏内几乎所有的聊天场景,比如游戏大厅的开放聊天室,组队的房间内聊天,游戏中的快捷聊天与好友私信。

除了支持发送基础的文字、图片、音视频消息以外,还支持自定义消息类型,可以实现如赠送道具、交换皮肤等扩展消息类型。

在群聊和开放聊天室等业务场景里,我们也提供了敏感内容过滤、成员角色管理(禁言、踢人、加人、拉黑、更新他人权限)和黑名单的机制,以满足产品运营管理的多样需求。

SDK 的选择上,LeanCloud 提供了 Android(Java)、iOS(Objective-C/Swift 两个版本)、Unity、微信小游戏等平台的 SDK 供选择。其他游戏平台,如 Cocos Creator、Egret 引擎等也都支持。

开始游戏

首先我们来分析下「人类跌落梦境」游戏中涉及到哪些即时通信场景,我将其分为以下几种:

  • 世界频道(综合聊天室)
  • 好友私信
  • 组队聊天(游戏中的聊天)

其他游戏还可能有

  • 战队聊天室(战队、小队)
  • 订阅频道消息

而 LeanCloud 设计了四种对话类型:

  • 普通对话
  • 聊天室
  • 系统对话
  • 临时对话

下面我们会依次介绍这些场景该如何选择对话类型以及注意事项。

一、世界频道(综合聊天室)

如上图,在「综合」聊天中,有大量用户在一个群里互动,有以下特点:

  • 群聊人数非常多,群人员上限无限大
  • 在线用户均可参与聊天,无需申请加入群聊,随时加入,随时退出
  • 无固定成员列表,成员之间可能是无好友关系的陌生人
  • 离线后不需要收到消息推送

针对这种场景 LeanCloud 提供了 聊天室 对话类型。

聊天室完美契合这种游戏场景,等于量身定制,不需要过多思考,可以拿来即用。

小 tips:

  1. 虽然「聊天室」原则上不限制成员数量,但对于终端用户而言即表现为过量消息不断刷屏,反而影响用户体验。建议每个聊天室的上限人数控制在 5000 人左右。开发者可以考虑从应用层面将大聊天室拆分成多个较小的聊天室。
  2. 聊天室因为没有成员列表,所以创建的时候指定 members 是没有意义的。
  3. 聊天室有消息优先级的概念,当某个连接因为消息过多出现阻塞写入缓慢的情况下,可以考虑指定消息优先级。低优先级消息在堵塞时会被丢弃,高优先级消息则排队等待下发。默认情况下消息都是中优先级。

「聊天室」类似的使用场景,还有直播中的弹幕。与综合聊天室一样,弹幕也是只关注在线成员数,而不是具体成员列表。所有参与者进入聊天界面就算加入,关闭界面就算退出,不存在邀请成员加入。

二、好友私信

如上图,在「好友」聊天中,可以从好友列表中点击任意好友头像发起聊天,好友聊天有以下特点:

  • 群聊人数只有俩人,属于私聊
  • 聊天记录持久化保存,每次发起聊天需要加载历史聊天记录
  • 两个好友之间的对话是全局唯一的,再次发起聊天不会重新创建新的聊天对话。

好友对话是即时通信中最常见的一种的场景。在即时通信中对应 普通对话中--单聊/私聊 的对话类型。

普通对话和微信聊天的功能类似,普通对话分为单聊与群聊,在 IM SDK 中单聊与群聊的代码层面是无差别的,只不过单聊的成员(members)人数为2,群聊成员人数则大于 2。

普通对话与「聊天室」不同之处:

  1. 有人数限制,一个群聊中最大支持 500 个成员
  2. 可查成员列表、成员在线状态,关注成员信息
  3. 可查历史消息记录
  4. 允许增加、删除成员
  5. 成员离线状态下,可以收到消息推送通知,且上线后会进行消息同步

IM SDK 自动开启离线消息推送服务(前提是正确接入各平台需要的推送证书,推送配置正确)。如果不需要离线推送,可以在应用设置>安全中心中关闭「推送服务」的开关。

三、战队聊天室

其他游戏还有战队聊天室的场景,这种战队内聊天(或小队内聊天)与好友特征相同,聊天记录需要持久存储,在 IM SDK 中对应在即时通信中对应 普通对话中--群聊 的对话类型。

群聊与单聊除了成员人数不同以外,没有任何区别。

四、组队聊天(游戏中的聊天)

游戏中给队友发消息

如图所示,这种组队聊天有以下特点:

  • 不需要保存聊天记录,不需要查询历史消息
  • 玩家若突然离线,无需发离线消息推送
  • 「房间」具有一次性,游戏结束「房间」即消失
  • 聊天参与的人数较少(最多 8 人组队)

针对这种场景 LeanCloud 提供了 临时对话 这一对话类型,完全满足以上所有特征,也是开箱即用。

临时对话的信息不会被持久化保存,也即无法查询历史对话与聊天记录,聊天人数上线为 10 个。

临时对话在使用上与普通对话类似,其最大特点是较短的有效期(不会被保存到 _Conversation 表中),优势是可以 减少对话的持久化存储在服务端占用的存储空间,从而降低开发者的使用成本。

这种对话场景,常见于一些网页的弹窗客服。

小 tip:

  • createConversation 创建普通对话,用 createChatRoom 创建聊天室,用 createTemporaryConversation 创建临时对话。

五、订阅频道消息

某些游戏中,有用户主动订阅频道消息的场景,这种消息类型,在 IM SDK 中对应 系统对话(也叫服务号)。服务号的流程是:

利用系统对话可以发送广播消息给全部用户,可以参考 全局广播文档

系统对话可以用于实现机器人自动回复、公众号、服务账号等功能。

开始聊天

第一步:安装 SDK

参考:各平台 SDK 安装指南

第二步:配置独立 API 域名

参考:域名绑定指南

第三步:从简单的单聊、群聊、收发图文消息开始

  1. 一对一单聊
  2. 多人群聊
  3. 聊天记录查询

第四步:探索更多功能

  1. 消息收发的更多方式,离线推送与消息同步,多设备登录
  2. 安全与签名、黑名单和权限管理、玩转聊天室和临时对话
  3. 详解消息 hook 与系统对话,打造自己的聊天机器人

其他参考文档

即时通讯服务总览
LeanCloud 即时通信使用指南
系统对话的使用
消息推送服务总览

小结

除了游戏场景以外,IM SDK 也适用于大多数即时通信场景,只要是对话聊天的需求,可以毫不犹豫的选择 LeanCloud SDK,省心省力省成本,还能大大缩短开发周期。

Photo by Adam Solomon on Unsplash


LeanCloud
5k 声望8.4k 粉丝

LeanCloud 提供包括数据存储、文件存储、消息推送、即时通讯、可自动扩容的云引擎容器和大数据分析工具在内的后端服务,全面涵盖互联网产品开发的需求。