这是我参与更文挑战的第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)
}
})
复制代码