TIMSDK 常见问题

消息常见问题

为什么我发送的消息无法撤回?

  1. 音视频聊天室(AVChatRoom) 和 在线成员广播大群(BChatRoom) 不支持消息撤回
  2. 超过了漫游消息的时限

文件消息的大小限制是多少?

大小限制为 28M, WEB 端为 20M;

TIMMessageUpdateListener 这个类是什么?难道发出去的消息还可以修改吗?

使用第三方回调:“发单聊消息之前回调” 是可以修改的;

可以删除 Service 上的消息吗?

暂不支持删除 Service 消息,可通过这两种方法删除本地消息:

1. 调用 remove() 接口为消息打上删除标记进行消息过滤;

2. delFromStorage() 将本地数据库彻底删除 (仅 iOS 端支持此接口);

3.x 的 TIMUGCElem 与 4.x TIMVideoElem 是否兼容?

不兼容:

TIMUGCElem 是利用 LiteAVSDK 采集并存储视频,并且需要开通短视频服务;

TIMVideoElem 则是 4.x 新消息元素,不再需要集成 TIMUGCElem 的相关库文件,使用方式是提供给 TIMVideoElem 本地视频数据路径即可,并不会限制采集视频数据的方法;

我想删除本地会话或消息,看到有三个接口:deleteConversation(),deleteLocalMessage(),deleteConversationAndMessages(),我应该调用哪个接口?

deleteConversation() 的接口特性是保留消息删除会话,接收到新消息后可以通过 getConversationList() 重新获取到,根据之前的消息记录继续聊天;

deleteLocalMessage() 可以在保留会话同时删除本地的会话消息,可以通过 getMessage() 拉取回消息,适用于清除一个星期/月/年前的历史消息的场景;

deleteConversationAndMessages() 删除本地消息同时删除服务器上保存的会话,执行此方法后再次登录将不会出现在最近联系人列表里,适用于断绝好友关系场景下调用;

IMSDK 支持 PC 端与移动手机 APP 端的消息同步吗?

支持的,两端通过 getMessage() 拉取历史漫游消息来完成消息同步,也可以在云通信控制台配置多端同时在线一同接收消息;

getLastMessage() 接口描述中 “没有网络无法获取” 是什么意思?

IMSDK 成功登录后会同步最近的会话列表,为了便于 UI 的展示会通过网络 getLastMessage() 获取会话中最新的漫游消息,在没有网络的情况下,则会通过本地缓存获取最新消息;

我使用表情输入法发送了一条表情消息,为什么另一端收到此表情消息并解析出文本或超出我预期的情况?

1. iOS 的 emoji 表情输入法使用的是 Unicode 编码,如果另一端操作系统不支持 Unicode 编码将无法解析 emoji 表情,比如 Android 8.0 开始支持 Unicode 编码,Android 8.0 以上将会正常的解析使用 Unicode 的表情;

2. 例如码点 "U+1F600" 是 “一张微笑的脸” 表情,它在各个操作系统或 App 下渲染的表情会有细微差异,如果没有则为空或文本,此链接可以查看各版本的 emoji 差别;

我发送消息前设置了消息自定义字段 setCustomStr(),为什么收到消息后 getCustomStr() 为空?

消息自定义字段 CustomStr 仅存储于本地,发送消息并不会携带 CustomStr ,更换终端后无效;

CustomStrInt 与上同理;

适用场景:语音消息是否已播放,红包是否已拆开... 等其他场景建议使用消息自定义字段;

非好友关系可以收发消息吗?

默认是可以的,在 “云通信控制台 --> 应用配置 --> 功能配置 --> 单聊消息检验关系链” 编辑此属性,开启单聊消息检验关系链,非好友关系就不能收发消息,默认为关闭状态;

过期的资源文件还可以使用吗?

只要不删除这条消息可以继续使用,但无法从漫游消息拉取过期的文件消息;

若对过期的文件消息调用 getToFile() 方法,则返回 6009;

若请求过期的文件 URL,则返回 HTTP 4xx 错误;

disableAutoReport 开启或关闭的区别在哪里?

disableAutoReport = NO 时为开启自动上报:当成功注册新消息监听回调后执行 onNewMessages() 后 IMSDK 会自动将消息进行上报,清除 Service 的消息下发队列,切换终端或下次打开 App 注册新消息监听回调后将不会再通过 onNewMessages() 抛出消息

disableAutoReport = YES 时为关闭自动上报:与上面介绍的情况相反,每次打开 App 时,Service 会一直通过 onNewMessages() 下发消息,直到显式调用 setReadMessage() 将消息进行已读上报才会停止下发

注意事项:disableAutoReport 需要在登录前设置,登录后设置无效

Service 消息队列介绍:点击跳转

群组常见问题

为什么我创建了一个群组, getGroupList() 却得不到?

  1. 确认用户是否加入了群组, CreateGroupParam / applyJoinGroup() 的成功回调是否执行; 如果申请加入的群类型为私有群(Private), 则直接返回 10007 错误码;
  2. 确认群组类型是否为私有群(Private), 可通过 getGroupType() 获取群类型;
  3. 私有群(Private) 需要通过发送一条消息来激活群组;

为什么我创建了一个群组, 却无法邀请他人?

  1. 确认群组类型是否为私有群(Private), 可通过 getGroupType() 获取群类型;
  2. 公开群(Public) 和 聊天室(ChatRoom) 默认只有 APP 管理员能够邀请其他用户加群;
  3. 音视频聊天室(AVChatRoom) 和 在线成员广播大群(BChatRoom) 则不允许任何人邀请他人进群;
  4. 如需公开群(Public) 和 聊天室(ChatRoom) 邀请他人的功能请提交工单申请;

为什么我无法发送群消息?

  1. 不是群成员, 使用 getGroupList() 可获取已加入的群组列表;
  2. 群组类型为在线成员广播大群(BChatRoom), 可通过 getGroupType() 获取群类型;
  3. 被禁言后会返回错误码: 20012

登录成功后拉取最近的会话列表,为什么缺少了部分群组?

音视频聊天室(AVChatRoom),广播大群(BChatRoom) 是不会出现在会话列表中的,需要再次加入会话,同时不支持离线消息;

为什么有的群组消息收不到离线推送?

1. 确认 TIMGroupReceiveMessageOpt 是否为关闭免打扰的状态:ReceiveAndNotify;

2. 群组类型为聊天室(ChatRoom),音视频聊天室(AVChatRoom),广播大群(BChatRoom) 是不支持离线推送的;

为什么我 set 了群组的自定义字段却 get 不到?

在 Login() 前,init() 后需要 addCustomTag("yourCustomTag") 方可生效;

具体请参考此文档:点击跳转

为什么我作为群主却无法解散群组?

私有群 (Private) 和在线成员广播大群 (BChatRoom) 是只有 APP 管理员方可解散群组;

通过云通信控制台或使用 APP 管理员帐号使用 REST API 可解散群组;

我可以通过禁言接口将群主禁言吗?

可以的,通过 rest api 可以将群主禁言,禁言接口一共三个,如下:

1、sdk api (modifyMemberInfoParam.setSilence()):群主可以调用此接口将管理员禁言,但不能禁言群主;

2、sdk api (modifyMemberInfoParam.setSilenceAll()):群主或管理员可以调用此接口将所有普通成员禁言,不包括群主和管理员;

3、rest api (v4/group_open_http_svc/forbid_send_msg):App 管理员可以调用此接口将指定的 identifier 禁言,无论角色是否为群主或管理员,都会被禁言;

TIMGroupMemberInfo.nameCard 和 TIMUserProfile.nickName 是什么关系?

nameCard 是可以在群内显示的名字字段,每个群可以设置并使用不同的群昵称;

nickName 是个人资料的昵称字段,同一时间只能使用一个昵称;

在群组聊天业务场景下,可以先获取 nameCard 字段,如果为空可以选择再去获取 nickName 或 identifier 展示在页面上;

TIMGroupMemberInfo 没有头像字段?

一般每个用户的头像只有一个,个人资料的 faceUrl 字段可以用来当作群成员头像;

用户资料与关系链常见问题

为什么我调用 webim.getAllFriend() 无法获取到所有好友?

webim.getAllFriend() 最多返回 100条数据, 若好友较多请分页请求;

为什么我添加好友报错?

  1. 确认对方的 identifier 是否合法, 若不合法会返回错误码: 20003; 可使用云通信控制台的签名 (UserSig) 校验工具检验对应的 identifier;
  2. 可通过 getFutureFriends() 拉取未决请求确认是否曾经向对方发送了加好友请求;

用户资料的字段值可以设置多少字节?

用户资料和关系链经过重构后 String 类型的字符串可以存储 500 字节(Byte) 的数据;

用户资料限制的字节长度,有中文的情况下如何计算?

首先确认工程使用的编码再做计算,如:

utf-8 编码中,1个英文字母字符占用 1个字节,1个汉字占用 3-4个字节 (少数汉字占用 3字节,多数汉字 4字节)。

utf-16 和 Unicode 编码中,1个英文字母字符或中文都是占用 2个字节 (Unicode 扩展区的部分汉字 4个字节)。

utf-32 编码中,世界上的任何字符都需要占用 4个字节。

gbk 编码中,1个英文字母字符占用 1个字节,1个汉字占用 2个字节。

推荐使用 “utf-8”,较为通用。

SDK 在线状态相关常见问题

报错:errCode: 6026, errDesc: No_Previous_Login 是什么?

设置自动登录时没有登录过该用户导致的;

一个 SDKAPPID 可以用于两个 App 吗?

可以用于两个或多个 App,但在同一时间下,只有一个 identifier 可以登录并使用;

Android 和 iOS 登录了同一个 identifier 不会互踢,而两台 Android 或两台 iOS 可以互踢?

这是因为在 "控制台 -> 功能配置" 设置了双端登录或多端登录,配置此功能后,将允许不同类型终端同时在线;

如果需要 Android 和 iOS 互踢,请将设置改成 “单端登录” ;

在弱网或无网络情况下,发送消息的超时时间可以控制吗?

超时时间为 15秒,不能设置。在此期间若网络恢复正常或重连成功,IMSDK 会自动继续之前的发送任务,网络超时则返回错误码:9508

报错:errCode: 9506, errDesc: out of frequency limit 是什么?

触发了 IMSDK 的接口频率限制,每秒钟最多可以发起 5次请求,第 6次将返回此错误信息

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

扫码关注云+社区

领取腾讯云代金券