Unity安卓生成设备唯一id

目标:生成唯一id,重启后生成仍旧相同。
其实可以使用GAID等来源于其他SDK的唯一id,但是为了一个UUID而接入一些SDK,好像也不太对
这里参考网上一些内容,通过设备相关信息,生成UUID。作为唯一id

相关代码和aar已经打包成一份package了:代码+样例下载

android的代码:

    public String GetSerial()
    {
        String serial = "";
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                serial = Build.getSerial();
            } else {
                serial = Build.SERIAL;
            }
            return serial;
        } catch (Exception exception) {
            //serial需要一个初始化
            serial = "serial"; // 随便一个初始化
            return serial;
        }
    }
    
 public String GetUUIDCustom(String serial){
        String m_szDevIDShort = "35" +
                Build.BOARD.length()%10+ Build.BRAND.length()%10 +

                Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +

                Build.DISPLAY.length()%10 + Build.HOST.length()%10 +

                Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +

                Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +

                Build.TAGS.length()%10 + Build.TYPE.length()%10 +

                Build.USER.length()%10 ; //13 位
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }

Unity的代码:

	/// <summary>
	/// 根据设备信息生成一个UUID,如果能拿到serial就用serial生成,如果没拿到那就用deviceUniqueIdentifier生成
	/// </summary>
	/// <returns></returns>
	static public string DeviceUUID()
	{

#if UNITY_ANDROID
		if (instance == null)
		{
			instance = new UUIDHelper();
			instance.Init();
		}
		if(serial == "serial")
		{
			string unity_devid = UnityDeviceId();
			return CustomUUID(unity_devid);
		}
		string uuid = instance.java_obj.Call<string>("GetUUID");
		uuid = uuid.Replace("-", "");
		return uuid;
#else
		return SystemInfo.deviceUniqueIdentifier;
#endif
	}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity中生成唯一id的方法有多种。一种方法是使用设备相关信息来生成UUID。这个方法可以根据设备信息生成一个唯一的UUID。如果可以获取到设备序列号(serial),就用序列号生成UUID,否则就使用设备的唯一标识符(deviceUniqueIdentifier)来生成UUID。这个方法是通过Unity的代码实现的。具体的代码实现如下所示: ```csharp static public string DeviceUUID() { #if UNITY_ANDROID if (instance == null) { instance = new UUIDHelper(); instance.Init(); } if(serial == "serial") { string unity_devid = UnityDeviceId(); return CustomUUID(unity_devid); } string uuid = instance.java_obj.Call<string>("GetUUID"); uuid = uuid.Replace("-", ""); return uuid; #else return SystemInfo.deviceUniqueIdentifier; #endif } ``` 另一种方法是使用Android系统提供的API来获取设备的唯一标识码。这个方法可以通过获取设备的一些硬件信息来生成一个虚拟的唯一标识码。具体的代码实现如下所示: ```java /** * 返回唯一的虚拟 ID * @return ID */ public void getUniquePsuedoID() { String m_szDevIDShort = "35" + (Build.BOARD.length() % 10) + (Build.BRAND.length() % 10) + (Build.CPU_ABI.length() % 10) + (Build.DEVICE.length() % 10) + (Build.MANUFACTURER.length() % 10) + (Build.MODEL.length() % 10) + (Build.PRODUCT.length() % 10); String serial = null; try { serial = android.os.Build.class.getField("SERIAL").get(null).toString(); UnityPlayer.UnitySendMessage("ScriptHolder", "GetUUID", new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString()); return; } catch (Exception exception) { serial = "serial"; } UnityPlayer.UnitySendMessage("ScriptHolder", "GetUUID", new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString()); } ``` 除了上述方法之外,还可以使用Objective-C来生成UUID。可以通过调用UUIDTool类中的方法来获取UUID。具体的代码实现如下所示: ```objective-c #import <Foundation/Foundation.h> @interface UUIDTool : NSObject /** * 普通的获取UUID的方法 */ + (NSString *)getUUID; /** * 获取到UUID后存入系统中的keychain中,保证以后每次可以得到相同的唯一标志 * 不用添加plist文件,当程序删除后重装,仍可以得到相同的唯一标示 * 但是当系统升级或者刷机后,系统中的钥匙串会被清空,再次获取的UUID会与之前的不同 * @return keychain中存储的UUID */ + (NSString *)getUUIDInKeychain; /** * 删除存储在keychain中的UUID * 如果删除后,重新获取用户的UUID会与之前的UUID不同 */ + (void)deleteKeyChain; @end ``` 以上是一些在Unity中生成唯一id的方法,您可以根据您的具体需求选择其中的一种方法来使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值