Android开发中匿名设备标识符OAID使用及初始化

作者:ZH-黑夜 时间:2023-12-23 04:33:54 

ID说明 

  • 设备唯一标识符(UDID):设备唯一硬件标识,设备生产时根据特定的硬件信息生成,可用于设备的生产环境及合法性校验。不对第三方应用提供获取接口,无法通过 SDK 获取。

  • 匿名设备标识符(OAID):可以连接所有应用数据的标识符,移动智能终端系统首次启动后立即生成,可用于广告业务。可以通过 SDK 获取到接口状态(重置、关闭)、ID 值。

  • 开发者匿名设备标识符(VAID):用于开放给开发者的设备标识符,可在应用安装时产生,可用于同一开发者不同应用之间的推荐。可以通过 SDK 获取到 ID 值。

  • 应用匿名设备标识符(AAID):第三方应用获取的匿名设备标识,可在应用安装时产生,可用于用户统计等。可以通过 SDK 获取到 ID 值。

声明

Android开发中匿名设备标识符OAID使用及初始化

下载链接

移动安全联盟官网SDK 获取地址

覆盖范围

厂商名称支持版本
华为HMS 2.6.2及以上
小米MIUI10.2及以上版本
vivoAndroid 9及以上版本
oppoColor OS 7.0及以上版本
LenovoZUI 11.4及以上版本
三星Android 10版本
魅族Android 10版本
努比亚Android 10版本
中兴Android 10版本
华硕Android 10版本
一加Android 10版本
黑鲨Android 10版本
摩托罗拉Android 10版本
Freeme OSAndroid 10版本

调用方法

1.把oaid_sdk_x.x.x.aar拷贝到项的libs目录,并设置依赖,其中x.x.x代表版本号。

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

3.设置依赖implementation files(‘libs/oaid_sdk_x.x.x.aar’)

4.设置gradle编译选项,开发者可以根据自己对平台的选择进行合理配置

ndk {
       abiFilters 'armeabi-v7a', 'x86', 'arm64-v8a', 'x86_64', 'armeabi'
   }
   packagingOptions {
       doNotStrip "*/armeabi-v7a/*.so"
       doNotStrip "*/x86/*.so"
       doNotStrip "*/arm64-v8a/*.so"
       doNotStrip "*/x86_64/*.so"
       doNotStrip "armeabi.so"
   }

5.设置混淆

-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.bun.lib.**{*;}
-keep class com.bun.miitmdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}

使用

初始化

public class APP extends Application {
   @Override
   protected void attachBaseContext(Context base) {
       super.attachBaseContext(base);
       JLibrary.InitEntry(base);
   }
}

设置回调

public interface AppIdsUpdater {
       void OnValidId(@NonNull JSONObject ids);
}

设置调用类

public class MiIdHelper implements IIdentifierListener {
   private boolean isSupport;
   private String oaid, vaid, aaid;

public JSONObject getDeviceIds(Context cxt) {
       long startTime = System.currentTimeMillis();
       int code = CallFromReflect(cxt);
       long endTime = System.currentTimeMillis();
       long time = endTime - startTime;
       JSONObject jsonObject = new JSONObject();
       try {
           jsonObject.put("description", descriptionCode(code));
           jsonObject.put("code", code);
           jsonObject.put("time", time);
           jsonObject.put("isSupport", isSupport);
           jsonObject.put("oaid", oaid);
           jsonObject.put("vaid", vaid);
           jsonObject.put("aaid", aaid);
       } catch (Exception e) {
           e.printStackTrace();
       }
        return jsonObject;
   }

private int CallFromReflect(Context cxt) {
       return MdidSdkHelper.InitSdk(cxt, true, this);
   }

@Override
   public void OnSupport(boolean isSupport, IdSupplier _supplier) {
       this.isSupport = isSupport;
       if (_supplier != null) {
           this.oaid = _supplier.getOAID();
           this.vaid = _supplier.getVAID();
           this.aaid = _supplier.getAAID();
           _supplier.shutDown();
       }
   }

private String descriptionCode(int code) {
       switch (code) {
           case ErrorCode.INIT_ERROR_DEVICE_NOSUPPORT:
               return "DEVICE_NOSUPPORT";
           case ErrorCode.INIT_ERROR_LOAD_CONFIGFILE:
               return "LOAD_CONFIGFILE";
           case ErrorCode.INIT_ERROR_MANUFACTURER_NOSUPPORT:
               return "MANUFACTURER_NOSUPPORT";
           case ErrorCode.INIT_ERROR_RESULT_DELAY:
               return "RESULT_DELAY";
           case ErrorCode.INIT_HELPER_CALL_ERROR:
               return "HELPER_CALL_ERROR";
           default:
               return "SUCCESS";
       }
   }
}

获取OAID

MiIdHelper miIdHelper = new MiIdHelper(new AppIdsUpdater() {
           @Override
           public void OnValidId(@NonNull JSONObject ids) {
               Log.e("OAID", ids.toString());
           }
       });
miIdHelper.getDeviceIds(getApplicationContext());

来源:https://blog.csdn.net/qq_40945489/article/details/109724415

标签:Android,匿名设备,标识符,OAID
0
投稿

猜你喜欢

  • Android Spinner 下拉菜单的使用

    2023-10-25 10:59:53
  • 从Request.Url中获取根网址的简单操作

    2022-04-18 04:44:40
  • RecyclerView实现拖拽排序效果

    2022-09-14 01:23:40
  • Android 5秒学会使用手势解锁功能

    2023-07-11 13:48:32
  • JAVA常用API总结与说明

    2023-05-19 08:17:17
  • 使用@TransactionalEventListener监听事务教程

    2023-10-05 02:50:44
  • java实现列表、集合与数组之间转化的方法

    2023-11-29 10:17:38
  • Struts2中Action三种接收参数形式与简单的表单验证功能

    2022-11-26 08:55:20
  • jdk动态代理源码分析过程

    2023-03-01 05:05:59
  • 一文告诉你为什么要重写hashCode()方法和equals()方法

    2021-09-05 07:05:55
  • C#集合之集(set)的用法

    2023-05-18 06:04:53
  • Android实现短信验证码获取自动填写功能(详细版)

    2022-07-22 07:08:10
  • 详解Mybatis注解写法(附10余个常用例子)

    2023-01-19 03:39:53
  • C#抓取网络图片保存到本地的实现方法

    2023-06-28 11:35:13
  • Java中多线程下载图片并压缩能提高效率吗

    2023-08-06 07:40:10
  • Android自带emoji表情的使用方法详解

    2021-11-25 09:28:22
  • Android编程实现图片的浏览、缩放、拖动和自动居中效果

    2021-06-04 15:01:39
  • java中的final关键字详解及实例

    2022-03-02 11:26:59
  • java多线程CyclicBarrier的使用案例,让线程起步走

    2023-05-20 16:22:22
  • springboot+zookeeper实现分布式锁的示例代码

    2022-02-05 08:48:48
  • asp之家 软件编程 m.aspxhome.com