解决 IOS 获取不了 Wi-Fi 信息

这是我参与更文挑战的第1天,活动详情查看: 更文挑战

背景

IOS 系统升级到13之后,当用户没有同意开启定位权限是无法获取到手机的 Wi-Fi 的信息,我们如何绕过不开启权限也能获取到 Wi-Fi 信息呢,在不开启权限的情况下,原来小程序在是有这个能力的,具体方式我是在 IOS App 跳转到小程序,通过小程序获取到 Wi-Fi 信息,然后把信息回传给 IOS App,以下讲下关键技术点。

一、小程序获取 Wi-Fi 信息

在获取 Wi-Fi 列表之前必须先调用 wx.startWifi() 初始化 Wi-Fi 模块,成功回调后再调用 wx.getWifiList() 请求获取 Wi-Fi 列表,最后通过调用 wx.onGetWifiList() 在监听成功回调中获取到 Wi-Fi 列表数据。

代码示例:

   // 初始化 Wi-Fi 模块
    wx.startWifi({
      success(res) {
      
        // 请求获取 Wi-Fi 列表。
        wx.getWifiList({
          success (res) {

           // 监听获取到 Wi-Fi 列表数据事件
            wx.onGetWifiList(function (res) {
                this.data.wifiResult = res; // res 为返回的 Wi-Fi 信息列表
            })
          }
        })
      }
    })
复制代码

二、小程序传递 Wi-Fi 数据给 IOS App

小程序端:

需要将 button 组件 open-type 的值设置为 launchApp。如果需要在打开 App 时向 App 传递参数,可以设置 app-parameter 为要传递的参数。通过 binderror 可以监听打开 APP 的错误事件。

App 端:

App 需要接入 OpenSDK。 文档请参考 iOS / Android

Android 第三方 App 需要处理 ShowMessageFromWX.req 的微信回调,iOS 则需要将 appId 添加到第三方 app 工程所属的 plist 文件 URL types 字段。 app-parameter 的获取方法,参数解析请参考 Android SDKSample 中 WXEntryActivity 中的 onResp 方法以及 iOS SDKSample 中 WXApiDelegate 中的 onResp 方法。

小程序代码示例:

// wmxl 代码
  <view class="return">
    <button class="return-text" binderror="launchAppError" open-type="launchApp" app-parameter="wifiResult={{wifiResult}}">返回 APP</button>
  </view>
复制代码

@app-parameter=”wifiResult” ,wifiResult 是传参App的Wi-Fi信息。
@app-launchAppError=”launchAppError” ,回调错误场景信息。@open-type=”launchApp” ,触发打开 App(返回到App)

// js代码
Page({
 // 调用场景出错打印
  launchAppError (e) {
    console.log(e.detail.errMsg)
  }
})
复制代码

参考文档

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享