146 lines
4.8 KiB
C#
146 lines
4.8 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
public class DeviceIdHandle : MonoBehaviour
|
||
{
|
||
private static DeviceIdHandle _instance;
|
||
private AndroidJavaObject oaidActivity;
|
||
|
||
class OaidCallbackProxy : AndroidJavaProxy
|
||
{
|
||
public OaidCallbackProxy() : base("com.example.oaidtest2.DemoHelper$OaidCallback") { }
|
||
|
||
void onResult(int code, string msg, string oaid, long durationMs)
|
||
{
|
||
if (code == 0)
|
||
{
|
||
Debug.Log($"OAID: {oaid} (耗时: {durationMs}ms)");
|
||
}
|
||
else
|
||
{
|
||
Debug.LogError($"OAID 获取失败: {msg}");
|
||
}
|
||
}
|
||
}
|
||
|
||
public static DeviceIdHandle Instance
|
||
{
|
||
get
|
||
{
|
||
if (_instance is null)
|
||
{
|
||
var go = new GameObject("DeviceIdHandle");
|
||
_instance = go.AddComponent<DeviceIdHandle>();
|
||
DontDestroyOnLoad(go);
|
||
}
|
||
|
||
return _instance;
|
||
}
|
||
}
|
||
|
||
// 原有方法保留
|
||
public void GetOAID()
|
||
{
|
||
if (oaidActivity == null)
|
||
{
|
||
// 获取当前的 Android Activity
|
||
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
||
{
|
||
oaidActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
|
||
}
|
||
}
|
||
|
||
// 调用 Android 的 GetOAID 方法
|
||
AndroidJavaObject utils = new AndroidJavaObject("com.example.oaidtest2.OAID_Activity");
|
||
utils.Call("GetOAID", gameObject.name, "OnOAIDReceived");
|
||
}
|
||
|
||
// 新增:从 Resources 加载证书并在调用 GetOAID 之前初始化 SDK(同步、用于快速验证)
|
||
// resourceName 为 Resources 下资源名(不含扩展名),例如文件 Assets/Resources/cert.pem -> resourceName = "cert"
|
||
public void GetOAID_FromResources(string resourceName = "com.phxh.official.nld.cert")
|
||
{
|
||
// 同步加载证书 TextAsset
|
||
TextAsset txt = Resources.Load<TextAsset>(resourceName);
|
||
if (txt == null)
|
||
{
|
||
Debug.LogError($"Load certificate failed: Resources/{resourceName} not found. Put your cert file under Assets/Resources and omit extension when calling.");
|
||
#if UNITY_EDITOR
|
||
// 在编辑器中为了便于调试,也可以输出示例路径
|
||
Debug.Log($"Editor path suggestion: Assets/Resources/{resourceName}.pem or .txt");
|
||
#endif
|
||
return;
|
||
}
|
||
|
||
string cert = txt.text;
|
||
if (string.IsNullOrEmpty(cert))
|
||
{
|
||
Debug.LogError("Certificate content is empty.");
|
||
return;
|
||
}
|
||
|
||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||
//获取当前 Android Activity 并调用插件初始化接口
|
||
try
|
||
{
|
||
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
||
{
|
||
oaidActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
|
||
}
|
||
|
||
AndroidJavaObject utils = new AndroidJavaObject("com.example.oaidtest2.OAID_Activity");
|
||
|
||
// 初始化/设置证书后再请求 OAID
|
||
utils.Call("GetOAID", gameObject.name, "OnOAIDReceived", cert);
|
||
}
|
||
catch (System.Exception e)
|
||
{
|
||
Debug.LogError("GetOAID_FromResources failed: " + e);
|
||
}
|
||
#else
|
||
Debug.Log("GetOAID_FromResources: certificate loaded (editor or non-Android). Android call skipped.\ncontent: " + cert);
|
||
#endif
|
||
}
|
||
|
||
public void GetIMEI()
|
||
{
|
||
if (oaidActivity == null)
|
||
{
|
||
// 获取当前的 Android Activity
|
||
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
||
{
|
||
oaidActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
|
||
}
|
||
}
|
||
|
||
// 调用 Android 的 GetOAID 方法
|
||
AndroidJavaObject utils = new AndroidJavaObject("com.example.oaidtest2.OAID_Activity");
|
||
utils.Call("GetIMEI", gameObject.name, "OnIMEIReceived");
|
||
}
|
||
|
||
// 回调方法,用于接收 OAID
|
||
private void OnOAIDReceived(string oaid)
|
||
{
|
||
Debug.Log("Received OAID: " + oaid);
|
||
}
|
||
|
||
// 回调方法,用于接收 IMEI
|
||
private void OnIMEIReceived(string imei)
|
||
{
|
||
Debug.Log("Received IMEI: " + imei);
|
||
}
|
||
|
||
public void Initialize()
|
||
{
|
||
var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
|
||
var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
|
||
var appContext = activity.Call<AndroidJavaObject>("getApplicationContext");
|
||
|
||
var helperClass = new AndroidJavaClass("com.example.oaidtest2.DemoHelper");
|
||
var helper = helperClass.CallStatic<AndroidJavaObject>("getInstance", appContext);
|
||
|
||
helper.Call("getOAID", new OaidCallbackProxy());
|
||
|
||
}
|
||
}
|