已知问题及处理建议
更新时间: 2024/03/15 16:08:16
IM 含圈组版目前兼容 uni-app 环境,但仍存在一些问题和限制。本文列举已知的问题和限制,并提供相应的处理建议。
- 不支持动态 LBS 地址
- WebSocket 多个连接会失效
- 不支持分片上传
- 微信小程序编译报错 Function(...) is not a function
- 微信小程序编译报错 Converting circular structure to JSON
- 微信小程序开启"将 JS 编译成 ES5"选项后,编译报错
- 集成 Web SDK 时 TypeError 报错
- uniapp 编译到不同端获取到的漫游消息不一致
不支持本地数据库
限制描述
网易云信 IM 对 uni-app 开发的应用提供云端存储功能,不支持本地数据库,需要依赖漫游同步消息。
不支持动态 LBS 地址
限制描述
uni-app 编译成微信小程序时,实例在微信小程序环境中运行,会受到域名白名单限制,无法使用 LBS 服务动态调配的长连接地址。
处理建议
初始化时,初始化参数lbsUrls
只传入一个固定的 LBS 地址。
示例如下:
import NIMSDK from 'nim-web-sdk-ng/dist/NIM_MINIAPP_SDK
const nim = new NIMSDK({
appkey: "YOUR_APPKEY",
token: "YOUR_TOKEN",
account: "YOUR_ACCOUNT",
lbsUrls: [
"https://lbs.netease.im/lbs/wxwebconf.jsp"
],
linkUrl: "wlnimsc0.netease.im"
})
Websocket 多个连接会失效
报错信息
Error: Adapter uni-app: socket sendMsg when readyState=0
报错原因
出现以上报错,可能是由于在 uni-app 里尝试建立两个 WebSocket 连接。
uni-app 项目在真机上运行(作为 app 运行,而非 H5),websocket 多个连接会失效。2019 年 uni-app 官方社区里有了此反馈的帖子 uni-app,websocket多个连接会失效,至今尚未解决。下图为该帖子的最佳回复。
处理建议
云信 IM (NIM)和 Chatroom 为两个互为独立的实例,两者各自建立与云信服务端之间的长连接。因此在编译成 uni-app 应用的模式下,请不要同时使用 NIM 和 Chatroom 两个实例。
您可分别通过NIMInterface.destroy
方法和ChatroomInterface.destroy
方法销毁 NIM 实例和聊天室实例,进而销毁其与云信服务端的长连接,保证只有一个实例建立长连接。
不支持分片上传
限制描述
由于读取文件有着诸多限制,无法以一种兼容性比较好的方式根据 filePath 拿到本地文件信息。单线程在上传大文件不仅体验差,而且会因为手机终端性能而出现意想不到的问题。
处理建议
在使用选择文件 API (例如chooseImage
和choosevideo
)时自行判断文件大小,建议 100 MB 以上的文件不传。
微信小程序编译报错 Function(...) is not a function
报错信息
uni-app 编译成微信小程序时,微信小程序上报错 Function(...) is not a function
。
报错原因
微信基础库版本过低。
处理建议
将微信基础库切换为 v2.21.0 以上的版本。
微信小程序编译报错 Converting circular structure to JSON
报错信息
TypeError: Converting circular structure to JSON
--> starting at object with constructor 'i'
| property '_events' -> object with constructor 'n'
| property 'logined' -> object with constructor 'Array'
| index 0 -> object with constructor 'a'
--- property 'context' closes the circle
at JSON.stringify (<anonymous>)
at cloneWithData (mp.runtime.esm.js?66fd:5620)
报错原因
uni-app 编译微信小程序时注入的 mp.runtime.esm.js 里,对 vue 的 data 进行序列化使用的序列化方法是 return JSON.parse(JSON.stringify(ret))
,即在 vue 组件的 data 里挂载 nim 实例。然而实例继承自 EventEmitter3 对象,无法被这样序列化。
处理建议
建议将 nim 实例挂载在全局变量、vuex 的 prototype,或者参考如下示例代码在应用的globalData
中挂载:
const app = getApp()
if (app && app.globalData && app.globalData.nim) {
app.globalData.nim = new NIMSDK()
}
微信小程序开启"将 JS 编译成 ES5"选项后,编译报错
报错信息
WAServiceMainContext.js:2 TypeError: t is not a function
at oe.connect (NIM.js? [sm]:15)
at Li.connect (im.js? [sm]:17)
at Object.i.safeCallback (WASubContext.js?t=wechat&s=1642128708420&v=2.21.3:2)
at WASubContext.js?t=wechat&s=1642128708420&v=2.21.3:2
at br (WASubContext.js?t=wechat&s=1642128708420&v=2.21.3:2)
at WASubContext.js?t=wechat&s=1642128708420&v=2.21.3:2
at g (WASubContext.js?t=wechat&s=1642128708420&v=2.21.3:2)
at WASubContext.js?t=wechat&s=1642128708420&v=2.21.3:2
at WASubContext.js?t=wechat&s=1642128708420&v=2.21.3:2
at WAServiceMainContext.js:2(env: Windows,mp,1.05.2111300; lib: 2.21.3)
报错原因
微信小程序环境编译到 ES5 过程中产生未知错误。
处理建议
目前请勿勾选"将 JS 编译成 ES5"选项。
集成 Web SDK 时 TypeError 报错
报错信息
TypeError: Cannot read property 'localStorage' of undefined
报错原因
未集成与环境匹配的 SDK
处理建议
- 使用小程序开发,请集成 (NIM|CHATROOM|QCHAT)_MINIAPP_SDK.js
- 使用 uni-app 开发,请集成 (NIM|CHATROOM|QCHAT)_UNIAPP_SDK.js
- 使用浏览器或者 h5 开发,请集成 (NIM|CHATROOM|QCHAT)_BROWSER_SDK.js
uniapp 编译到不同端获取到的漫游消息不一致
问题描述
uniapp 编译到 iOS 端获取到的漫游消息与编译到 h5 获取到的漫游消息不一致。
问题原因
plus-websocket 插件丢包会导致 NIM SDK 收到的会话变少。
处理建议
建议去除 plus-websocket
插件。