fix:小程序获取wifi兼容iso设备
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
<script setup>
|
||||
import { ref, computed, onMounted, onUnmounted } from "vue";
|
||||
import { onShow } from "@dcloudio/uni-app";
|
||||
import Container from "@/components/Container.vue";
|
||||
|
||||
const STATES = {
|
||||
@@ -52,13 +53,76 @@ const showWifiPermissionDeniedModal = () => {
|
||||
});
|
||||
};
|
||||
|
||||
// 启动小程序 WiFi 能力并监听真实 WiFi 列表。
|
||||
// 将 iOS 当前手机连接的 WiFi 写入候选列表,供用户继续填写设备连接密码。
|
||||
const applyIOSConnectedWifi = (wifi) => {
|
||||
const ssid = wifi?.SSID;
|
||||
if (!ssid) {
|
||||
wifiList.value = [];
|
||||
currentState.value = STATES.LIST;
|
||||
return;
|
||||
}
|
||||
|
||||
wifiList.value = [
|
||||
{
|
||||
...wifi,
|
||||
SSID: ssid,
|
||||
secure: wifi.secure !== false,
|
||||
fromCurrentWifi: true,
|
||||
},
|
||||
];
|
||||
currentState.value = STATES.LIST;
|
||||
};
|
||||
|
||||
// 获取 iOS 当前手机连接的 WiFi,并把它作为可选网络展示。
|
||||
const syncIOSConnectedWifi = () => {
|
||||
wx.getConnectedWifi({
|
||||
success(res) {
|
||||
console.log("[OTA WiFi] wx.getConnectedWifi success:", res);
|
||||
applyIOSConnectedWifi(res.wifi || res);
|
||||
},
|
||||
fail(err) {
|
||||
console.warn("[OTA WiFi] wx.getConnectedWifi fail:", {
|
||||
errCode: err?.errCode,
|
||||
errMsg: err?.errMsg,
|
||||
err,
|
||||
});
|
||||
wifiList.value = [];
|
||||
currentState.value = STATES.LIST;
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
// 启动 iOS WiFi 能力;iOS 只用当前手机连接的 WiFi 作为候选网络。
|
||||
const startIOSScanning = () => {
|
||||
wx.startWifi({
|
||||
success(res) {
|
||||
console.log("[OTA WiFi] wx.startWifi success:", res);
|
||||
syncIOSConnectedWifi();
|
||||
},
|
||||
fail(err) {
|
||||
console.error("[OTA WiFi] wx.startWifi fail:", {
|
||||
errCode: err?.errCode,
|
||||
errMsg: err?.errMsg,
|
||||
err,
|
||||
});
|
||||
if (err.errCode === 12005) showWifiBanner.value = true;
|
||||
currentState.value = STATES.LIST;
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
// 启动小程序 WiFi 能力并按平台获取可用网络。
|
||||
const startScanning = () => {
|
||||
currentState.value = STATES.SCANNING;
|
||||
wifiList.value = [];
|
||||
showWifiBanner.value = false;
|
||||
connectError.value = "";
|
||||
|
||||
if (isIOS) {
|
||||
startIOSScanning();
|
||||
return;
|
||||
}
|
||||
|
||||
wx.startWifi({
|
||||
success(res) {
|
||||
console.log("[OTA WiFi] wx.startWifi success:", res);
|
||||
@@ -144,30 +208,27 @@ const wifiListScrollHeight = computed(() => {
|
||||
return `${Math.min(itemCount * 92, maxHeight)}rpx`;
|
||||
});
|
||||
|
||||
// 提交 WiFi 配置给游戏设备;后端接口未接入前只提示占位信息并停留在弹窗。
|
||||
const submitDeviceWifiConfig = ({ ssid, password }) => {
|
||||
console.log("[OTA WiFi] submit device wifi config pending:", {
|
||||
ssid,
|
||||
hasPassword: !!password,
|
||||
});
|
||||
connectError.value = "设备连接接口待接入";
|
||||
uni.showToast({
|
||||
title: "设备连接接口待接入",
|
||||
icon: "none",
|
||||
});
|
||||
};
|
||||
|
||||
// 校验用户输入并提交 WiFi 配置,不再把手机连接结果当作设备连接成功。
|
||||
const joinNetwork = () => {
|
||||
if (joinDisabled.value) return;
|
||||
connectError.value = "";
|
||||
const ssid = connectInput.value.ssid;
|
||||
const password = connectInput.value.password;
|
||||
|
||||
wx.connectWifi({
|
||||
SSID: ssid,
|
||||
password,
|
||||
success() {
|
||||
connectedWifi.value = { SSID: ssid, secure: !!password };
|
||||
currentState.value = STATES.CONNECTED;
|
||||
},
|
||||
fail() {
|
||||
connectError.value = `无法查找到网络"${ssid}",请检查网络名称与设置!`;
|
||||
},
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
if (currentState.value === STATES.CONNECTING && !connectError.value) {
|
||||
connectedWifi.value = { SSID: ssid, secure: !!password };
|
||||
currentState.value = STATES.CONNECTED;
|
||||
}
|
||||
}, 1000);
|
||||
submitDeviceWifiConfig({ ssid, password });
|
||||
};
|
||||
|
||||
const startUpdate = () => {
|
||||
@@ -233,6 +294,13 @@ onMounted(() => {
|
||||
startScanning();
|
||||
});
|
||||
|
||||
// iOS 从系统 WiFi 设置返回小程序后,同步当前手机连接的 WiFi。
|
||||
onShow(() => {
|
||||
if (isIOS && currentState.value === STATES.LIST) {
|
||||
syncIOSConnectedWifi();
|
||||
}
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
clearInterval(progressTimer);
|
||||
clearTimeout(timeoutTimer);
|
||||
@@ -262,8 +330,8 @@ onUnmounted(() => {
|
||||
</text>
|
||||
<text v-if="currentState !== 'CONNECTED'" class="page-subtitle">网络名称仅支持英文字符及数字</text>
|
||||
|
||||
<view v-if="isIOS && currentState === 'SCANNING'" class="ios-guide">
|
||||
<text class="ios-guide-text">请在设备 WiFi 设置中完成扫描后返回</text>
|
||||
<view v-if="isIOS && currentState !== 'CONNECTED'" class="ios-guide">
|
||||
<text class="ios-guide-text">请先在系统 WiFi 设置中连接目标网络,返回后选择当前 WiFi 并填写密码</text>
|
||||
</view>
|
||||
|
||||
<!-- 已连接网络卡片 -->
|
||||
|
||||
Reference in New Issue
Block a user