游戏中的社交聊天
更新时间:
云上曲率IM(即时通讯)服务目前广泛应用于手机游戏行业,针对不同类型手游提供场景化服务,降低手游开发者的非游戏业务开发难度,快速打造游戏中的聊天功能。
- 支持大型无上限的世界频道、联盟/公会/小组/小队频道、私聊频道,覆盖不同类型手机游戏的聊天场景需求。
- 为玩家提供全球化的交流环境,随时随地翻译文本,交流无障碍。
- 为玩家提供实时音频通话功能,满足游戏玩家自由沟通的需求,提高游戏玩家的参与热情。
- 为游戏审核人员提供后台玩家发言审核服务,净化游戏环境,降低游戏业务在审核服务的成本。
注意:本文中的方法名采用 Unity平台语言。您可根据需要,选用我们提供的其他语言的IM SDK。
频道
频道 是游戏中用户产生交流的唯一场景,在某些类型游戏中,通过不同的频道,游戏玩家互相交流游戏心得、组织团队战斗、发表游戏信息,是游戏中重要的功能。
频道类型
云上曲率IM SDK提供的 Group和Room相关接口,满足游戏中类型频道的使用。
世界频道
世界频道是每位游戏玩家进入游戏后,默认进入的频道。这个频道涵盖当前服务器的所有在线玩家。
- 当玩家上线后,会接收到该频道的所有消息,也可以拉取世界频道的历史消息。
- 玩家下线或离线后,不会接收到世界频道的离线消息推送。
开发者可以通过服务端的“拉入房间接口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
-
频道邀请加入权限:所有人都可以邀请;只允许频道所有者或管理员邀请
注意,频道的申请加入权限可能会因频道的性质(Group或Room)有所差异,具体开阀时请参考相关文档。
获取频道资料
游戏中,当加入联盟/公会或者固定小队时,玩家需要查看相关频道资料:
- 联盟/公会信息:使用 “获取群组信息
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相关内容。
注意:实时音视频属于单独服务,需要另行计费。
云上曲率IM(即时通讯)服务目前广泛应用于手机游戏行业,针对不同类型手游提供场景化服务,降低手游开发者的非游戏业务开发难度,快速打造游戏中的聊天功能。
- 支持大型无上限的世界频道、联盟/公会/小组/小队频道、私聊频道,覆盖不同类型手机游戏的聊天场景需求。
- 为玩家提供全球化的交流环境,随时随地翻译文本,交流无障碍。
- 为玩家提供实时音频通话功能,满足游戏玩家自由沟通的需求,提高游戏玩家的参与热情。
- 为游戏审核人员提供后台玩家发言审核服务,净化游戏环境,降低游戏业务在审核服务的成本。
注意:本文中的方法名采用
Unity平台语言。您可根据需要,选用我们提供的其他语言的IM SDK。
频道
频道 是游戏中用户产生交流的唯一场景,在某些类型游戏中,通过不同的频道,游戏玩家互相交流游戏心得、组织团队战斗、发表游戏信息,是游戏中重要的功能。
频道类型
云上曲率IM SDK提供的 Group和Room相关接口,满足游戏中类型频道的使用。
世界频道
世界频道是每位游戏玩家进入游戏后,默认进入的频道。这个频道涵盖当前服务器的所有在线玩家。
- 当玩家上线后,会接收到该频道的所有消息,也可以拉取世界频道的历史消息。
- 玩家下线或离线后,不会接收到世界频道的离线消息推送。
开发者可以通过服务端的“拉入房间接口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 | - | 频道邀请加入权限:所有人都可以邀请;只允许频道所有者或管理员邀请 |
注意,频道的申请加入权限可能会因频道的性质(
Group或Room)有所差异,具体开阀时请参考相关文档。
获取频道资料
游戏中,当加入联盟/公会或者固定小队时,玩家需要查看相关频道资料:
- 联盟/公会信息:使用 “获取群组信息
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相关内容。
注意:实时音视频属于单独服务,需要另行计费。