49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
|
|
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
|
|||
|
|
}
|