收藏
回答

微信更新8.0.60后,小程序调用wx.connectWifi连接ESP8266时连接不上。

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.connectWifi(Object object) 微信安卓客户端 8.0.60 3.8.7

问题:微信版本由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。

接口调用时序为:

  1. startWifi: 初始化 Wi-Fi 模块
  2. connectWifi: 连接 Wi-Fi(iOS 需 11 及以上版本支持)
  3. 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);
			},
回答关注问题邀请回答
收藏

2 个回答

  • 社区技术运营专员--阳光
    社区技术运营专员--阳光
    2天前

    已知问题,后续修复

    2天前
    有用
    回复 1
    • 曲奇
      曲奇
      1天前
      啥时候能修复好
      1天前
      回复
  • Mix拿铁
    Mix拿铁
    星期五 10:14

    我们也碰到了相同的问题,请官方同学关注一下

    星期五 10:14
    有用
    回复
登录 后发表内容