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启动时可能还未完成初始化,导致监听失效。

解决方案:

  1. 延迟监听:在App.vueonLaunch生命周期中稍作延迟再注册监听
onLaunch() {
  // 安卓需要延迟注册
  setTimeout(() => {
    uni.onSocketMessage(res => {
      console.log("接收到消息", res)
      // 处理消息逻辑
    })
  }, 500)
}
  1. 条件编译处理平台差异
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)
    })
  }
}
  1. 确保连接成功后再监听:在WebSocket连接成功的回调中注册消息监听
uni.connectSocket({
  url: 'wss://your-url',
  success: () => {
    uni.onSocketOpen(() => {
      // 连接成功后再设置消息监听
      uni.onSocketMessage(res => {
        console.log("接收到消息", res)
      })
    })
  }
})
  1. 检查权限配置:在manifest.json中确保网络权限已开启
{
  "app-plus": {
    "permissions": {
      "UniNView": {
        "description": "原生控件"
      }
    }
  }
}
回到顶部