Android获取OAID

目录

写在最前面

写在前面

说明文档

SDK使用过程:

代码实现


 

写在最前面

      看评论有好些朋友遇到了一些我没遇到的问题,而且看官方文档也已经更新,想着这些问题官方是不是已经优化解决了,就按着最新的文档把项目重新捋了一遍。基于《移动智能终端补充设备标识体系统一调用SDK开发者说明文档v1.10》和miit_mdid_1.0.10.aar 更新了一下项目。项目地址:GitHub  https://github.com/haoguibao/OaidDemo/tree/master

      文档和sdk我放网盘了。链接: https://pan.baidu.com/s/1bAoi8h2s2DTO1vWKPdkmQg 提取码: mia1   当然了官网上也能找到最新的文档和sdk来下载(官网地址:http://www.msa-alliance.cn/ )。另外编译了一个可运行的OaidDemo.apk,也在上面网盘里面放着,可以直接安装一下运行看行不行。

       把之前项目中获取IMEI和权限等代码删除了,仅保留了获取OAID的方法,仅供参考。

       现在是腊月廿七,再有几天就要过年了,提前祝大家新年快乐,身体健康,发财不发福!(* ̄︶ ̄)

 

****************************************************以下是原文********************************************************

写在前面

前段时间在登录vivo开放平台时,看见官方发公告了,以后逐渐要禁止获取IMEI,使用OAID(匿名设备标识符)来替代IMEI在app的作用(另外我们也可以获取VAID和AAID,下文会提到),所以找到官方文档,写个获取OAID的Demo,权当为以后替换IMEI做个铺垫。

Android获取OAID_第1张图片

说明文档

下面的内容基于《移动智能终端补充设备标识体系统一调用SDK开发者说明文档v1.9》来展开,后期官方文档也会持续更改,如需获取最新文档或sdk,请关注移动安全联盟MSA官网:http://www.msa-alliance.cn/

SDK支持的终端范围:(具体支持时间得看相应厂商的正式公告)

厂商 版本
小米 MIUI10.2 及以上
vivo FuntouchOS 9 及以上
华为 全版本
OPPO Color OS 7.0 及以上(10月份正式支持)
Lenovo ZUI 11.4 及以上(10月中旬正式支持)
华硕 Android Q(10月份会正式支持)
魅族 10月份将支持
三星 10月份将支持
中兴 10月份将支持
努比亚 10月份将支持

术语和定义:

英文缩写 中文名称 英文全称 长度
IMEI 国际移动设备识别码 International Mobile Equipment Identity 15~17位
UDID 设备唯一标识符 Unique Device Identifier 最长64位
OAID 匿名设备标识符 Open Anonymous Device Identifier 最长64位
VAID 开发者匿名设备标识符 Vender Anonymous Device Identifier 最长64位
AAID 应用匿名设备标识符 Application Anonymous Device Identifier 最长64位

SDK使用过程:

目前(截止2019-9-29)最新sdk链接: https://pan.baidu.com/s/1C9k9ntev300-z7FzaZfkYw 提取码: 6qv2

1、把 miit_mdid_x.x.x.aar 拷贝到项的 libs 目录,并设置依赖,其中 x.x.x代表版本号。

2、将 supplierconfig.json 拷贝到项目 assets 目录下。(暂时不用修改,只需原样放到assets目录下即可,这个是给未来做准备的。如果想要使用VAID,可修改里边对应内容,特别是需要设置 appid 的部分,要去对应厂商的应用商店里注册自己的 app,来获取对应appid。)

3、设置依赖

implementation files('libs/miit_mdid_x.x.x.aar')

4、设置混淆(不需混淆的可忽略)

-keep class com.bun.miitmdid.core.** {*;}

5、设置gradle编译选项。(自己合理配置即可,大家在项目中大都已经配置过)

6、代码调用

     a、初始化SDK

           在应用的 application 的 attachBaseContext方法中调用方法: JLibrary.InitEntry(base);

     b、获取设备ID,详见OaidDemo中的MiitHelper.java 。(可以直接把MiitHelper.java类复制到自己的项目中)

    /*
     * 通过反射调用,解决android 9以后的类加载升级,导至找不到so中的方法
     *
     * */
    private int CallFromReflect(Context cxt) {
        return MdidSdkHelper.InitSdk(cxt, true, this);
    }

      c、初始化sdk时可能返回的错误码

错误信息 说明
INIT_ERROR_MANUFACTURER_NOSUPPORT 1008611 不支持的厂商
INIT_ERROR_DEVICE_NOSUPPORT 1008612 不支持的设备
INIT_ERROR_LOAD_CONFIGFILE 1008613 加载配置文件出错
INIT_ERROR_RESULT_DELAY 1008614 信息将会延迟返回,获取数据可能在异步线程,取决于设备
INIT_HELPER_CALL_ERROR 1008615 反射调用出错

代码实现

Demo已经上传GitHub,链接:https://github.com/haoguibao/OaidDemo/tree/master

具体的获取调用代码在DevicesUtil.java类里面,整合了获取OAID,IMEI,AndroidId和UUID等方法。

获取的标识符优先级为oaid > IMEI > AndroidId

    /**
     * 获取唯一标识idfa
     * 

* 支持获取oaid的,优先获取oaid, * 其次是IMEI, * 如果没有得到IMEI权限,则获取AndroidId * * @param context * @return */ public static String getIdfa(Context context) { String idfa; if (MyApplication.isSupportOaid()) { idfa = MyApplication.getOaid(); } else { idfa = getUniqueId(context); } return idfa; }

写了半天,发现就跟抄了一遍文档一样(捂脸),权当是篇笔记吧。

你可能感兴趣的:(♠,Android,……【番外篇】,oaid,imei,android唯一标识符)