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 }