Android获取OAID

2023-05-16

目录

写在最前面

写在前面

说明文档

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做个铺垫。

说明文档

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

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

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

术语和定义:

英文缩写中文名称英文全称长度
IMEI国际移动设备识别码International Mobile Equipment Identity15~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_NOSUPPORT1008611不支持的厂商
INIT_ERROR_DEVICE_NOSUPPORT1008612不支持的设备
INIT_ERROR_LOAD_CONFIGFILE1008613加载配置文件出错
INIT_ERROR_RESULT_DELAY1008614信息将会延迟返回,获取数据可能在异步线程,取决于设备
INIT_HELPER_CALL_ERROR1008615反射调用出错

代码实现

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

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

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

    /**
     * 获取唯一标识idfa
     * <p>
     * 支持获取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;
    }

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android获取OAID 的相关文章

  • BLE 外设支持 Android-L 示例 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我希望有一个适用于 Android L 的 BLE 外设模式的示例 我的代码给了我奇怪的错误 即广告商太多 这没有任何意
  • Kapt 未在即时应用程序功能模块中生成类

    我在我的 Android 应用程序中使用 dagger2 即使没有错误 它也不会生成匕首组件类 我已经在设置中启用了注释处理器并重新启动了我的 android studio 但这对我来说不起作用 我也读过这个帖子Dagger2 不生成 Da
  • 如何从一个活动中完成一系列开放的子活动?

    我正在尝试为我的应用程序制作一个退出按钮 无论如何 我能够跟踪我的应用程序中的所有活动实例 然后完成它们 但在某些情况下 仍有一些活动仍然存在 不知道怎么办 有没有什么方法可以杀死android中的特定应用程序 或者我可以通过任何其他方式退
  • Google Play 商店中基于服务的 Android 应用程序

    我正在开发一个应用程序 该应用程序仅包含一些服务 没有任何活动 即没有 UI 基本上 当用户在他 她的设备上安装应用程序时 我希望有 2 到 3 个服务在后台运行 对此我有几个疑问 应用程序安装后我的服务将如何启动 我的BroadcastR
  • Android Manifest 自动生成无效权限

    我不小心在 Android 清单中输入了无效的权限名称 并且无法将其删除 这是我的清单代码
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • Android 中的 java.util.Observable 是线程安全的吗?

    Android 中的 java util Observable 是线程安全的吗 这文档 http developer android com reference java util Observable html说只有deleteObser
  • Android 5.0 Lollipop 中屏幕固定关闭时如何收到通知?

    我有一个在后台运行的应用程序 并在手机上发生特定事件时启动活动 我发现在 Android 5 0 中 当用户使用另一个应用程序打开屏幕固定时 startActivity intent 调用将被完全忽略 我的应用程序不知道该活动尚未启动 因此
  • Android CursorAdapter、ListView 和后台线程

    我一直在开发的这个应用程序有包含数兆字节数据的数据库可供筛选 许多活动只是列表视图 通过数据库中的各个级别的数据下降 直到到达 文档 即从数据库中提取并显示在手机上的 HTML 我遇到的问题是 其中一些活动需要能够通过捕获击键并重新运行带有
  • 在浏览器中打开 URL,即使我的应用程序为其注册了意图过滤器

    我的应用程序为某些 URL 注册了一个意图过滤器 因为它可以处理来自这些 URL 的数据 但是 在应用程序内部 我想提供一个按钮来在浏览器中打开这样的 URL 也就是说 如果设置了默认浏览器 则在默认浏览器中打开它 否则提供一个选择器 就像
  • 多语言 Android 应用程序:在电子邮件和密码字段中显示英文键盘

    我们正在开发一款多语言 Android 应用程序 针对英语和阿拉伯语 面临的问题是在登录和注册屏幕中 我们希望仅以英文文本输入用户名和密码字段 从而显示英文键盘 无论设备区域设置语言如何 已尝试在 edittext 中设置 inputtyp
  • 在 Android 中始终以横向模式打开相机

    在我的 Android 应用程序中 单击按钮后我希望相机以横向模式打开 即使我将手机旋转为纵向模式 相机也应始终处于横向模式或纵向模式 使用此代码在横向模式下打开相机 Intent cameraIntent new Intent Media
  • 如何更改对话框片段内的片段

    我想做一个空的DialogFragment with a LinearLayout然后更改里面的片段LinearLayout 例如 第一个片段是 3 个按钮 facebook google 电子邮件登录 的登录 当有人按下电子邮件时 第 2
  • 如何知道用户是否在 Android 应用程序中输入了错误的密码(锁定屏幕)

    我正在开发一个 Android 应用程序 如果用户在 Android 锁定屏幕中输入错误的密码 则必须完成其中一项活动 例如 如果用户输入错误的密码 则会发送电子邮件 我将不胜感激任何帮助 提前致谢 Kshitij 锁屏在完全沙箱环境中运行
  • Android Drawable 绘图性能?

    在我看来 我有一个简单的 ARGB 可绘制对象 大约需要 2 毫秒才能绘制 但我可以在 0 5 毫秒内绘制与位图相同的文件 只是一些快速代码 我真的不能认为它是一个选项 优化可绘制对象的绘制速度的最佳方法是什么 这取决于可绘制的数量以及每个
  • 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager

    我正在开发一个显示游戏列表的应用程序 在每个游戏的 itemView 内 我还有一个要显示的视频列表 预览和结构如下 我部署了一个RecyclerView作为窗口根视图 然后对于视频 我使用网格样式的RecyclerView来显示 所以这里
  • 从Android客户端登录appengine

    我正在尝试登录应用程序引擎并访问应用程序引擎中的用户服务API 基本上我希望能够看到谁登录了我的 servlet 我正在使用从 android 获取 authtoken 然后从应用程序引擎获取 ASID 或 SACID cookie 的身份
  • Android 4.2 - Environment.getExternalStorageDirectory().getPath() 行为

    我一直在开发一个android应用程序 在上次更新到4 2之前 我使用 Environment getExternalStorageDirectory getPath 它返回了我 storage sdcard0 但自从更新后我现在得到了 s
  • 动态创建 JSON 对象

    我正在尝试使用以下格式创建 JSON 对象 tableID 1 price 53 payment cash quantity 3 products ID 1 quantity 1 ID 3 quantity 2 我知道如何使用 JSONOb
  • 如何检查设备上是否安装了文本转语音 (TTS) 的特定语言数据?

    我正在创建一个使用文本转语音的应用程序 我希望用户能够离线使用它 因此我检查设备上是否安装了 TTS 数据 以下是执行此操作的代码 Check tts data is installed Intent checkTTSIntent new

随机推荐

  • Traccar记录足迹-服务搭建及使用

    Traccar介绍 Traccar是一款开源的可以跟踪GPS设备位置的应用 xff0c 服务端支持Windows x64 Linux x64 Linux ARM 客户端支持GPS设备 Android设备 IOS设备 搭建Traccar服务器
  • [网络]OSPF理论

    特性 xff1a 分类 xff1a 无类 xff0c 链路状态协议封装 xff1a ip xff08 89 xff09 更新目标地址 xff1a 224 0 0 5 224 0 0 6 支持单播更新方式 xff1a 定时 完整定时更新 xf
  • [网络]IPV6

    IPV6优势 xff1a 更大地址空间 xff08 2 128 xff09 端到端的全球可达性层次化编址利于聚合 xff08 每个运营商一个地址块 xff09 组播的使用 xff08 Server传播一份流量 xff0c 通过组播扩散到用户
  • Proxmox VE(PVE)+ceph+物理网络规划-超融合生产环境安装部署案例

    1 Proxmox Virtual Environment介绍 Proxmox VE 是用于企业虚拟化的开源服务器管理平台 它在单个平台上紧密集成了KVM虚拟机管理程序和LXC xff0c 软件定义的存储以及网络功能 借助基于Web的集成用
  • [XPlane11/12]同步更新Zibo737插件下载-更新至3.54.17-插件搬运

    Boeing B737 800X mod 链接中包括XPlane11和XPlane12版 XPlane11版本已更新至3 54 17 xff1b XPlane12版本已更新至2 1 一 下载链接 xff1a 捐助ZIBOmod xff1a
  • Proxmox VE(PVE)备份组件:PBS(Proxmox Backup Server)部署及使用教程

    1 Proxmox Backup Server xff08 pbs xff09 介绍 Proxmox Backup Server xff08 pbs xff09 是与pve配套的备份解决方案 xff0c 用于备份和恢复虚拟机 容器和物理主机
  • maven mirror

    lt mirror gt lt id gt UK lt id gt lt name gt UK Central lt name gt lt url gt http uk maven org maven2 lt url gt lt mirro
  • 1002 A+B for Polynomials (25分)

    题目大意 输入两行 xff0c 每行格式如上 xff0c K为多项式中非零项的个数 xff0c N为指数 xff0c aN为该项的系数 最后输出两个多项式的和 思路 xff1a 用一个结构体数组 ploy xff0c 数组中的每个元素存储该
  • linux/unix 使用airport

    把airport引入到用户命令里 xff0c 建立一个软连接 span class hljs built in sudo span ln span class hljs operator s span System Library Priv
  • 网页中提取SWF游戏文件及运行修改

    1 下载游戏到本地 以4399游戏为例 首先需要找到游戏页面如下 xff1a
  • k8s快速部署,附带脚本

    内容导航 xff08 一 xff09 资产信息 xff08 二 xff09 脚本内容 xff08 三 xff09 网络插件flannel1 xff0c 使用flannel网络插件2 xff0c 修改网络模式为ipvs xff0c svc无法
  • pandas处理大文件

    目录 思路一 xff1a 分而治之 思路二 xff1a 精简数据 demo 思路一 xff1a 分而治之 分而治之 xff0c 分批次加载大文件 xff0c 每次读取一定行数的数据 xff0c 读一批处理一批 此方法简单有效 xff0c 易
  • C++详解:枚举类型 --- enum | Xunlan_blog

    文章目录 一 概念二 定义枚举元素表 三 定义枚举对象的操作 四 要点 amp 技巧实例 一 概念 枚举类型 enumeration xff0c 是C 43 43 中的一种派生数据类型 xff0c 是用户创建的一个集合 xff0c 可以增加
  • 使用vue3+axios和后端交互时无法改变的data中的数据

    今天在编写前端页面的时候 xff0c 打算引入axios进行ajax请求 xff0c 可以在这个过程中遇到了一个非常大的坑 xff0c 先来看看有坑的代码 我们看一下浏览器端的console的打印情况 可以看到 xff0c 第二次打印thi
  • Ubuntu20.04搜狗输入法官方安装指南实操

    前言 linux下也想用已经熟悉的搜狗输入法 xff0c 于是乎 xff0c 在网上查各种教程 xff0c 发现很多都不能成功 xff0c 在要放弃的时候 xff0c 下面这个链接帮助自己完成了这个任务 xff1a 官方教程 xff1a U
  • 国王游戏——c++实现

    题目描述 恰逢 H 国国庆 国王邀请 n 位大臣来玩一个有奖游戏 首先 他让每个大臣在左 右手上面分别写下一个整数 xff0c 国王自己也在左 右手上各写一个整数 然后 xff0c 让这 n 位大臣排成一排 xff0c 国王站在队伍的最前面
  • 正确打开db文件的方式,避免乱码和无意义内容

    db文件如果用记事本或者Notepad 43 43 打开 xff0c 会显示乱码 xff0c 改变编码不能解决问题 xff0c 如果用UltraEdit打开 xff0c 可以看到进制数据 xff0c 但是无意义的 正确的方法有多种 xff1
  • 深度优先搜索——枚举组合

    所谓枚举组合 xff0c 其实就是从若干个选若干个数 比如x 1 x 2 x 3 x 4 x n 每个数字时0 xff08 不选 xff09 和1 xff08 选 xff09 x表示当前选到第几个书 xff0c dep表示选了几个数 对于每
  • 更新个祥硕ASM1153E开卡转接板的固件,详细教程

    固态硬盘开卡需要使用USB转接板 连接电脑 xff0c 使用那些未经验证的普通硬盘盒开卡 xff0c 经常会碰到一些千奇百怪的错误而导致开卡失败 xff0c 专用开卡板可以让你少走很多弯路 注意 xff1a 目前sata转usb的桥接芯片
  • Android获取OAID

    目录 写在最前面 写在前面 说明文档 SDK使用过程 xff1a 代码实现 写在最前面 看评论有好些朋友遇到了一些我没遇到的问题 xff0c 而且看官方文档也已经更新 xff0c 想着这些问题官方是不是已经优化解决了 xff0c 就按着最新