为啥我这里没有出现保存网络这个弹框。
微信更新8.0.60后,小程序调用wx.connectWifi连接ESP8266时连接不上。问题:微信版本由8.0.58更新到8.0.60后,用微信小程序调用wx.connectWifi配置硬件ESP8266网络时出现第一次连接时可以成功连接并提示`要保存此网络吗`选择保存后可以连接成功,手机连接上的wifi也可以切换成功,但是在保存这个网络后第二次及之后连接这个ESP8266网络时就连不上了,并且wx.connectWifi的fail回调中会出现错误:err: {"errno": 1505042, "errCode": 12015, "errMsg": "connectWifi:fail:wifi config already exist"}。 补充问题:TCPSocket.connect(Object options)接口在更新后也出现了连接建立不上的问题。 [图片][图片] 出问题的机型:目前已知 小米、红米、vivo 品牌的所有手机都有此问题。只有苹果和华为未出现这个问题。 特别说明:手机微信版本更新到8.0.58及之前安卓和苹果手机都未出现过此问题,因为我们测试时将微信8.0.60版本切换回8.0.58版本后可以正常使用。 怀疑问题所在点:在微信8.0.58版本调用wx.connectWifi接口时,弹出的提示框内容为微信要与某个设备搭配使用(选项是取消/连接),但在微信8.0.60版本调用wx.connectWifi接口时,弹出的提示框内容为要保存此网络吗(选项是取消/保存)`。 操作步骤为(在第二步出现问题了): 1. 连接指定 Wi-Fi 设备如果知道 Wi-Fi 设备名称和密码,并确认设备在附近,可以直接在小程序中连接指定 Wi-Fi。 接口调用时序为: startWifi: 初始化 Wi-Fi 模块connectWifi: 连接 Wi-Fi(iOS 需 11 及以上版本支持)onWifiConnected: 连接上 Wi-Fi 的事件回调 /** 确定按钮前置操作 //连接wifi初始化wifi */ initWifiConfirmTwo(){ const _this = this; this.loading = true; this.wifiFlag = false;//重置连接wifi标志 this.tcpFlag = false;//重置连接tcp标志 if(!this.getsysStatus()) return; // 检查 Wi-Fi 和 定位状态 wx.startWifi({ success (res) { _this.initWifiFlag = true; _this.loading = false; _this.confirmConnectWifi(); }, fail(err){ _this.loading = false; _this.initWifiFlag = false; } }) }, /**确定按钮真正操作 连接wifi */ async confirmConnectWifi(){ console.log("A1"); this.loading = true; // 调用设备重新进行wifi的服务 // await this.autoReSetNetService(); console.log("A2"); if(!this.wifiName){ this.loading = false; this.showAlert("WiFi名称不能为空!"); return; } uni.setStorageSync("historyWifiInfo",{'wifiName':this.wifiName,'wifiPassword':this.wifiPassword})//缓存上次的名称密码 if(!this.wifiPassword){ this.loading = false; const res = await this.showModalSc(); if (res.confirm) { this.connects();// 执行tcp连接操作 } else if (res.cancel) { this.loading = false; } }else{ //如果 Wi-Fi 密码不为空,直接执行连接 this.loading = false; this.connects(); } }, showModalSc(){ return new Promise((resolve,reject) => { uni.showModal({ title: '提示', content: `WiFi密码为空,是否继续`, cancelText: '取消', confirmText: '继续', success: function (res) { resolve(res) } }); }) }, /** 连接设备 */ async connects(attempt = 1){ if (this.isUnloaded) return; console.log("B1",attempt); const _this = this; this.loading = true; if(this.wifiFlag == false){ try{ console.log("B2",attempt); const res = await this.connwifi(this.deviceBSSID);//页面退出前进入了这个方法 console.log("B3",attempt); if (this.isUnloaded) return; console.log("B4",attempt); console.log('结果:',res);// {errCode:0,errMsg:"connectWifi:ok",errno:0} if((this.userPhoneOS == 'ios' || res.errCode==0) && res.errMsg == 'connectWifi:ok'){ console.log("B5",attempt); this.wifiFlag=true; console.log("B6",attempt); // 连接成功后开始建立 TCP 连接 this.timers.timerB = setTimeout(()=>{ console.log("B7",attempt); try{ this.loading = false; console.log("B8",attempt); if (this.isUnloaded) return; console.log("B9",attempt); this.createTcpEsp(); console.log("B10",attempt); }catch(e){ console.log("B11",attempt); this.loading = false; console.log("B12",attempt); } },500) } } catch(err){ console.log("B101",attempt); console.log('catch结果:',err); console.log("B102",attempt); this.wifiFlag=false; console.log("B103",attempt); if (this.isWifiActive && attempt < 3) { console.log("B104",attempt); this.timers.timerC = setTimeout(() => { console.log("B105",attempt) if (this.isUnloaded) return; console.log("B106",attempt); this.connects(attempt + 1); console.log("B107",attempt); }, 2000 * attempt); console.log("B108",attempt); } else { console.log("B109",attempt); this.loading = false; console.log("B110",attempt); if (this.isUnloaded) return; console.log("B111",attempt); this.handleWifiConnectionError(err);//但是页面退出后这个方法依旧被执行了 console.log("B112",attempt); } console.log("B113",attempt); } }else{ console.log("B114",attempt); console.log("this.wifiFlag 为 true"); this.loading = false; console.log("B115",attempt); } console.log("B116",attempt); }, /** 连接设备wifi */ connwifi(deviceBSSID){ console.log("C1",deviceBSSID); return new Promise((resolve,reject) => { console.log("C2",deviceBSSID); wx.connectWifi({ SSID: deviceBSSID, password:'88888888', forceNewApi: true, success(res) { console.log("C3",deviceBSSID); console.log('res:',res); resolve(res); }, fail(err){ console.log("C4",deviceBSSID); console.log('err:',err); reject(err) }, }) console.log("C5",deviceBSSID); }) console.log("C6",deviceBSSID); },
09-18