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

6 回复

自定义基座调试有问题吗

更多关于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

此外,离线打包需确保以下配置:

  1. 在Xcode项目的Info.plist中添加:
<key>NSLocalNetworkUsageDescription</key>
<string>需要访问本地网络以连接设备</string>
  1. 同时添加Bonjour服务声明:
<key>NSBonjourServices</key>
<array>
  <string>_websocket._tcp</string>
</array>
回到顶部