如何在游戏中快速集成聊天功能

520 阅读7分钟

总览

本文以「人类跌落梦境」游戏为例,讲解如何在游戏场景下使用 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