简介
根据“移动智能终端补充设备标识体系”技术要求,华为、小米、OPPO、vivo、中兴、努比亚、魅族、联想、三星等设备厂商均将逐步实现本标识体系,联盟计划开发并发布支持多厂商的统一的补充设备标识调用SDK,协助移动应用开发者更便捷的访问移动智能终端补充设备标识体系,推进相关业务。
OAID全称匿名设备标识符(Open Anonymous Device Identifier),是可以连接所有应用数据的标识符。在移动终端系统首次启动后立即生成,可用于广告业务,其生成参数中可包含设备唯一标识符参数。
IMEI属于个人隐私,现在已无法获取IMEI,因此需要使用OAID来替代。本文将使用MSA提供的最新版SDK 1.0.25(截至发文2021-02-02)
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的新版本持续更新,如果觉得这篇博客有帮到你,不妨点个赞再走呢。