简介

本文链接: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. 基于CentOS 7.6安装及配置APISIX 3.0环境

    最近一直在研究微服务相关内容,通过对比各大API网关,发现新起之秀 APISIX无论从开源程度上来讲还是功能上,都拥有很大的优势. 经历了几天折磨一样的学习,目前在本地环境中配置成功了一套,以供自己留 ...

  2. 文心一言 VS chatgpt (13)-- 算法导论3.1 8题 3.2 1题

    八.可以扩展我们的记号到有两个参数n和m的情形,其中的n和m可以按不同速率独立地趋于无穷.对于给定的函数g(n, m),用O(g(n, m))来表示以下函数集: O(g(n, m)) = 对Ω(g(n ...

  3. node 代理访问服务器

    1.背景 由于在开发的过程中,我们经常需要访问测试/正式环境,会出现线上正常,本地访问不同 2.方案 方法一: 我们可以通过node作为中间件,解决这一问题.示例如下: var express = r ...

  4. 微软Build 2023两大主题:Copilots和插件

    在本周大型微软人工智能 2023 开发者大会的开幕式上,人工智能站到了舞台中央--前台和后台以及介于两者之间的所有舞台. 贯穿会议的两个主要主题是Copilots - 涵盖广泛产品和服务的AI助手 - ...

  5. Java(if选择、switch选择、循环)

    1.if 选择结构 //语法 if(表达式){ //语句:(表达式为真) }else{ //语句:(表达式为假) } --------------------------------------- 例 ...

  6. 让你的代码动起来:Python进度条神器tqdm详解及应用实例

    各位Python高手,今天我要给大家介绍一个好用的库,它就是:tqdm tqdm在阿拉伯语中的意思是 "进展",所以这个库也被称为 "快速进展条".不得不说,这 ...

  7. Python time strftime() 方法的使用

    1.描述 strftime() 用于格式化时间,返回以可读字符串表示的时间,格式自定义. 2.说明 python中日期和时间的格式化符号有很多,下面列举常用的符号:  %y 两位数的年份表示(00-9 ...

  8. .netcore中的虚拟文件EmbeddedFile

    以前一直比较好奇像swagger,cap,skywalking等组件是如何实现引用一个dll即可在网页上展示界面的,难道这么多html,js,css等都是硬编码写死在代码文件中的?后面接触apb里面也 ...

  9. 使用poi-tl导出word文件的几个技巧

    1.前言   Poi-tl提供了基于word模板文件导出word文件的功能.文档地址:http://deepoove.com/poi-tl/.   用下来,总体感觉还是很方便的.但使用过程,有几个细节 ...

  10. Rust的语句与表达式

    Rust 语句与表达式 Rust 中的语法分为两大类: 语句 (statement) 和表达式 (Expression). 语句:指的是要执行的一些操作和产生副作用的表达式. 表达式:主要用于计算求值 ...