微信版本:8.0.18 基础库:2.21.3
设备开启热点,小程序连上设备通过websocket与设备通信
调试模式下一切正常
非调试模式下报:{"errMsg":"fail:url not in domain list"}
局域网模式下还要校验domain吗?
wx.connectSocket({
url: 'ws://192.168.4.1:12345',
success(res) {
log.info("建立WebSocket通信成功", res);
},
fail(res) {
log.info("建立通信失败", res);
}
})
wx.onSocketError(function (res) {
log.info("onSocketError", res);
});
[10:24:35] 建立WebSocket通信...
[10:24:35] 建立WebSocket通信成功 {"errMsg":"connectSocket:ok"}
[10:24:35] progress 40 设备通信建立成功,开始与设备通信...
[10:24:35] onSocketError {"errMsg":"fail:url not in domain list"}
参考下
https://developers.weixin.qq.com/miniprogram/dev/framework/ability/mDNS.html
我下午测了一下
1 手机和电脑连着同一个路由器,手机和电脑是可以正常通信
2 手机连着电脑的热点,手机和电脑无法通信,报 fail:url not in domain list
也就是说,websocket通信中,小程序连着设备的热点,不满足文档里一个局域网的要求。
我看交流区有非常多的人问类似的问题,基本都是无解。能有官方的人帮忙看看吗?
如果是设备发起的热点,设备本身是否可以连接外网
也就是说,有没有可能小程序需要连接外网来确定url是否在域名列表?
设备上开热点,那你手机上是否开启了流量开关。
如果手机上开启了流量开关,那么小程序会认为这个不是同一个局域网,然后给你报告这个错误。
A B C 网段不同是,BC不能访问A,报 url not in domain list
A B C 网段相同,B能访问A,C不能,报 url not in domain list
感觉小程序还是按照文档说的,对局域网做了判断,但不知道是如何判断的,实在搞不定了
对,要添加websocket域名,而且必须是wss
程序都开发完了,感觉要废掉了
目前这里肯定是个死循环,你又不能要求用户开调试。
我们这种需要连接局域网设备的人很容易理解,其他人都总以为我们那里配置的不对。