云通信图片语音消息发送失败,错误码70402?

  • 回答 (1)
  • 关注 (0)
  • 查看 (136)

App内用户发送语音和图片信息的时候出现失败,提示参数非法,但是文字信息可正常发送

kilybekbkilybekb提问于
宅女have fun……回答于
推荐

回答来自于问答智囊团成员:linpeiyang@云通信

专栏:https://cloud.tencent.com/developer/article/1750251

客户提到文字信息没有失败,说明消息上行到云通信IM后台 -> 云通信IM后台处理 -> 云通信IM后台下发消息给用户APP

这条消息收发的通路是没有问题的。

而云通信IM对图片信息&语音信息的处理逻辑 与 文字信息的区别在于, 对前者会将信息以文件形式存储到腾讯云COS,得到一个COS的URL传给云通信IM后台,云通信后台经过处理,同样将URL下发给消息接收方的用户APP, APP通过URL去腾讯云COS下载文件,展示给用户。

显然是与COS有关了。

日志分析

拿到用户终端的SDK日志,很容易发现了问题原因:

usersig参数丢失

图片语音消息上传COS之前,需要调用REST API获取COS Token,此处UserSig这个参数丢失了,导致报错。

关于REST API调用,可参阅:https://cloud.tencent.com/document/product/269/1519

关于UserSig登录鉴权, 可参阅:https://cloud.tencent.com/developer/article/1750246

为什么UserSig会丢失

继续分析终端日志发现,此客户在已经登录成功过的情况下,之后杀掉应用再重新打开应用,SDK初始化之后,此客户的登录逻辑是使用了SDK V1接口autoLogin自动登录:

autologin自动登录

autoLogin接口说明:

自动登录类似“记住密码”的功能,如果上一次已经成功登录,那么一段时间内都只需要传入用户名就可以完成登录。 相比于普通的 login(TIMLoginParam) 接口,该接口可以减少 IM SDK 向您的服务器索要 UserSig 的频率, 既可以加快登录速度,又能减少你的 UserSig 服务器压力,也在一定程度上降低了 UserSig 泄漏的风险。首次登录之后,SDK 会把登录信息存在在本地(UserSig存在内存,登录凭证存在本地),下次登录即可调用自动登录

问题原因:

用户登录成功过一次之后,UserSig存在内存,登录凭证存在本地。当用户杀掉应用或切后台一段时间被自动杀掉应用,原本存储在用户终端内存里的UserSig丢失了,而当重新开启应用,此客户的逻辑是调用autoLogin接口,不去向开发者后台请求UserSig,因此终端SDK一直没有获取到UserSig,此时调用需要UserSig的REST API请求COS token就会报错参数丢失。而用户使用其他功能不受影响是因为登录凭证仍存在本地,其他功能都是用到登录凭证来做鉴权。

问题解决:

autoLogin接口早已经在新的SDK V2版本的API里禁用了,引导不要再使用V1版本的接口。

所属标签

可能回答问题的人

  • 腾讯云音视频

    腾讯 · 行业应用产品经理 (已认证)

    224 粉丝0 提问1 回答
  • 腾讯云技术服务团队

    腾讯云 · 技术服务团队 (已认证)

    48 粉丝0 提问8 回答
  • elliswu

    腾讯计算机系统有限公司 · 高级工程师 (已认证)

    6 粉丝0 提问0 回答
  • 音视频小姐姐

    5 粉丝0 提问0 回答
  • 小翔

    1 粉丝0 提问1 回答
  • 1076485026

    0 粉丝0 提问0 回答

扫码关注云+社区

领取腾讯云代金券