游戏中的社交聊天

云上曲率IM(即时通讯)服务目前广泛应用于手机游戏行业,针对不同类型手游提供场景化服务,降低手游开发者的非游戏业务开发难度,快速打造游戏中的聊天功能。

  • 支持大型无上限的世界频道、联盟/公会/小组/小队频道、私聊频道,覆盖不同类型手机游戏的聊天场景需求。
  • 为玩家提供全球化的交流环境,随时随地翻译文本,交流无障碍。
  • 为玩家提供实时音频通话功能,满足游戏玩家自由沟通的需求,提高游戏玩家的参与热情。
  • 为游戏审核人员提供后台玩家发言审核服务,净化游戏环境,降低游戏业务在审核服务的成本。

注意:本文中的方法名采用 Unity平台语言。您可根据需要,选用我们提供的其他语言的IM SDK。

频道

频道 是游戏中用户产生交流的唯一场景,在某些类型游戏中,通过不同的频道,游戏玩家互相交流游戏心得、组织团队战斗、发表游戏信息,是游戏中重要的功能。

频道类型

云上曲率IM SDK提供的 GroupRoom相关接口,满足游戏中类型频道的使用。

世界频道

世界频道是每位游戏玩家进入游戏后,默认进入的频道。这个频道涵盖当前服务器的所有在线玩家。

  • 当玩家上线后,会接收到该频道的所有消息,也可以拉取世界频道的历史消息。
  • 玩家下线或离线后,不会接收到世界频道的离线消息推送。

开发者可以通过服务端的“拉入房间接口pullIntoRoom”,将每一个登录的玩家登录后拉进世界频道。

联盟/公会

联盟/公会是当游戏玩家达到一定级别时,可以选择加入的游戏组织。镜像于现实社会的联盟/公会,游戏中的联盟/公会同样是一群有相同游戏目标的玩家的集合,联盟/公会和玩家是强关联的关系,通常使用 “群组 Group”相关接口实现:

  • 当玩家下线后,会接收到联盟/公会的离线消息推送。
  • 当玩家上线后,会自动接收到该频道的消息。

一般来说,游戏中的联盟/公会的建立,是通过玩家达到游戏中某些特定条件才可以申请建立。GM(游戏管理员)审批之后,通过服务端创建联盟/公会,并设定玩家的角色。

  • 联盟/公会的加入:玩家使用“申请加入群组 JoinGroup”加入联盟/公会,联盟/公会成员使用“邀请加入群组 InviteIntoGroup ”邀请其他玩家加入联盟/公会
  • 联盟/公会的退出:使用“离开群组 LeaveGroup”离开所在的联盟/公会
  • 联盟/公会的解散:使用“解散群组 DismissGroup”解散所在的联盟/公会
  • 联盟/公会成员:使用“查看成员列表 GetGroupMembers”、“查看成员数量 GetGroupMemberCount”查看联盟/公会成员信息,使用 “移除成员 RemoveGroupMembers”将联盟/公会成员踢出

注意:查看成员个人信息时,需要配合“查看用户信息 GetUserInfos”共同使用。

  • 联盟/公会管理员:使用“新增管理员 AddGroupManagers”、“取消管理员 RemoveGroupManagers”变更联盟/公会管理员,使用“转让群主 TransferGroup”将联盟长/公会长的角色转让
临时组队/单局小队

当游戏需要玩家临时组建队伍达成游戏目标,或进入单据游戏自动组成小队(MOBA对战类型游戏)时,可以通过 “房间Room”类接口实现这些场景。

如果是玩家自行组队,可以使用:

  • 加入小队:使用“加入房间 JoinRoom”创建小队,小队成员使用“邀请加入房间 InviteIntoRoom ”邀请玩家加入小队
  • 离开小队:使用“退出房间 LeaveRoom”离开所在小队
  • 查看小队人员:使用“查看成员列表 GetRoomMembers”、“查看成员数量 GetRoomMemberCount”查看小队成员信息,使用 “移除成员 RemoveRoomMembers”将小队成员踢出

注意:由于游戏中需要引入审核机制,因此云上IM SDK不提供客户端主动创建房间的接口,而是通过服务端进行创建。因此需要开发者自行将创建房间的操作通过服务端来实现。

如果是游戏自动组队,可以使用:

  • 离开小队:使用“退出房间 LeaveRoom”离开所在小队
  • 查看小队成员:使用“查看成员列表 GetRoomMembers”、“查看成员数量 GetRoomMemberCount”查看小队成员信息

注意:查看成员个人信息时,需要配合“查看用户信息 GetUserInfos”共同使用。

好友小队

游戏玩家可以在游戏中与好友组成固定队伍,共同达成游戏目标。这种场景可以通过 “群组 Group”类接口实现。 当形成好友小队时:

  • 玩家下线后,会接收到好有小队离线消息推送。
  • 玩家上线后,会自动接收到好友小队的消息。

在好友小队中,发起组队的玩家自动为小队队长(群主),具有群主的相关权限。

注意:由于游戏中需要引入审核机制,因此云上IM SDK不提供客户端主动创建群组的接口,而是通过服务端进行创建。因此需要开发者自行将创建群组的操作通过服务端来实现。

  • 小队的加入:玩家使用“申请加入群组 JoinGroup”加入小队,小队成员可以使用“邀请加入群组 InviteIntoGroup ”邀请其他玩家加入小队
  • 小队的退出:使用“离开群组 LeaveGroup”离开所在的小队
  • 小队的解散:使用“解散群组 DismissGroup”解散所在的小队
  • 小队成员:使用“查看成员列表 GetGroupMembers”、“查看成员数量 GetGroupMemberCount”查看小队成员信息,使用 “移除成员 RemoveGroupMembers”将小队成员踢出

注意:查看成员个人信息时,需要配合“查看用户信息 GetUserInfos”共同使用。

  • 小队管理员:使用“新增管理员 AddGroupManagers”、“取消管理员 RemoveGroupManagers”变更小队管理员,使用“转让群主 TransferGroup”将小队队长的角色转让
私聊

游戏玩家之间可以在游戏中发起单对单的私聊,开发者可以在云上控制台中设置游戏是否允许陌生人聊天。

频道资料

频道资料是指单个频道维度的属性,包括名称、简介、频道所有者、自定义字段等。通常,在加入频道前,游戏玩家通过看看频道资料,来决定是否加入。 频道资料包括:

参数 类型 说明
ID long 频道的ID:GroupId或RoomId
Name string 频道的名称
PortraitUrl string 频道头像URL
Profile string 频道简介
attrs string 自定义业务信息
OwnerUId long 频道所有者ID:群主ID或房主ID
ManagerUids long 频道管理员ID
ApplyGrant - 频道申请加入权限:自由加入;需要频道所有者或管理员审核;禁止添加
InviteGrant - 频道邀请加入权限:所有人都可以邀请;只允许频道所有者或管理员邀请

注意,频道的申请加入权限可能会因频道的性质(GroupRoom)有所差异,具体开阀时请参考相关文档。

获取频道资料

游戏中,当加入联盟/公会或者固定小队时,玩家需要查看相关频道资料:

  • 联盟/公会信息:使用 “获取群组信息GetGroupInfos”获取联盟/公会的信息
  • 小队信息:使用 “获取群组信息GetGroupInfos”获取小队的信息
修改频道资料

由于游戏中需要引入审核机制,因此云上IM SDK不提供客户端主动修改频道资料的接口,而是通过服务端进行创建。因此需要开发者自行将修改频道资料的操作通过服务端来实现。

会话

当玩家创建了一个私聊或小队聊天,或者玩家在游戏中加入联盟/公会,其中有消息的收发时,对应的会话就随之创建。会话可以简单概括为消息的集合。

注意:世界频道可以设置为默认存在的会话,只要有人在世界频道中发言。

会话列表

会话列表,是所有会话的集合。通过会话列表,玩家可以方便的查看产生消息的会话,并快速找到目标会话。

获取会话列表

云上IM SDK 提供 “获取会话列表 GetConversation” 方法从服务端取得当前玩家具有的所有会话信息。 在使用“获取会话列表 GetConversation” 方法时,方法中会返回每条会话中最后一条消息,用于UI展示。

注意:如果玩家有很多的会话时,为了避免加载过慢和网络流量消耗,建议使用本地存储会话,或者从服务端获取未读会话列表

当游戏中需要由邀请加入频道申请加入频道请求加入好友 等请求类功能时,在获取会话列表时,也需要将这类型的请求列表同步获取。

  • 频道所有者/管理员,“获取加入群组申请列表GetGroupApplyList”、“获取加入房间申请列表GetRoomApplyList
  • 玩家,“获取邀请加入群组列表GetGroupInviteList”、“获取邀请加入房间列表GetRoomInviteList
  • 玩家,“获取自己申请加入群组列表GetGroupRequestList”、“获取自己申请加入房间列表 GetRoomRequestList
  • 玩家,“获取加自己为好友申请列表GetFriendApplyList”、“获取自己发出的加好友申请列表 GetFriendRequestList

注意,上述请求类内容均有时效,当超过时效后,该请求内容无法获取。

未读会话列表

未读会话是指玩家离线后产生的发送给玩家的消息集合。未读会话并未触达离线玩家的客户端,只是暂存在服务端,标注为“未读”。当离线玩家重新上线后,会通过拉取会话列表,来获取到有哪些消息是属于“未读”状态,进而获取到这些内容。

注意:此处的未读和游戏聊天UI上的未读,意义不同。

获取未读会话列表

为了减少玩家每次登录时拉取全部会话所带来的服务器和网络压力,开发者可以使用“获取未读会话列表 GetAllUnreadConversation”方法来只获取未读的会话及相关信息。未读会话列表包括未读会话产生的未读消息条数。

未读会话列表仅返回会话的未读消息数量,开发者需要通过使用获取历史消息的方法,获取未读消息并展示在UI上。

注意:我们强烈建议如果游戏开发者不打算使用本地存储的话,在玩家登录时,仅使用“获取未读会话列表 GetAllUnreadConversation”方法,避免使用“获取会话列表 GetConversation”方法造成的服务器和网络压力。 如果是玩家更换终端,也同样如此。除非游戏具备会话同步机制。

清除会话未读状态

云上IM SDK提供方法“清除会话未读状态ClearUnread”,用于将会话未读状态清除。开发者可以再客户端拉取未读会话后,通过此方法清除未读状态,避免重复拉取。

注意:“获取未读会话列表 GetAllUnreadConversation”方法中有参数clear可以实现获取时即清除会话未读状态。如果不使用此参数,建议使用“清除会话未读状态ClearUnread”方法。

消息

消息是游戏社交中的核心,通过消息传递,玩家之间达成内容分享。消息也是会话的基础,众多各种类型的消息,组成了不同的会话,简单有效的串联起了玩家。

消息类型

云上IM SDK支持多种类型消息:

消息内容 消息区分 说明
文本消息 调用 sendChatMessage方法 普通文字消息
图片消息 调用 sendFile方法 一张图片内容
音频消息 调用 sendFile方法 一段音频内容
视频消息 调用 sendFile方法 一段视频内容
语音消息 调用 sendAudioMessage方法 一段自定义录制的语音内容,带播放
文件消息 调用 sendFile方法 一个自定义文件内容

开发者可以使用消息结构中的attrs参数自定义消息,发送贴合业务需求的类型消息。

获取历史聊天消息

开发者可以使用“获取历史聊天消息GetHitoryChatMessage”方法,来实现单个会话的历史聊天消息获取。 一般来说,当玩家点进一个会话之后,开发者需要使用该方法从服务端获取到历史聊天消息。方法中提供顺序/倒序条数起始结束时间索引消息ID 等参数协助开发者实现历史聊天的获取。

注意:索引消息ID可以从获取未读会话列表方法的返回中获取到,开发者可以直接使用。

用户

云上IM SDK支持游戏中玩家信息的维护。开发者可直接游戏中的用户信息存储到云上服务端,通过服务端相关API进行读取/更新/维护操作。

用户信息

用户信息中包括:

参数 类型 说明
ID long 用户ID
Name string 用户名称
PortraitUrl string 用户头像URL
Profile string 用户简介
attrs string 自定义业务信息
ApplyGrant - 好友申请权限:自由添加;需要用户审核;禁止添加
获取用户信息

玩家可以通过“获取用户信息GetUserInfos”方法,获取到游戏中其他玩家的信息。

  • 添加用户为好友时,可以使用该方法
  • 查看频道用户时,可以使用该方法
修改用户信息

由于游戏中需要引入审核机制,因此云上IM SDK不提供客户端主动修改用户信息的接口,而是通过服务端进行创建。因此需要开发者自行将修改用户信息的操作通过服务端来实现。

好友关系

好友关系管理(关系链管理),是游戏社交中重要的内容。会话/消息特性,回依赖好友关系状态。游戏中玩家关系的互动串联,也是依赖于好友关系。 云上IM SDK提供允许陌生人发消息的开关,开发者可以根据游戏的使用场景,确定好友关系的使用方法。

注意,此开关是项目级开关,无法单独为游戏中玩家开放。

添加好友关系

玩家可以使用“添加好友AddFriend”方法添加其他用户为好友。 如果允许陌生人发消息的开关为关,则添加好友成功后,双方可以开始进行会话聊天。 云上IM SDK提供默认玩家的好友人数上限为100名好友。

解除好友关系

玩家可以使用“删除好友DeleteFriends”方法解除用户的好友关系。 如果允许陌生人发消息的开关为关,则解除好友成功后,双方无法再进行会话聊天。

黑名单处理

云上IM SDK提供玩家拉黑其他玩家的功能。同时提供消息黑名单双向验证的功能,开发者可以根据游戏使用场景,设置拉黑之后玩家之间发送聊天的规则。

注意,此开关是项目级开关,无法单独为游戏中玩家开放。

辅助能力

云上IM SDK出了提供上述功能以外,对于社交聊天场景还提供了其他功能,便于玩家之间快速交流。

离线推送

在游戏中,玩家需要随时了解其他玩家的新动态、游戏进度的拓展、战场的最新变化等内容,这会促使游戏为离线玩家提供推送服务。 为了避免维持聊天的长连接而导致的过多资源消耗,建议开发者使用各终端厂商提供的系统级推送通道来进行消息通知。 云上IM SDK支持的终端系统有:

  • APNs:iOS
  • Google FCM:OPPO/VIVO/华为/小米/魅族/荣耀。

使用离线推送功能,需要在程序启动时(或周期性)调用“添加推送设备AddDevice” 方法来添加DeviceToken

识别翻译

云上IM SDK提供对聊天内容的文字进行实时识别翻译功能。这些功能需要通过云上控制台来完成操作。

注意:识别翻译服务属于单独服务,需要另行计费。

内容审核

针对内容审核的需求,云上IM SDK提供云端审核服务,检测聊天场景中产生文本、图片、音频、视频内容,并可以指定符合游戏需求的审核策略。这些功能需要通过云上控制台来完成操作。

注意:内容审核服务属于单独服务,需要另行计费。

实时音视频

为了更便于游戏玩家的交流,我们建议在游戏中增加实时音视频通话功能(目前主要是实时音频通话),来满足私聊、频道聊天的爽快交流。 关于RTC相关的集成使用,请参考云上RTC相关内容。

注意:实时音视频属于单独服务,需要另行计费。