uni-app websocket在全局注册监听消息,ios正常监听,安卓监听不到
uni-app websocket在全局注册监听消息,ios正常监听,安卓监听不到
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 11.5.1 | HBuilderX |
测试过的手机:
ios 是 iphone11 安卓是 华为p20
操作步骤:
uni.onSocketMessage(res => {
console.log("webscoket 接收到消息123213",res)
})
预期结果:
{
"data": "{\"message\":{\"messageID\":128,\"title\":\"小象的待办提醒\",\"content\":\"这是一条来自成员 ceshu 的待办提醒:56792,请尽快处理!\"},\"type\":1}"
}
实际结果:
没有任何效果
bug描述:
uni.onSocketMessage(res => {
console.log("webscoket 接收到消息123213",res)
})
在 app.vue 里面全局监听数据
ios,web可以正常监听
安卓无法监听
更多关于uni-app websocket在全局注册监听消息,ios正常监听,安卓监听不到的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app websocket在全局注册监听消息,ios正常监听,安卓监听不到的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题通常是由于安卓平台对WebSocket事件监听的生命周期处理与iOS不同导致的。在uni-app中,全局注册的WebSocket监听在安卓App启动时可能还未完成初始化,导致监听失效。
解决方案:
- 延迟监听:在
App.vue的onLaunch生命周期中稍作延迟再注册监听
onLaunch() {
// 安卓需要延迟注册
setTimeout(() => {
uni.onSocketMessage(res => {
console.log("接收到消息", res)
// 处理消息逻辑
})
}, 500)
}
- 条件编译处理平台差异:
onLaunch() {
// #ifdef APP-PLUS
if (uni.getSystemInfoSync().platform === 'android') {
setTimeout(() => {
this.initWebSocketListener()
}, 300)
} else {
this.initWebSocketListener()
}
// #endif
// #ifndef APP-PLUS
this.initWebSocketListener()
// #endif
}
methods: {
initWebSocketListener() {
uni.onSocketMessage(res => {
console.log("接收到消息", res)
})
}
}
- 确保连接成功后再监听:在WebSocket连接成功的回调中注册消息监听
uni.connectSocket({
url: 'wss://your-url',
success: () => {
uni.onSocketOpen(() => {
// 连接成功后再设置消息监听
uni.onSocketMessage(res => {
console.log("接收到消息", res)
})
})
}
})
- 检查权限配置:在
manifest.json中确保网络权限已开启
{
"app-plus": {
"permissions": {
"UniNView": {
"description": "原生控件"
}
}
}
}

