Skip to content

Commit

Permalink
2.4.0版本文件增加;
Browse files Browse the repository at this point in the history
增加OAID权限获取的适配
  • Loading branch information
MaYiFei1995 committed Mar 1, 2024
1 parent 59f9c02 commit 83af447
Show file tree
Hide file tree
Showing 40 changed files with 962 additions and 53 deletions.
268 changes: 268 additions & 0 deletions Doc/2.4.0/DemoHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
package com.example.oaidtest2;

import android.content.Context;
import android.util.Log;

import com.bun.miitmdid.core.InfoCode;
import com.bun.miitmdid.core.MdidSdkHelper;
import com.bun.miitmdid.interfaces.IIdentifierListener;
import com.bun.miitmdid.interfaces.IPermissionCallbackListener;
import com.bun.miitmdid.interfaces.IdSupplier;
import com.bun.miitmdid.pojo.IdSupplierImpl;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.util.List;

/**
* Date: 16:27 2021/2/26 0026
* Version: 1.0.3
**/
public class DemoHelper implements IIdentifierListener {
public static long startTimeMillis;
public static long endTimeMillis;
public static final String TAG = "DemoHelper";
public static final int HELPER_VERSION_CODE = 20230919; // DemoHelper版本号
private final AppIdsUpdater appIdsUpdater;
private boolean isCertInit = false;
private boolean isArchSupport = false;
private boolean isSupported = false;
private boolean isLimited = false;
private boolean isSupportRequestOAIDPermission = false;
public boolean isSDKLogOn = true; // TODO (1)设置 是否开启sdk日志
public static final String ASSET_FILE_NAME_CERT = "com.example.oaidtest2.cert.pem"; // TODO (2)设置 asset证书文件名

public DemoHelper(AppIdsUpdater appIdsUpdater, String lib) {
// TODO (3)加固版本在调用前必须载入SDK安全库,因为加载有延迟,推荐在application中调用loadLibrary方法
// System.loadLibrary("msaoaidsec");
// DemoHelper版本建议与SDK版本一致
loadLibrary(lib);
if (isArchSupport) {
if (MdidSdkHelper.SDK_VERSION_CODE != HELPER_VERSION_CODE) {
Log.w(TAG, "SDK version not match.");
}
}
this.appIdsUpdater = appIdsUpdater;
}

public void getDeviceIds(Context cxt) {
getDeviceIds(cxt, true, true, true);
}

/**
* 获取OAID
*
* @param cxt
*/
public void getDeviceIds(Context cxt, boolean isGetOAID, boolean isGetVAID, boolean isGetAAID) {
// TODO (4)初始化SDK证书
startTimeMillis = System.nanoTime();
if (!isCertInit) { // 证书只需初始化一次
// 证书为PEM文件中的所有文本内容(包括首尾行、换行符)
try {
startTimeMillis = System.nanoTime();
isCertInit = MdidSdkHelper.InitCert(cxt, loadPemFromAssetFile(cxt, ASSET_FILE_NAME_CERT));
} catch (Error e) {
e.printStackTrace();
}
if (!isCertInit) {
Log.w(TAG, "getDeviceIds: cert init failed");
}
}

// (可选)设置InitSDK接口回调超时时间(仅适用于接口为异步),默认值为5000ms.
// 注:请在调用前设置一次后就不再更改,否则可能导致回调丢失、重复等问题
try {
MdidSdkHelper.setGlobalTimeout(5000);
} catch (Error error) {
error.printStackTrace();
}
int code = 0;
// TODO (5)调用SDK获取ID
try {
// if x86 throws Error
code = MdidSdkHelper.InitSdk(cxt, isSDKLogOn, isGetOAID, isGetVAID, isGetAAID, this);
} catch (Error error) {
error.printStackTrace();
} finally {
long time = endTimeMillis - startTimeMillis;
Log.d(TAG, "Time Consume:" + time);
}

// TODO (6)根据SDK返回的code进行不同处理
IdSupplierImpl unsupportedIdSupplier = new IdSupplierImpl();
if (code == InfoCode.INIT_ERROR_CERT_ERROR) { // 证书未初始化或证书无效,SDK内部不会回调onSupport
// APP自定义逻辑
Log.w(TAG, "cert not init or check not pass");
onSupport(unsupportedIdSupplier);
} else if (code == InfoCode.INIT_ERROR_DEVICE_NOSUPPORT) { // 不支持的设备, SDK内部不会回调onSupport
// APP自定义逻辑
Log.w(TAG, "device not supported");
onSupport(unsupportedIdSupplier);
} else if (code == InfoCode.INIT_ERROR_LOAD_CONFIGFILE) { // 加载配置文件出错, SDK内部不会回调onSupport
// APP自定义逻辑
Log.w(TAG, "failed to load config file");
onSupport(unsupportedIdSupplier);
} else if (code == InfoCode.INIT_ERROR_MANUFACTURER_NOSUPPORT) { // 不支持的设备厂商, SDK内部不会回调onSupport
// APP自定义逻辑
Log.w(TAG, "manufacturer not supported");
onSupport(unsupportedIdSupplier);
} else if (code == InfoCode.INIT_ERROR_SDK_CALL_ERROR) { // sdk调用出错, SSDK内部不会回调onSupport
// APP自定义逻辑
Log.w(TAG, "sdk call error");
onSupport(unsupportedIdSupplier);
} else if (code == InfoCode.INIT_INFO_RESULT_DELAY) { // 获取接口是异步的,SDK内部会回调onSupport
Log.i(TAG, "result delay (async)");
} else if (code == InfoCode.INIT_INFO_RESULT_OK) { // 获取接口是同步的,SDK内部会回调onSupport
Log.i(TAG, "result ok (sync)");
} else {
// sdk版本高于DemoHelper代码版本可能出现的情况,无法确定是否调用onSupport
// 不影响成功的OAID获取
Log.w(TAG, "getDeviceIds: unknown code: " + code);
}
}

/**
* APP自定义的getDeviceIds(Context cxt)的接口回调
*
* @param supplier
*/
@Override
public void onSupport(IdSupplier supplier) {
if (supplier == null) {
Log.w(TAG, "onSupport: supplier is null");
return;
}
if (appIdsUpdater == null) {
Log.w(TAG, "onSupport: callbackListener is null");
return;
}
endTimeMillis = System.nanoTime();
boolean isSupported;
boolean isLimited;
String oaid, vaid, aaid;
if (isArchSupport == true) {
// 获取Id信息
// 注:IdSupplier中的内容为本次调用MdidSdkHelper.InitSdk()的结果,不会实时更新。
// 如需更新,需调用MdidSdkHelper.InitSdk()
isSupported = supplier.isSupported();
isLimited = supplier.isLimited();
oaid = supplier.getOAID();
vaid = supplier.getVAID();
aaid = supplier.getAAID();
} else {
isSupported = false;
isLimited = false;
oaid = null;
vaid = null;
aaid = null;
}
float timeConsume = (endTimeMillis - startTimeMillis)/1000000f;;
// TODO (7) 自定义后续流程,以下显示到UI的示例
String idsText = "support: " + (isSupported ? "true" : "false") +
"\nlimit: " + (isLimited ? "true" : "false") +
"\nIs arch Support: " + (isArchSupport ? "true" : "false") +
"\nOAID: " + oaid +
"\nVAID: " + vaid +
"\nAAID: " + aaid +
"\nTime Consume: "+ timeConsume + "ms" +
"\n";
Log.d(TAG, "onSupport: ids: \n" + idsText);
this.setIsSupported(isSupported);
this.setIsLimited(isLimited);
this.setSupportRequestOAIDPermission(supplier.isSupportRequestOAIDPermission());
appIdsUpdater.onIdsValid(idsText);

}

public interface AppIdsUpdater {
void onIdsValid(String ids);
}

/**
* 从asset文件读取证书内容
*
* @param context
* @param assetFileName
* @return 证书字符串
*/
public static String loadPemFromAssetFile(Context context, String assetFileName) {
try {
InputStream is = context.getAssets().open(assetFileName);
BufferedReader in = new BufferedReader(new InputStreamReader(is));
StringBuilder builder = new StringBuilder();
String line;
while ((line = in.readLine()) != null) {
builder.append(line);
builder.append('\n');
}
return builder.toString();
} catch (IOException e) {
Log.e(TAG, "loadPemFromAssetFile failed");
return "";
}
}

public long getTimeConsume() {
// 因为证书只初始化一次,所以这个只能获取一次
return this.endTimeMillis - this.startTimeMillis;
}

public String loadLibrary(String lib) {
String value = "arm";
try {
Class<?> clazz = Class.forName("android.os.SystemProperties");
Method get = clazz.getMethod("get", String.class, String.class);
value = (String) (get.invoke(clazz, "ro.product.cpu.abi", ""));

if (value.contains("x86")) {
isArchSupport = false;
} else {
isArchSupport = true;
System.loadLibrary(lib); // TODO (3)SDK初始化操作
}
} catch (Throwable e) {

}
if (!isArchSupport) {
return "Arch: x86\n";
} else {
return "Arch: Not x86";
}
}

public boolean isArchSupport() {
return isArchSupport;
}

public void requestOAIDPermission(Context appContext, IPermissionCallbackListener listener) {
MdidSdkHelper.requestOAIDPermission(appContext, listener);
}

public boolean getIsSupported() {
return this.isSupported;
}

public boolean setIsSupported(boolean isSupported) {
return this.isSupported = isSupported;
}

public boolean getIsLimited() {
return this.isLimited;
}

public boolean setIsLimited(boolean isLimited) {
return this.isLimited = isLimited;
}

public boolean getIsSupportRequestOAIDPermission() {
return isSupportRequestOAIDPermission;
}

public void setSupportRequestOAIDPermission(boolean supportRequestOAIDPermission) {
isSupportRequestOAIDPermission = supportRequestOAIDPermission;
}
}
Binary file not shown.
4 changes: 4 additions & 0 deletions Doc/2.4.0/example_batch.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
��Ա�ʺ�,����,����,APP����
example,com.example.a,[email protected],a
example,com.example.b,[email protected],b
example,com.example.c,[email protected],c
Binary file added Doc/2.4.0/oaid_sdk_2.4.0.aar
Binary file not shown.
Binary file added Doc/2.4.0/oaid_sdk_2.4.0_demo_src.zip
Binary file not shown.
Binary file added Doc/2.4.0/oaid_sdk_demo_release_20240129.apk
Binary file not shown.
Loading

0 comments on commit 83af447

Please sign in to comment.