using System;
using System.Runtime.InteropServices;
using UnityEngine;
///
/// iOS WiFi 名称异步获取辅助类。
/// 自动请求位置权限(iOS 14+ NEHotspotNetwork 需要),
/// 用户授权后回调返回当前连接的 WiFi 名称,无需重新打开页面。
///
public class iOSWiFiHelper : MonoBehaviour
{
private static iOSWiFiHelper _instance;
private static Action _callback;
///
/// 请求位置权限并获取当前 WiFi 名称,授权后异步回调。
///
/// 回调参数为 WiFi SSID,获取失败或用户拒绝时为 null
public static void RequestWiFiSSID(Action callback)
{
_callback = callback;
#if UNITY_IOS && !UNITY_EDITOR
EnsureInstance();
RequestWiFiSSIDNative(_instance.name, "OnWiFiSSIDResult");
#endif
}
private static void EnsureInstance()
{
if (_instance != null) return;
var go = new GameObject("iOSWiFiHelper");
DontDestroyOnLoad(go);
_instance = go.AddComponent();
}
/// 原生层通过 UnitySendMessage 回调此方法
public void OnWiFiSSIDResult(string ssid)
{
var cb = _callback;
_callback = null;
cb?.Invoke(string.IsNullOrEmpty(ssid) ? null : ssid);
}
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
private static extern void RequestWiFiSSIDNative(string gameObjectName, string methodName);
#endif
}