我的编程空间,编程开发者的网络收藏夹
学习永远不晚

获取android手机设备的OAID

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

获取android手机设备的OAID

一、简介:

因传统的移动终端设备标识如国际移动设备识别码(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

获取android手机设备的OAID

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

获取android手机设备的OAID

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

Android 手机获取手机号实现方法

最近做到一个项目,需要获取手机号。项目中使用的手机卡为电信卡,那么就以此为例吧。 网上不符合需求的方法 Google了一下,网上的做法如下://获取手机号码 TelephonyManager tm = (TelephonyManager)
2022-06-06

Android手机获取Mac地址的方法

最常用的方法,通过WiFiManager获取: private static String tryG
2023-05-31

Android获取手机联系人信息

Android如何获取手机联系人信息,本文为大家揭晓。 获取手机联系人信息步骤: 1、获取 ContentResolver ContentResolver resolver = getContentResolver(); 2、resolve
2022-06-06

android如何获取设备唯一标识

这篇文章主要介绍了android如何获取设备唯一标识,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:/** * deviceID的组成为:渠道标志+识别符来源标志+h
2023-05-30

Android获取手机位置的实现代码

本文实例为大家分享了Android获取手机位置的方法,供大家参考,具体内容如下 1、项目Src下创建...service包,然后新建GPSService类package com.zebra.mobilesafe.service; impor
2022-06-06

Android基于APN获取手机号的方法

本文实例讲述了Android基于APN获取手机号的方法。分享给大家供大家参考。具体如下: 之前很多人说无法完全获取手机号,是因为现在有的卡不能获取,有的卡能获取,现在我们可以换一种思路来考虑问题,就是用APN的方式。请看代码: APNNET
2022-06-06

android手机获取唯一标识的方法

获取手机唯一标识 拼接的方式获取手机唯一标识第一种方式是获取IMEI,但是有的手机如果不是正品的话,就获取不到所以通过这一种方式还是会出现有的设备是没有唯一标识的 第二种方式获取手机卡的序列号,当然这种也不是唯一的,因为有的手机是双卡双待的
2023-05-31

android获取手机唯一标识的方法

代码如下:import android.provider.Settings.Secure; private String android_id = Secure.getString(getContext().getContentResolv
2022-06-06

Android获取手机通话记录的方法

Android如何获取手机通话记录,本文为大家揭晓。 获取手机通话记录流程: 1、 获取ContentResolver; ContentResolver resolver = getContentResolver(); 2、resolver
2022-06-06

Android中获取设备的各种信息总结

一、屏幕分辨率Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int wi
2022-06-06

Android应用获取设备序列号的方法

软硬件环境 Macbook Pro MGX 72 Android studio 2.1.2 Android 5.1.1前言上一篇介绍了如何获取ethernet的MAC地址,对于厂商来讲,除了MAC号,还有一项数据也很重要,那就是机器序
2023-05-31

Android 获取手机信息实例详解

Android 获取手机信息 应用信息:包名、版本号、版本名,手机是否有Root权限手机信息:手机屏幕宽和高、当前可用内存大小、总内存大小、IMEI号、IESI号、手机型号、手机品牌、手机MacAdd、CPU型号、CPU频率 开门见山,以下
2022-06-06

Android ContentProvider获取手机联系人实例

在做项目的时候,因为要用到我们自动获取联系人的姓名和电话,就想到了ContentProvider分享数据的功能,这样做既节省了时间,也减少了我们输入错误号码的几率,所以,想在这里把小demo分享给大家,方便以后要用的时候可以看看 我们先看下
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录