iPhone connectWifi 的 success 回调触发错误
- 代码逻辑:
目的: 因为扫码连 Wifi (按照官方的步骤, startWIfi => connectWifi 且在 iOS 11+上测试; iOS 11-上的报错:"connectWifi:fail the api is only supported in iOS 11 or above; 直接被忽略)经测试发现错误率很高, 达到了 50%甚至 60%, 因此我打算在错误的回调中埋点进行错误上报, 逐个优化;
前提: 因为社区中有人反馈和实际验证后得知, iOS connectWifi API 走到 success 后, 此时可能并未连接上 Wifi, 因此此时进行下一步的操作不可靠, 因此 connectWIfi 的触发 succss 回调后, 我会用 setTimeout 延迟 100ms, 调用 getNetworkType API 进行网络状态检测, 当发现为不是 wifi 类型的时候, 上报埋点错误信息;
有人建议我监听 onWifiConnected 状态; iPhone 可行, 但是为非官方建议, 不可靠;
另外安卓机型在 wifi 连接成功后, 会多次触发 onWifiConnected 回调, 前几次回调 BSSID 和 SSID 会为空, 最终触发该回调才会有值, 奇葩;
- 当前 Bug 的表现(可附上截图)
onConnect success 回调的时候, 并未连接上 wifi, 100ms 后检测 wifi 类型,仍然是非 wifi 状态, 而且此现象在iPhone的各种机型上(从iPhone6~iPhone X Max)复现率高达 98%, 目前100个中只看到两个 iPhone 7 是正常的(即connectWifi 的 success 后 100ms 检测wifi 状态是 wifi;
- 预期表现
connectWifi 的 success 回调调用的时候, 即代表 wifi 连接成功;
请告知, connectWifi success 回调触发的时候, 多久才能真正连上wifi(不要欺骗开发者)
- 复现路径
暂无
- 提供一个最简复现 Demo
wx.startWifi({ success() { console.log('初始化wifi成功'); wx.connectWifi({ BSSID: '随便', SSID: wifiName, password: wifiPwd, success(res) { console.log('连接wifi可能成功', res); setTimeout(() => { wx.getNetworkType({ success(res) { console.log('网络状态:', res); if (res.networkType !== 'wifi') { if (hasTryConnect) { // 微信返回连接成功, 但是检测 wifi 状态后发现未成功则上报错误 } } else { } } }); }, 100); }, fail(err) { } }); }, fail(res) {} |
