uni-app IOS离线打包的App使用websocket无法访问本地网络
uni-app IOS离线打包的App使用websocket无法访问本地网络
示例代码:
connect()
{
if(!this.control.connecting)
{
let server ='http://192.168.1.187:8888/test';
this.control.socket = uni.connectSocket({
url: server,
success:(res)=>{
},
complete:()=>{
this.control.connecting = false;
},
});
this.control.socket.onOpen((res)=>{
this.control.connected = true;
});
this.control.socket.onError((res)=>{
console.log('onSocketError');
this.control.connected = false;
});
this.control.socket.onClose((res)=>{
console.log('onSocketClose');
this.control.connected = false;
});
}
}
操作步骤:
- 使用uni.connectSocket连接内网服务器立刻会触发onError
预期结果:
- 可以连接服务器
实际结果:
- 无法连接服务器
bug描述:
APP使用websocket连接到内网的PC,在IOS14以前的系统上没有问题,因为IOS14引入了本地网络权限,APP在使用websocket时不会触发本地网络授权的弹框,导致无法访问本地网络。 但是真机调试和云端打包都没有问题,只有离线打包时无法访问本地网络,是不是离线打包的Demo里缺少某些设置导致的问题? 示例代码如下,socket在连接时会立即触发onError,无法连接成功。
另:已经在离线打包项目的app-info.plist文件中添加了NSLocalNetworkUsageDescription描述,但并没有起作用。
更多关于uni-app IOS离线打包的App使用websocket无法访问本地网络的实战教程也可以访问 https://www.itying.com/category-93-b0.html
没试过自定义调试基座,理论上来说应该也没问题,因为自定义调试基座也是云端生成的。
从目前的情况来看应该是离线打包的项目缺少某些东西导致的。
这个只能找找配置了,内网的别人应该也无法测试,试下其他外网地址能请求到么
回复 DCloud_iOS_WZT: 外网请求没有问题,是因为没有本地网络权限导致的,并不需要访问到实际的数据,随便访问一个内网不存在的ip地址都行,正常应该是过几秒连接超时,现在是没有限权瞬间就返回error了
在iOS 14+系统中,本地网络访问权限需要同时配置plist和启用正确的网络通信协议。你的代码中使用了http://开头的URL,但WebSocket应使用ws://或wss://协议。将URL改为ws://192.168.1.187:8888/test。
此外,离线打包需确保以下配置:
- 在Xcode项目的
Info.plist中添加:
<key>NSLocalNetworkUsageDescription</key>
<string>需要访问本地网络以连接设备</string>
- 同时添加Bonjour服务声明:
<key>NSBonjourServices</key>
<array>
<string>_websocket._tcp</string>
</array>


