IM即时通信探索(二)-- IM即时通信采坑

2020-07-07 10:12:35 浏览数 (1)

目前IM的兼容性还是很高的,基本上各个平台已经可以实现跨平台交流了,但是里面肯定还是有一些需要注意的坑点或者注意点,我将一一给大家讲一讲。

兼容性

虽然目前IM已经平台都支持互通,且能跨终端全平台服务。但是仍然对平台有一定的要求。

各平台兼容性各平台兼容性

在开发的时候,一定要先看看开发环境和项目实际应用环境的兼容问题,不然纯粹是无用功啊。

全球接入

目前IM在全球的覆盖范围还是挺广的,只不过由于最近国际实事的问题,印度区域封锁了qq.com这个域名,可能部分功能不能使用。不过腾讯应该会有对应策略,等后续消息吧。

多端登录

多端登录限制多端登录限制

消息功能

漫游消息默认保存7天,付费延长;

消息撤回默认只支持2分钟内的消息,可以在腾讯云IM控制台设置撤回时间,撤回操作仅支持单聊和群聊消息,不支持直播群(AVChatRoom)的撤回;

离线推送支持苹果 APNs、小米推送、华为推送、魅族推送、OPPO 推送、vivo 推送。

资料功能

自定义用户资料最大20个自定义用户资料字段。

关系链功能

设置好友自定义资料最多20个好友自定义字段。

群组功能

功能类型

好友工作群 (Work)

陌生人交友群 (Public)

临时会议群 (Meeting)

直播群 (AVChatRoom)

最高支持成员数量上限

6000人

6000人

6000人

无上限

可获取成员资料限制

全部可见

全部可见

全部可见

仅展示前300个加群的成员

是否支持设置管理员

不支持

支持

支持

不支持

群资料修改权限

·  任意群成员均可修改 ·  后台 App 管理员

·  群主 ·  群管理员 ·  后台 App 管理员

·  群主 ·  群管理员 ·  后台 App 管理员

·  群主 ·  后台 App 管理员

解散群组权限

后台 App 管理员

·  群主 ·  后台 App 管理员

·  群主 ·  后台 App 管理员

·  群主 ·  后台 App 管理员

是否支持群主退群

支持

不支持

不支持

不支持

是否支持申请加群

不支持

支持,但需要群主或管理员审批

支持,且无需审批

支持,且无需审批

是否支持成员邀请他人加群

支持

不支持

不支持

不支持

“踢人”权限

·  群主 ·  后台 App 管理员

·  群主 ·  群管理员 ·  后台 App 管理员

·  群主 ·  群管理员 ·  后台 App 管理员

不支持踢人,可用“禁言”功能达到类似效果

“禁言”权限

不支持禁言

·  群主 ·  群管理员(仅支持禁言普通群成员) ·  后台 App 管理员

·  群主 ·  群管理员(仅支持禁言普通群成员) ·  后台 App 管理员

·  群主 ·  后台 App 管理员

是否支持查看入群前历史消息

不支持

不支持

支持

不支持

成员变更通知(进群/退群等)

全员

全员

全员

是否需要在创建群组后发消息激活

需要

不需要

不需要

不需要

是否支持未读消息计数

支持

支持

不支持

不支持

是否支持导入群(群成员/基础资料等)

支持

支持

支持

不支持

在线状态管理

用户状态有三种未登录状态、前台运行状态、后台运行状态,不过后台运行状态(PushOnline)只有手机端(Android/iOS)会存在,PC 和 Web 端不存在该种状态;

用户状态变成后台运行状态(PushOnline)后,7天内没有再登录过,此时状态变为未登录状态(Offline)。

同时在线

即时通信 IM 支持在控制台修改同时在线策略,通过配置可以做到 PC 端和手机端同时在线,或者 PC、iOS 和 Android 都可以同时在线。开启同时在线登录不同终端后不会互踢,但是两个相同终端(例如两个 iOS 端登录)仍然会互踢。

标配资料字段

Tag_Profile_IM_Nick,昵称,长度不得超过500个字节

Tag_Profile_IM_Location,所在地, 长度不得超过16个字节

Tag_Profile_IM_SelfSignature,个性签名,长度不得超过500个字节

Tag_Profile_IM_Image, 头像URL,长度不得超过500个字节。

自定义资料字段的申请

App 管理员可以通过即时通信 IM控制台>【应用配置】>【功能配置】 申请自定义资料字段,申请提交后,自定义资料字段将在5分钟内生效。

申请自定义资料字段时,需要为每一个自定义资料字段提交如下资料:

  • 自定义资料字段的名称(Key):详情可参见 自定义资料字段的命名规范
  • 自定义资料字段的类型(Value):详情可参见 资料字段
  • 自定义资料字段的读权限及写权限:详情可参见 资料字段

好友表

即时通信 IM 的好友列表最多允许添加3000个好友。

标配好友字段

字段名称

类型

描述

Tag_SNS_IM_Group

Array

好友分组:1. 最多支持 32 个分组;2. 不允许分组名为空;3. 分组名长度不得超过 30 个字节;4. 同一个好友可以有多个不同的分组

Tag_SNS_IM_Remark

string

好友备注:1. 备注长度最长不得超过 96 个字节

Tag_SNS_IM_AddSource

string

加好友来源:1. 加好友来源字段包含前缀和关键字两部分;2. 加好友来源字段的前缀是:AddSource_Type_ ;3. 关键字:必须是英文字母,且长度不得超过 8 字节,建议用一个英文单词或该英文单词的缩写;4. 示例:加好友来源的关键字是 Android,则加好友来源字段是:AddSource_Type_Android

Tag_SNS_IM_AddWording

string

加好友附言:1. 加好友附言的长度最长不得超过 256 个字节

自定义好友字段

自定义好友字段是各 App 根据各自业务需要而设置的好友数据。通过自定义好友字段,各 App 可以将一些额外数据附加到好友上,并通过现有的接口进行读写操作。 App 管理员可以通过即时通信 IM 控制台 >【应用配置】>【功能配置】申请自定义好友字段,申请提交后,自定义好友字段将在5分钟内生效。

自定义好友字段的命名规则如下:

  • 自定义好友字段的名称分为以下两部分:前缀、关键字。
  • 自定义好友字段的前缀是:Tag_SNS_Custom。
  • 关键字:必须是英文字母,且长度不得超过 8 字节,建议用一个英文单词或该英文单词的缩写。
  • 示例:某 App 要申请的自定义好友字段的关键字是 Test,则自定义关系字段的名称是:Tag_SNS_Custom_Test。

申请自定义好友字段时,需要为每一个自定义好友字段提交如下资料:

  • 自定义好友字段的名称(Key)。
  • 自定义好友字段的类型(Value):详情可参见 关系链字段。

黑名单

即时通信 IM 的黑名单列表默认允许添加 1000 条黑名单帐号,如对黑名单列表的大小有特殊要求,请联系腾讯云客服。

单聊消息类型

消息聊天里面的文件(图片、视频、音频和其它文件)大小不能超过28M。

单聊离线消息处理流程

  1. 用户 A 调用 sendMessage 给用户 B 发送消息,用户 B 处于下线状态。
    • 把用户 A 添加进用户 B 的最近联系人,缓存大小为100条。
    • 把消息存入离线缓存中,缓存大小30K,时间限制7天。
    • 把消息存入漫游服务器中,时间限制7天。
  2. 用户 B 调用 login 接口登录即时通信 IM。
  3. SDK 自动拉取离线缓存中的消息,通过 OnNewMessage 抛出。
  4. SDK 自动拉取最近联系人,通过 OnNewMessage 接口抛出。
  5. 同步消息过程完成,通过 OnRefresh 接口通知用户已完成消息同步。
  6. 用户调用 getMessage,如果本地消息不完整,SDK 自动拉取漫游服务器。

离线消息存储

即时通信 IM 支持离线消息缓存,即当用户不在线时,下次登录仍会拉取到离线消息。离线消息默认保存7天,如果用户7天内未登录,再次登录时将不能获取到7天前的离线消息。对于单聊消息,每个用户的离线消息缓存最多保存100个单聊会话的未读消息,每个单聊会话最多保存100条未读消息。超出限制的部分不会被计入未读计数,但这些消息仍会存到消息漫游中。对于群消息,则没有这些条数限制。

漫游消息存储

即时通信 IM 支持消息漫游,即用户更换终端的情况下,也可以获取到跟其他用户或者某个群的聊天记录。 默认情况下,单聊消息和群聊消息有7天漫游,超过漫游时长的消息会被删除。即时通信 IM 支持在控制台修改消息漫游时长,延长消息漫游时长是增值服务,具体计费说明请参考 价格说明。 不同版本的 SDK 支持延长历史消息存储时长的消息类型不同,详情如下表所示。

SDK 版本

文本

自定义类消息

图片

文件

短语音

短视频

富媒体消息

Android 4.X 版本

Android 3.X 版本

×

×

×

×

×

Android 2.X 版本

×

×

×

×

×

iOS 4.X 版本

iOS 3.X 版本

×

×

×

×

×

iOS 2.X 版本

×

×

×

×

×

PC SDK 2.X 版本

×

×

×

×

×

Web 与小程序 SDK 2.X 版本

Web 与小程序 SDK 1.X 版本

×

×

×

×

×

离线推送

离线推送的步骤比较复杂,不过也是很多项目必须的一个功能,我给大家附上两个官方链接IOS离线推送和Android离线推送

群消息频控

总消息数频控

总消息数频控是指单个群每秒最多能发送的消息数限制,默认值为 40条/秒。消息数量超过限制后,后台优先下发优先级相对较高的消息,同等优先级的消息随机排序。

被频控限制的消息,不会下发,不会存入历史消息,但会给发送人返回成功;会触发 群内发言之前回调,但不会触发 群内发言之后回调。

优先级频控

优先级频控是指单个群每秒最多能发送多少条某优先级的消息,发消息请求只有在通过总消息数频控之后,才会进入优先级频控。 App 管理员/群主/群管理员发送的消息不受优先级频控限制;High 优先级的消息不受优先级频控限制,其余 3 个优先级可以独立配置,默认都为 40 条/秒。 一个 SDKAppID 下的每个 群组类型 都有自己的总消息数频控和优先级频控配置。如果需要修改默认值,请 提交工单 进行申请。

群组限制差异

功能项

好友工作群(Work)/陌生人社交群(Public)/临时会议群(Meeting)

直播群(AVChatRoom)

成员数量上限

体验版:20人/群 专业版:默认为200人/群,最高支持 增值 扩展至2000人/群 旗舰版:默认为2000人/群,最高支持 增值 扩展至6000人/群

无上限

群组数量

体验版:最多同时存在100个,已解散的群组不计数 专业版或旗舰版:无上限

体验版:最多同时存在10个,已解散的群组不计数 专业版:最多同时存在50个,已解散的群组不计数,支持 增值 扩展直播群创建数至无上限 旗舰版:无上限

  • 专业版或旗舰版 SDKAppID 下,所有群类型日净增群组数(即创建群组数减去解散群组数)上限为1万个。
  • 专业版或旗舰版 SDKAppID 下,免费峰值群组数为10万个/月,超出免费量将产生 套餐外超量费用,建议及时解散无需继续使用的群组。

各类型群组消息能力差异

功能项

好友工作群(Work)

陌生人社交群(Public)

临时会议群(Meeting)

直播群(AVChatRoom)

是否支持未读消息计数

支持

支持

不支持

不支持

是否支持查看入群前消息记录

不支持

不支持

支持

不支持

是否支持历史消息存储

支持

支持

支持

不支持

是否支持成员变更通知

支持

支持

不支持

支持

创建群组后是否需要发一条消息激活

需要

不需要

不需要

不需要

默认消息接收选项

接收在线推送消息和离线推送

接收在线推送消息和离线推送

只接收在线推送消息

只接收在线推送消息

是否支持用户以游客身份(即不需要登录)接收群消息

不支持

不支持

不支持

支持

  • 需要激活的群组,在群主发消息前为未激活状态,对群主以外的其他群成员不可见,而不需要激活的群组,创建后即对所有群成员可见。
  • 离线推送目前只支持 Android(Android 离线推送)和 iOS(APNs 推送)。
  • 好友工作群(Work)、陌生人社交群(Public)和临时会议群(Meeting)具备历史消息存储能力,默认免费存储7天(旗舰版默认30天),如需保存更长时间,您可以在 控制台 修改消息存储时长。延长历史消息存储时长是付费增值服务,详情请参见 价格说明。

各类型群组批量导入与自动回收差异

功能项

好友工作群(Work)/ 陌生人社交群(Public)/ 临时会议群(Meeting)

直播群(AVChatRoom)

允许导入群、群成员和群消息

允许导入群、群成员和群消息,适用于从第三方平台迁移历史群组到即时通信 IM 时使用

不允许批量导入群、群成员和群消息,只能使用现有的群、群成员和群消息

群组自动回收时间(秒)

后台不会回收群组,除非群主解散,或者所有成员都退出群组

后台不会回收群组,除非群主解散,或者所有成员都退出群组

如果需要开启群组回收功能,可以根据工单模板提交工单进行申请。配置后,将会根据群组类型清理不活跃群组(群组不活跃是指群组中既没人发言,也没有成员变更)。

自定义群组类型

在实际使用中,如果 IM 提供的 群组类型 无法满足您的需求,您可以按照 工单模板 准备相关信息,然后 提交工单 申请修改现有群组类型或新增自定义群组类型。 例如,某种办公场景下使用的群组,它与好友工作群(Work)相似但需要群内任意成员都具有最高级别的管理权限且可以查看入群之前的历史消息。那么您可以选择以下方案:

  • 选择使用好友工作群(Work), 然后 提交工单 申请开启“是否支持查看入群前历史消息”和“是否允许普通成员踢人”选项。
  • 提交工单 申请定义一种新的群组类型:OAGroup,指定好友工作群(Work)为参考类型,并开启“是否支持查看入群前历史消息”和“是否允许普通成员踢人”选项。

tips:

  • 新增群组类型时,需要指定一种群组类型作为参考类型。其中,旧 SDK 版本中的 BChatRoom 类型不能作为参考类型。
  • 成功配置后,除了在申请工单中指定要修改的特性外,新群组类型具有的特性与参考类型是相同的。

自定义群组 ID

默认情况下,App 创建群时,即时通信 IM 会为新创建的群组分配一个默认的群组 ID。该 ID 将以 @TGS# 开头,且保证在 App 中唯一。

为了使得群组 ID 更加简单,便于记忆传播,即时通信 IM 支持 App 在通过 REST API 创建群组时自定义群组 ID。自定义群组 ID 必须为可打印 ASCII 字符(0x20-0x7e),最长48个字节,且前缀不能为 @TGS#(避免与默认分配的群组 ID 混淆)。

自定义字段

即时通信 IM 支持 App 根据业务需求,在群组和群成员两个维度上设置自定义字段。群组维度最多支持20个字段,群成员维度最多支持5个字段。利用自定义字段,App 可以将一些额外数据附加到群组之上,并可以通过现有接口进行读写操作。自定义字段设置并使用后无法删除。但对于直播群(AVChatRoom)及以其为参考的群组类型,因为不存储所有群成员的资料,所以不支持群成员维度的自定义字段。

自定义回调

第三方回调是 App 实现特殊需求的重要方式之一,为用户提供了自定义行为的能力。 即时通信 IM 群组系统支持多种回调,具体参见 第三方回调简介以及 回调命令列表。

官方使用限制总结

点击前往

个人认为的一个不合理点

获取某一次会话的消息内容,需要传入一个会话id

会话id组成如下:

我觉得这个方式与创建消息的时候组成不太一样,会导致在业务编写的时候要加额外判断,以下是创建消息的代码逻辑。

我认为在获取消息和创建消息的时候,格式应该是相近的,都是用一个对方id加一个会话类型即可。

总结

以上是我从官方文档里面总结出来的需要注意的地方,如果大家还有其他的注意点,也可以分享出来,大家探讨一下。

0 人点赞