阅读 2191

【仙境】Android匿名设备标识符OAID输出

OAID

Android匿名设备标识符OAID输出


背景

随着大数据和人工智能时代的到来,数据的价值也逐渐增加,移动终端设备标识码,如国际移动设备识别码(IMEI)、Wi-Fi MAC地址、SIM卡国际移动用户识别码(IMSI)和蓝牙地址等终端设备标识信息的收集和使用成为普遍现象。同时各国对用户隐私保护的要求越来越高,传统的移动终端设备标识如国际移动设备识别码(IMEI)等已被部分国家认定为用户隐私的一部分。另外,在很多与隐私无关的场景中,如生产、售后、报关、政府抽检等场景,传统设备标识码(如IMEI)被篡改或冒用的情况时有发生,给设备生产企业的经济利益带来损失,同时对设备追溯带来较大影响。

ID说明

  • 设备唯一标识符(UDID):设备唯一硬件标识,设备生产时根据特定的硬件信息生成,可用于设备的生产环境及合法性校验。不对第三方应用提供获取接口,无法通过 SDK 获取。
  • 匿名设备标识符(OAID):可以连接所有应用数据的标识符,移动智能终端系统首次启动后立即生成,可用于广告业务。可以通过 SDK 获取到接口状态(重置、关闭)、ID 值。
  • 开发者匿名设备标识符(VAID):用于开放给开发者的设备标识符,可在应用安装时产生,可用于同一开发者不同应用之间的推荐。可以通过 SDK 获取到 ID 值。
  • 应用匿名设备标识符(AAID):第三方应用获取的匿名设备标识,可在应用安装时产生,可用于用户统计等。可以通过 SDK 获取到 ID 值。

权利声明

  • 移动智能终端补充设备标识体系统一调用 SDK 由中国信息通信研究院泰尔终端实验室、移动安全联盟整合提供,知识产权归中国信通院所有,未经授权或非法复制、逆向、破解、篡改、贩卖或用于其他商业用途,中国信息通信 研究院保留追究其法律责任的权利;
  • 移动智能终端补充设备标识体系统一调用 SDK 由中国信息通信研究院泰尔终端实验室、移动安全联盟共同负责 SDK 的合规管理和后期维护;
  • 移动智能终端补充设备标识体系依据电信终端产业协会(TAF)、移动安全联盟(MSA)联合推出的团体标准《移动智能终端补充设备标识规范》开发, 移动智能终端补充设备标识体系统一调用 SDK 集成设备厂商提供的接口,并获得主流设备厂商的授权,本次版本为试用版。

下载

SDK 获取地址

安装

  • miit_mdid_x.x.x.aar 拷贝到项的 libs 目录,并设置依赖,其中 x.x.x 代表版本号。
  • supplierconfig.json 拷贝到项目 assets 目录下,并修改里边对应 内容,特别是需要设置 appid 的部分。需要设置 appid 的部分需要去对应厂商 的应用商店里注册自己的 app。
  • 设置依赖。
    implementation files(‘libs/miit_mdid_x.x.x.aar’)
复制代码
  • 混淆设置。
    -keep class com.bun.miitmdid.core.** {*;}
复制代码
  • 设置 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"
    }
复制代码
  • 初始化。
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();
    JSONObject result=miIdHelper.getDeviceIds(getApplicationContext());
复制代码

效果展示

{
    "description":"SUCCESS",
    "code":0,
    "time":49,
    "isSupport":true,
    "oaid":"cf8cc008bb5adf96",
    "vaid":"f8239c19f92836f1",
    "aaid":"0115d997-c845-4e86-8fed-58c4fb246827"
}
复制代码

Demo获取

Demo