killapp/Assets/Scripts/iOSWiFiHelper.cs

49 lines
1.5 KiB
C#
Raw Normal View History

using System;
using System.Runtime.InteropServices;
using UnityEngine;
/// <summary>
/// iOS WiFi 名称异步获取辅助类。
/// 自动请求位置权限iOS 14+ NEHotspotNetwork 需要),
/// 用户授权后回调返回当前连接的 WiFi 名称,无需重新打开页面。
/// </summary>
public class iOSWiFiHelper : MonoBehaviour
{
private static iOSWiFiHelper _instance;
private static Action<string> _callback;
/// <summary>
/// 请求位置权限并获取当前 WiFi 名称,授权后异步回调。
/// </summary>
/// <param name="callback">回调参数为 WiFi SSID获取失败或用户拒绝时为 null</param>
public static void RequestWiFiSSID(Action<string> 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<iOSWiFiHelper>();
}
/// <summary>原生层通过 UnitySendMessage 回调此方法</summary>
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
}