美文网首页
Unity杂文——Android设备唯一标识

Unity杂文——Android设备唯一标识

作者: 脸白 | 来源:发表于2023-10-01 01:21 被阅读0次

    原文地址

    简介

    获取设备唯一标识的方法。

    环境

    引用库的github地址:<font color=steelblue size=5>Android_CN_OAID</font>
    在Android最外层的bundel.gradle里添加下面依赖

    allprojects {
        repositories {
            '''
            maven { url 'https://www.jitpack.io' }
            ...
        }
    }
    

    在app或者library的bundel.gradle添加下面依赖

    dependencies {
    implementation 'com.github.gzu-liyujiang:Android_CN_OAID:<version>'
    }
    

    <version>这里换成自己需要的版本

    代码

    引用的库的初始化

    在Application或者Active的onCreate里添加下面代码:

    @Override
    public void onCreate() {
        super.onCreate();
        if (privacyPolicyAgreed) {
            ...
            DeviceIdentifier.register(<Application>);
            ...
        }
    }
    

    <Application>这里替换成自己程序的application

    调用

    需要的变量:

    //设备唯一标识
    private static String deviceId;
    //设备唯一标识文件名字
    private static String deviceIdFileName = "all_in_sdk";
    //设备唯一标识缓存关键字key
    private static String deviceIdKey = "DeviceId";
    //设备唯一标识正则
    private static final Pattern ANDROID_ID_PATTERN = Pattern.compile("^[0-9a-fA-F]{16}$");
    

    获取的方法:

    //获取设备的唯一标识
    public static String GetDeviceID() {
        if(m_Activity == null){
            m_Activity = UnityPlayer.currentActivity;
        }
        Application application = m_Activity.getApplication();
        if (application == null)
            return "";
        if (deviceId != null)
            return deviceId;
        deviceId = getSPValue((Context)application, deviceIdKey);
        if (!TextUtils.isEmpty(deviceId))
            return deviceId;
        deviceId = getAndroidIdAsDeviceId((Context)application);
        if (!TextUtils.isEmpty(deviceId)) {
            saveSPValue((Context)application, deviceIdKey, deviceId);
            return deviceId;
        }
        deviceId = generateSoftDeviceId();
        if (!TextUtils.isEmpty(deviceId)) {
            saveSPValue((Context)application, deviceIdKey, deviceId);
            return deviceId;
        }
        return deviceId;
    }
    private static String getSPValue(Context paramContext, String paramString) {
        SharedPreferences sharedPreferences = paramContext.getSharedPreferences(deviceIdFileName, 0);
        return sharedPreferences.getString(paramString, null);
    }
    
    private static String getAndroidIdAsDeviceId(Context paramContext) {
        String str;
        if(DeviceID.supportedOAID(m_Activity))
        {
            str = DeviceIdentifier.getOAID(m_Activity);
            if (isLegalAndroidId(str, true))
                return str;
        }
        str = DeviceIdentifier.getAndroidID(m_Activity);
        if (isLegalAndroidId(str, true))
            return str;
        str = DeviceIdentifier.getIMEI(m_Activity);
        if (isLegalAndroidId(str, true))
            return str;
        str = DeviceIdentifier.getWidevineID();
        if (isLegalAndroidId(str, true))
            return str;
        str = DeviceIdentifier.getPseudoID();
        if (isLegalAndroidId(str, true))
            return str;
        str = DeviceIdentifier.getGUID(m_Activity);
        if (isLegalAndroidId(str, true))
            return str;
        return null;
    }
    
    private static String generateSoftDeviceId() {
        String str1 = Build.SERIAL;
        String str2 = !TextUtils.isEmpty(str1) ? str1 : "NA";
        try {
            long l1 = 1152921504606846976L;
            long l2 = randomLong(Long.MAX_VALUE - l1) + l1;
            return String.format("%1$s_%2$s", new Object[] { Long.toHexString(l2), str2 });
        } catch (Throwable throwable) {
            return String.format("%1$s_%2$s", new Object[] { "NA" + Long.toHexString(System.currentTimeMillis()), str2 });
        }
    }
    
    private static void saveSPValue(Context paramContext, String paramString1, String paramString2) {
        SharedPreferences sharedPreferences = paramContext.getSharedPreferences(deviceIdFileName, 0);
        sharedPreferences.edit().putString(paramString1, paramString2).apply();
    }
    private static long randomLong(long paramLong) {
        if (Build.VERSION.SDK_INT >= 21)
            return ThreadLocalRandom.current().nextLong(paramLong);
        return (long)((new Random()).nextDouble() * (paramLong - 1L));
    }
    private static boolean isLegalAndroidId(String paramString, boolean paramBoolean) {
        if (paramBoolean)
            return (!TextUtils.isEmpty(paramString) && ANDROID_ID_PATTERN
                    .matcher(paramString).find());
        return (!TextUtils.isEmpty(paramString) && ANDROID_ID_PATTERN
                .matcher(paramString).find());
    }

    相关文章

      网友评论

          本文标题:Unity杂文——Android设备唯一标识

          本文链接:https://www.haomeiwen.com/subject/wvdkbdtx.html