Android设备获取OAID调研和实现

Android设备获取OAID调研和实现本文介绍了 OAID 开放匿名标识符 作为 Android10 后替代传统设备标识符的新方案 以及 AAID 和 VAID 在移动应用中的角色 包括它们的区别 获取方式和在实际开发中的应用示例

大家好,欢迎来到IT知识分享网。

什么是OAID、AAID、VAID

OAID

区别

如何获取

官方SDK接入

SDK获取

配置和调用

  1. 把 oaid_sdk_x.x.x.aar 拷贝到项的 libs 目录,并设置依赖,其中 x.x.x 代表版本号
  2. 将 supplierconfig.json 拷贝到项目 assets 目录下
    appid 需要移动互联网应用开发者根据应用使用需求到不同终端厂商的应用 商城申请,具体需咨询相关厂商,不需要填写其他第三方应用商店的 appid。 appid 只与 VAID 的获取有关,用于判断是否为同一开发者,如不需获取 vaid 可 不填写。目前只需设置 vivo 的 appid。(我们本次只需要获取OAID,所以不需要上架,也不需要appid)
    配置文件中部分设备如果不配置厂商会无法获取,部分设备如小米即使配置文件中没有,也不影响获取,所以我们对接的时候,为了保险起见,配置文件中尽可能全一些。【 官方文档中说配置文件不用修改,只需填写对应 appid,并放到 assets 目录下即可 】

  3. 设置依赖
  4. 设置gradle编译选项,开发者可以根据自己对平台的选择进行合理配置(测试的时候不配置也没什么问题)
    ndk { abiFilters ‘armeabi-v7a’,‘x86’,‘arm64-v8a’,‘x86_64’,‘armeabi’ }

代码实现

public class MainActivity extends AppCompatActivity implements IIdentifierListener{ 
    private TextView tvContent; String oaid; String vaid; String aaid; @SuppressLint("MissingInflatedId") @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); } }); } } 

效果

官方sdk获取结果

三方实现接入

接入指引

dependencies { 
    implementation('com.github.gzu-liyujiang:Android_CN_OAID:最新版本号') { 
    // 如果使用了移动安全联盟SDK,共存的话需排除掉本项目依赖的华为/荣耀官方广告标识服务SDK,因为移动安全联盟SDK也依赖了华为/荣耀的SDK // 如果华为官方广告标识服务SDK下载失败或编译报错的话,可考虑在 build.gradle 中增加以下配置: // repositories { maven { url 'https://developer.huawei.com/repo' } } // runtimeOnly "com.huawei.hms:ads-identifier:3.4.62.300" exclude group: 'com.huawei.hms', module: 'ads-identifier' // 荣耀官方广告标识服务SDK同理:  // repositories { maven { url 'https://developer.hihonor.com/repo' } } // runtimeOnly "com.hihonor.mcs:ads-identifier:1.0.2.301" exclude group: 'com.hihonor.mcs', module: 'ads-identifier' } } 

在这里,如果在kotlin的dsl中应该这么写exclude group:

implementation ("com.github.gzu-liyujiang:Android_CN_OAID:4.2.9"){ 
    exclude(group = "com.huawei.hms', module: 'ads-identifier") exclude(group = "'com.hihonor.mcs', module: 'ads-identifier") } 

代码实现

publicclassMainActivityextendsAppCompatActivity{ 
    privateTextViewtextViewOAID; @SuppressLint("MissingInflatedId") @Override protectedvoidonCreate(BundlesavedInstanceState){ 
    super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textViewOAID=findViewById(R.id.textViewOAID); //DeviceIdentifier.register(this.getApplication()); //获取IMEI,只支持Android10之前的系统,需要READ_PHONE_STATE权限,可能为空 DeviceIdentifier.getIMEI(this); //获取安卓ID,可能为空 DeviceIdentifier.getAndroidID(this); //获取数字版权管理ID,可能为空。很鸡肋,在某些手机上还可能造成卡死或闪退,自4.2.7版本后已弃用 DeviceIdentifier.getWidevineID(); //获取伪造ID,根据硬件信息生成,不会为空,有大概率会重复 DeviceIdentifier.getPseudoID(); //获取GUID,随机生成,不会为空 DeviceIdentifier.getGUID(this); //是否支持OAID/AAID DeviceID.supportedOAID(this); //获取OAID/AAID,同步调用 DeviceIdentifier.getOAID(this); //获取OAID/AAID,异步回调 DeviceID.getOAID(this,newIGetter(){ 
    @Override publicvoidonOAIDGetComplete(Stringresult){ 
    //不同厂商的OAID/AAID格式是不一样的,可进行MD5、SHA1之类的哈希运算统一 Log.d("oaiddemo","获取成功:"+result); textViewOAID.setText("OAIDValue:"+result);//更新TextView文本 } @Override publicvoidonOAIDGetError(Exceptionerror){ 
    //获取OAID/AAID失败 Log.d("oaiddemo","获取失败:"); textViewOAID.setText("OAID获取失败");//更新TextView文本,表示获取失败 } }); } } 

效果

三方获取结果
对比官方和三方的结果,获取到的OAID,同一台设备是一致的。

写在最后

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/131268.html

(0)
上一篇 2025-08-08 22:33
下一篇 2025-08-08 22:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信