文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

获取android手机设备的OAID

2022-06-06 13:11

关注

一、简介:

因传统的移动终端设备标识如国际移动设备识别码(IMEI)等已被部分国家认定为用户隐私的一部分,并存在被篡改和冒用的风险,所以在Android
10及后续版本中非厂商系统应用将无法获取IMEI、MAC等设备信息。无法获取IMEI会在用户行为统计过程中对设备识别产生一定影响。

近日移动安全联盟针对该问题联合国内手机厂商推出补充设备标准体系方案,选择OAID字段作为IMEI等的替代字段。OAID字段是由中国信通院联合华为、小米、OPPO、VIVO等厂商共同推出的设备识别字段,具有一定的权威性,可满足用户行为统计的使用场景。(可能存在的问题:部分厂商还没有支持,不过随着更新版本,越来越多的手机已经纳入到兼容范围了)

二、获取方法 1、SDK获取

(获取地址)拉到最下面,如下截图
在这里插入图片描述

2.调用方法

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

2、将 supplierconfig.json 拷贝到项目 assets 目录下,并修改 边对应内容,特别是需要设置 appid 的部分。需要设置 appid 的部分需要去对应厂商的应用商店 注册自己的 app。

3、设置依赖

implementation files(‘libs/miit_mdid_x.x.x.aar’)

4、混淆设置

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

5、设置 gradle 编译选项,这块可以根据自己对平台的选择进 合 配置(如不需要,跳过即可)

ndk {
abiFilters 'armeabi-v7a','x86','arm64-v8a','x86_64','armeabi'
}
packagingOptions {
doNotStrip "*/armeabi-v7ax86arm64-v8ax86_64/*.so"
doNotStrip "armeabi.so"
}

6、代码调用

(1)初始化 sdk

在应用的 application 的 onCreate 中方法调用方法:

JLibrary.InitEntry(base);

在这里插入图片描述
(2)获取设备 ID,有两种方法调用,事例代码详见附件 MiitHelper.java(下载的SDK中包含MiitHelper类)

既然方法一不推荐,咱们直接删除,跳过看方法二;

方法一

b1:直接调用,由于安卓 9 以后类加载的限制,所以安卓 9 以后不建议采 用,如需使用,需要做 MdidSdk.InitSdk 和
JLibrary.InitEntry()不能在一个类 里,还要注意包含这两个调用的类不能有依赖关系。 private int
DirectCall(Context cxt){ MdidSdk sdk = new MdidSdk(); return
sdk.InitSdk(cxt,this); }

方法二:

b2:反射调用,它的好处是 android 版本号无关,缺点是调用时间估计会长(经过测试跟直接调用在用时上区别不大。)

 MdidSdkHelper.InitSdk(context, true, new MiitHelper(new MiitHelper.AppIdsUpdater() {
      @Override
      public void OnIdsAvalid(@NonNull String ids) {
       //根方法中,我们如果只需要oaid,则只获取oaid即可
       // String oaid=_supplier.getOAID();
       String oaid = ids;
     }
 }));

(3)初始化 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 反射调用失败

三. IdSupplier 接口说明

补充设备标识获取接口包括补充设备标识状态获取接口、匿名设备标识符获取接口、开发者匿名设备标识符获取接口、应用匿名设备标识符获取接口和关闭接口。

1、补充设备标识状态获取接口
该接口用于获取移动智能终端是否支持补充设备标识体系,确认支持后,可以继续获取所需设备标识符。
public boolean isSupported()参数 返回 说明无 boolean:是否支持补充设备标识符获取 true 为支持,false 为不支持
2、匿名设备标识符获取接口
在这里插入图片描述
3、开发者匿名设备标识符获取接口
String getVAID()参数 返回 说明无 String:返回开发者匿名设备 开发者匿名设备标识符最长标识符或空字符串 64 位,返回空字符串表示不支持,异常状态包括网络异常、appid 异常、应用异常等
在这里插入图片描述
4、应用匿名设备标识符获取接口
在这里插入图片描述

5、关闭接口
在这里插入图片描述

四. 使用建议 1、调用 MdidSdk 的 InitSdk 后,先检查返回值,如果返回值是不支持的设备或厂商,监听器也不会触发,如果是加载配置文件失败,联系我们的客服。 2、VAID/AAID 在初次调用时生成,生成需要访问网络,请确保网络通畅并可 访问公网。 3、同一设备中存有多个同一开发者应用,若需在单个应用卸载时保证 VAID不被重置,需在应用被卸载前,已有另外同一开发者 ID 的应用也读取过 VAID, 否则认定该开发者无需使用 VAID,值将被重置。 4、部分厂商,若应用未在其开发者平台后台上架,则认定未非法应用,无法 生成 VAID,手机 LOG 中将会有相关异常值输出。 5、在用户手机处于弱网、无法访问公网或非法应用情形下频繁调用 VAID 和 AAID 读取接口,终端会累计其调用次数,并限时限制其读取。 6、由于返回值可能为 null,使用逻辑判断中建议做判空处理。 7、若有表一中的异常出现,会有相关 Log 打出。 8、INIT_ERROR_DEVICE_NOSUPPORT 和 INIT_HELPER_CALL_ERROR 这两个暂时不会走回调,后续会调整。
作者:Chelsea0522


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯