Android匿名设备标识符OAID
ID说明
设备唯一标识符(UDID):设备唯一硬件标识,设备生产时根据特定的硬件信息生成,可用于设备的生产环境及合法性校验。不对第三方应用提供获取接口,无法通过 SDK 获取。 匿名设备标识符(OAID):可以连接所有应用数据的标识符,移动智能终端系统首次启动后立即生成,可用于广告业务。可以通过 SDK 获取到接口状态(重置、关闭)、ID 值。 开发者匿名设备标识符(VAID):用于开放给开发者的设备标识符,可在应用安装时产生,可用于同一开发者不同应用之间的推荐。可以通过 SDK 获取到 ID 值。 应用匿名设备标识符(AAID):第三方应用获取的匿名设备标识,可在应用安装时产生,可用于用户统计等。可以通过 SDK 获取到 ID 值。
声明
下载链接
移动安全联盟官网SDK 获取地址
覆盖范围
厂商名称 支持版本 华为 HMS 2.6.2及以上 小米 MIUI10.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版本
调用方法
把oaid_sdk_x.x.x.aar拷贝到项的libs目录,并设置依赖,其中x.x.x代表版本号。 将supplierconfig.json拷贝到项目assets目录下,并修改里边对应内容,特别是需要设置appid的部分。需要设置appid的部分需要去对应厂商的应用商店里注册自己的app。需要注意的是,其中label部分内容无需修改。 设置依赖implementation files(‘libs/oaid_sdk_x.x.x.aar’) 设置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"
}
设置混淆
-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" ;
}
}
}
MiIdHelper miIdHelper = new MiIdHelper ( new AppIdsUpdater ( ) {
@Override
public void OnValidId ( @NonNull JSONObject ids) {
Log . e ( "OAID" , ids. toString ( ) ) ;
}
} ) ;
miIdHelper. getDeviceIds ( getApplicationContext ( ) ) ;