收藏
回答

iPhone connectWifi 的 success 回调触发错误

问题模块 框架类型 问题类型 操作系统 操作系统版本 手机型号 微信版本
客户端 小程序 Bug iOS iOS 11+ 任一iPhone型号 涵盖多个微信版本

- 代码逻辑:

  1. 目的: 因为扫码连 Wifi (按照官方的步骤, startWIfi => connectWifi 且在 iOS 11+上测试; iOS 11-上的报错:"connectWifi:fail the api is only supported in iOS 11 or above; 直接被忽略)经测试发现错误率很高, 达到了 50%甚至 60%, 因此我打算在错误的回调中埋点进行错误上报, 逐个优化;

  2. 前提: 因为社区中有人反馈和实际验证后得知, iOS connectWifi API 走到 success 后, 此时可能并未连接上 Wifi, 因此此时进行下一步的操作不可靠, 因此 connectWIfi 的触发 succss 回调后, 我会用 setTimeout 延迟 100ms, 调用 getNetworkType API 进行网络状态检测, 当发现为不是 wifi 类型的时候, 上报埋点错误信息;

  3. 有人建议我监听 onWifiConnected 状态; iPhone 可行, 但是为非官方建议, 不可靠;

  4. 另外安卓机型在 wifi 连接成功后, 会多次触发 onWifiConnected 回调, 前几次回调 BSSID 和 SSID 会为空, 最终触发该回调才会有值, 奇葩;

- 当前 Bug 的表现(可附上截图)

  1. onConnect success 回调的时候, 并未连接上 wifi, 100ms 后检测 wifi 类型,仍然是非 wifi 状态, 而且此现象在iPhone的各种机型上(从iPhone6~iPhone X Max)复现率高达 98%, 目前100个中只看到两个 iPhone 7 是正常的(即connectWifi 的 success 后 100ms 检测wifi 状态是 wifi;


- 预期表现

  1. connectWifi 的 success 回调调用的时候, 即代表 wifi 连接成功;

  2. 请告知, 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) {}


最后一次编辑于  2018-12-03  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

3 个回答

  • 社区技术&运营专员-白柿子
    社区技术&运营专员-白柿子
    2018-12-03

    麻烦按照教程提供下代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    2018-12-03
    赞同
    回复 2
    • Xheldon🛹
      Xheldon🛹
      2018-12-03

      FYI

      2018-12-03
      回复
    • 李志岩
      李志岩
      05-09

      您好想问一下这个问题解决了吗,这面ios12.2部分手机也一直出现这个问题,而且ssid都根本没有切换,求官方给个答复!

      05-09
      回复
  • 梨扬
    梨扬
    07-12

    遇到同样的问题了,现在这个问题怎么处理的

    07-12
    赞同
    回复
  • 王翊夫if
    王翊夫if
    2018-12-03

    请告知, connectWifi success 回调触发的时候, 多久才能真正连上wifi(不要欺骗开发者)

    ===============================

    iOS上,connectWifi 是调用系统发起连接 WiFi 请求行为,返回的是发起这个行为的结果。连接上 WiFi 的耗时,取决于你的手机与你的路由器之间连接的速度,不同设备是不一样的。

    之前我一般建议开发者,调用 connectWifi 后,监听 onWiFiConnected 事件看是否能成功,并加一个超时的 timeout 来判定连接失败事件。

    如果是以 (不要欺骗开发者) 的角度来讲,我也不理解我们有什么理由要欺骗开发者,小程序硬件相关接口都是尽可能系统 api 的调用与返回结果的,尽可能不因为小程序中间层的封装问题导致硬件开发者的开发不便。


    另附 iOS 系统对于 connectWifi 有可能返回的错误情况,有兴趣可以看看。


     * @const NEHotspotConfigurationErrorInvalid The Wi-Fi configuration is invalid

     * @const NEHotspotConfigurationErrorInvalidSSID The given SSID string is invalid.

     * @const NEHotspotConfigurationErrorInvalidWPAPassphrase The given WPA/WPA2 Personal passphrase is invalid.

     * @const NEHotspotConfigurationErrorInvalidWEPPassphrase The given WEP passphrase is invalid.

     * @const NEHotspotConfigurationErrorInvalidEAPSettings  Invalid EAP Settings.

     * @const NEHotspotConfigurationErrorInvalidHS20Settings Invalid Hotspot 2.0 Settings.

     * @const NEHotspotConfigurationErrorInvalidHS20DomainName The given Hotspot 2.0 domain name is invalid.

     * @const NEHotspotConfigurationErrorUserDenied Failed to get the user's approval to add a new configuration.

     * @const NEHotspotConfigurationErrorInternal An internal error was encountered.

     * @const NEHotspotConfigurationErrorPending Previous request by the calling application is pending.

     * @const NEHotspotConfigurationErrorSystemConfiguration The calling application cannot modify the System(MDM/Carrier) configuration.

     * @const NEHotspotConfigurationErrorUnknown An unknown configuration error occurred.

     * @const NEHotspotConfigurationErrorJoinOnceNotSupported JoinOnce option is not support for EAP configuration.

     * @const NEHotspotConfigurationErrorAlreadyAssociated Wi-Fi is already associated.

     * @const NEHotspotConfigurationErrorApplicationIsNotInForeground The application is not in the foreground.





    2018-12-03
    赞同
    回复