有客户提工单反馈:App内用户发送语音和图片信息的时候出现失败,提示参数非法,但是文字信息可正常发送
客户提到文字信息没有失败,说明
消息上行到云通信IM后台 -> 云通信IM后台处理 -> 云通信IM后台下发消息给用户APP
这条消息收发的通路是没有问题的。
而云通信IM对图片信息&语音信息的处理逻辑 与 文字信息的区别在于, 对前者会将信息以文件形式存储到腾讯云COS,得到一个COS的URL传给云通信IM后台,云通信后台经过处理,同样将URL下发给消息接收方的用户APP, APP通过URL去腾讯云COS下载文件,展示给用户。
显然是与COS有关了。
拿到用户终端的SDK日志,很容易发现了问题原因:
图片语音消息上传COS之前,需要调用REST API获取COS Token,此处UserSig这个参数丢失了,导致报错。
关于REST API调用,可参阅:https://cloud.tencent.com/document/product/269/1519
关于UserSig登录鉴权, 可参阅:https://cloud.tencent.com/developer/article/1750246
继续分析终端日志发现,此客户在已经登录成功过的情况下,之后杀掉应用再重新打开应用,SDK初始化之后,此客户的登录逻辑是使用了SDK V1接口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版本的接口。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。