简介

本文链接:https://www.cnblogs.com/dks-/p/14357041.html

根据“移动智能终端补充设备标识体系”技术要求,华为、小米、OPPO、vivo、中兴、努比亚、魅族、联想、三星等设备厂商均将逐步实现本标识体系,联盟计划开发并发布支持多厂商的统一的补充设备标识调用SDK,协助移动应用开发者更便捷的访问移动智能终端补充设备标识体系,推进相关业务。

OAID全称匿名设备标识符(Open Anonymous Device Identifier),是可以连接所有应用数据的标识符。在移动终端系统首次启动后立即生成,可用于广告业务,其生成参数中可包含设备唯一标识符参数。

IMEI属于个人隐私,现在已无法获取IMEI,因此需要使用OAID来替代。本文将使用MSA提供的最新版SDK 1.0.25(截至发文2021-02-01)

SDK下载

这里直接给出某位大佬在github上分享的资源https://github.com/2tu/msa我之前也是找了很久,感谢这位大佬。

oaid_sdk_1.0.25.zip度盘链接https://pan.baidu.com/s/1sVzBD_3mTXD_oqyu5I2VtQ 提取码:we54

官网下载需要以公司名义注册并且需要进行审核,比较麻烦,网上找的SDK下载竟然还需要收费。

官网:移动安全联盟MSA

支持版本

厂商名称 支持版本
华为 HMS 2.6.2 及以上
小米 MIUI 10.2 及以上版本
vivo Android 9 及以上版本
OPPO Color OS 7.0 及以上版本
Lenovo ZUI 11.4 及以上版本
三星 Android 10 版本
魅族 Android 10 版本
努比亚 Android 10 版本
中兴 Android 10 版本
华硕 Android 10 版本
一加 Android 10 版本
黑鲨 Android 10 版本
摩托罗拉 Android 10 版本
Freeme OS Android 10 版本

开始使用

一定要使用最新版!

一定要使用最新版!

一定要使用最新版!

我最开始是用的老版本,碰到了很多问题,MSA一直在完善SDK,所以请务必使用最新版!

这个版本我在安卓11的小米上测试正常

把 oaid_sdk_1.0.25.aar 拷贝到项的 libs 目录,并设置依赖。

implementation files('libs/oaid_sdk_1.0.25.aar')

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



核心代码,从官方给的demo里拿的

public class MainActivity extends AppCompatActivity implements IIdentifierListener {
private TextView tvContent;
String oaid;
String vaid;
String aaid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvContent = findViewById(R.id.tv);
MdidSdkHelper.InitSdk(getApplicationContext(), true,this);
//结果是异步返回的,使用时为空的话可以先休眠几秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("OAID: "+oaid);
System.out.println("VAID: "+vaid);
System.out.println("AAID: "+aaid);
} @Override
public void OnSupport(boolean b, IdSupplier idSupplier) {
if(idSupplier==null) {
return;
}
oaid=idSupplier.getOAID();
vaid=idSupplier.getVAID();
aaid=idSupplier.getAAID(); StringBuilder builder=new StringBuilder();
builder.append("support: ").append(idSupplier.isSupported()?"true":"false").append("\n");
builder.append("OAID: ").append(oaid).append("\n");
builder.append("VAID: ").append(vaid).append("\n");
builder.append("AAID: ").append(aaid).append("\n"); String idstext=builder.toString();
Log.d("SdkDemo: ", idstext);
onIdsAvalid(idstext);
} public void onIdsAvalid(@NonNull final String ids) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tvContent.setText(ids);
}
});
}
}

可能遇到的问题

OAID的返回是异步的,所以有时候可能执行完还没返回,这时候使用就会出问题了,建议在使用前先判空,若为空值先睡一会儿

替代方案

这里还有两个替代方案推荐

https://github.com/shuzilm-open-source/Get_Oaid_CNAdid

https://github.com/gzu-liyujiang/Android_CN_OAID

APK下载

这里提供一个编译好的apk,可以在机器上试试效果,在我安卓11的小米手机上测试通过,无需任何权限,可以放心安装。

https://pan.baidu.com/s/1vRYPJ5zSVm87LYbxiyV-VQ 提取码:2gr9

写在最后

有什么问题欢迎在评论区指出,后续也会跟随SDK的新版本持续更新,如果觉得这篇博客有帮到你,不妨点个赞再走呢。

Android OAID 获取 基于MSA oaid_sdk_1.0.25.zip的更多相关文章

  1. Android开发 - 获取Android设备的唯一标识码(Android 6.0或更高)

    在我们的APP开发中,通常需要获取到设备的唯一标识.在Android6.0之前,有很多方法我们可以方便获取到硬件的唯一标识,但是在Android6.0之后,Android系统大幅限制了我们获取设备的硬 ...

  2. 谈谈基于OAuth 2.0的第三方认证 [下篇]

    从安全的角度来讲,<中篇>介绍的Implicit类型的Authorization Grant存在这样的两个问题:其一,授权服务器没有对客户端应用进行认证,因为获取Access Token的 ...

  3. 谈谈基于OAuth 2.0的第三方认证 [中篇]

    虽然我们在<上篇>分别讨论了4种预定义的Authorization Grant类型以及它们各自的适用场景的获取Access Token的方式,我想很多之前没有接触过OAuth 2.0的读者 ...

  4. Android_设备隐私获取,忽略6.0权限管理

    1.前言 (1).由于MIUI等部分国产定制系统也有权限管理,没有相关api,故无法判断用户是否允许获取联系人等隐私.在Android 6.0之后,新增权限管理可以通过官方api判断用户的运行状态: ...

  5. Android实现获取本机中所有图片

    本示例演示如何在Android中使用加载器(Loader)来实现获取本机中的所有图片,并进行查看图片的效果. 在这个示例中,我使用android-support-v4.jar中的加载器(Loader) ...

  6. android开发获取网络状态,wifi,wap,2g,3g.工具类(一)

    android开发获取网络状态整理: package com.gzcivil.utils; import android.content.Context; import android.net.Con ...

  7. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  8. [深度应用]·首届中国心电智能大赛初赛开源Baseline(基于Keras val_acc: 0.88)

    [深度应用]·首届中国心电智能大赛初赛开源Baseline(基于Keras val_acc: 0.88) 个人主页--> https://xiaosongshine.github.io/ 项目g ...

  9. Android开发 获取视频中的信息(例如预览图或视频时长) MediaMetadataRetriever媒体元数据检索器

    前言 在Android里获取视频的信息主要依靠MediaMetadataRetriever实现 获取最佳视频预览图 所谓的最佳就是MediaMetadataRetriever自己计算的 /** * 获 ...

  10. Android消息传递之基于RxJava实现一个EventBus - RxBus

    前言: 上篇文章学习了Android事件总线管理开源框架EventBus,EventBus的出现大大降低了开发成本以及开发难度,今天我们就利用目前大红大紫的RxJava来实现一下类似EventBus事 ...

随机推荐

  1. PaddlePaddle 飞桨复现 ResNeXt

    import paddle.nn as nn import paddle class BN_Conv2D(nn.Layer): """ BN_CONV_RELU &quo ...

  2. 2022-08-28:把字符串 s 看作 “abcdefghijklmnopqrstuvwxyz“ 的无限环绕字符串, 所以 s 看起来是这样的: ...zabcdefghijklmnopqrstuv

    2022-08-28:把字符串 s 看作 "abcdefghijklmnopqrstuvwxyz" 的无限环绕字符串, 所以 s 看起来是这样的: -zabcdefghijklmn ...

  3. spring之AOP的概念及简单案例

    AOP概念 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP ...

  4. Redis - 二进制位数组

    简介 Redis 使用字符串对象来表示位数组,因为字符串对象使用的 SDS 数据结构是二进制安全的,所以程序可以直接使用 SDS 结构来保存位数组,并使用 SDS 结构的操作函数来处理位数组. 在 S ...

  5. AcWing 3956. 截断数组

    给定一个长度为 n 的数组 a1,a2,-,an. 现在,要将该数组从中间截断,得到三个非空子数组. 要求,三个子数组内各元素之和都相等. 请问,共有多少种不同的截断方法? 输入格式 第一行包含整数 ...

  6. 更换Mysql数据库-----基于Abo.io 的书籍管理Web应用程序

    之前公司一直使用的是ASP.NET Boilerplate (ABP),但是当解决方案变得很大时,项目启动就变得非常慢,虽然也想了一些办法,将一些基础模块做成Nuget包的形式,让整个解决方案去引用. ...

  7. C++面试八股文:C++中,设计一个类要注意哪些东西?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第9面: 面试官:C++中,设计一个类要注意哪些东西? 二师兄:设计一个类主要考虑以下几个方面:1.面向对象的封装.继承及多态.2.big three ...

  8. 鸿蒙星空的太白星 | WebView给元服务调用JS API指明方向

    ​漆黑深夜夜凉如水,繁星盛开于无垠苍穹.清风徐来,一片薄云,夜空顿然失色,有些阴霾.天空中最亮的星,太白星,在薄云中依然闪耀,如同海上迷雾中的灯塔,为迷失方向的船只指明方向. 元服务是华为提供的一种面 ...

  9. 记一次etcd全局锁使用不当导致的事故

    1.背景介绍 前两天,现场的同事使用开发的程序测试时,发现日志中报etcdserver: mvcc: database space exceeded,导致 etcd 无法连接.很奇怪,我们开发的程序只 ...

  10. ERP开发流程

    一.使用Xshell连线执行r.r adzi140 或 助记码r.t 都可以打开数据表设计器 表格建完后,DBA前三个需要点一下,如果表格显示需要表格重建,点最后一个,表格新建完成后,记得点击执行异动 ...