1. 需求簡介
本文主要介紹cocos2dx3.17 安卓項目在接入廣告SDK的過程中如何集成OAID的SDK瓶殃。
因為Android 10獲取不到IMEI,可能會影響部分廣告平臺的廣告填充率副签,所以需要接入 信通院SDK(OAID SDK) 以獲取OAID遥椿。只需要將該SDK導(dǎo)入到您的工程內(nèi),并嘗試調(diào)用下該SDK的API淆储,保證能正常獲取到OAID即可冠场,代碼中不需要調(diào)用獲取OAID的接口,廣告平臺SDK內(nèi)部會自動獲取OAID本砰。
2. OAID SDK導(dǎo)入
oaid的官網(wǎng)
目前打不開碴裙,網(wǎng)上能下到的最新版本為:msa_mdid_1.0.22.aar 提取碼: jvug,要求minSdkversion=21以上点额。
1舔株、把 msa_mdid_1.0.22.aar 拷貝到項目的 libs 目錄,并設(shè)置依賴
implementation fileTree(dir: 'libs', include: ['*.jar', "*.aar"])
2还棱、將 supplierconfig.json 拷貝到項目 assets 目錄下载慈,文件里邊的appid為對應(yīng)應(yīng)用商店自己已上架的APP的appid,有則填珍手,不填也行办铡。
3、設(shè)置 gradle 編譯選項琳要。
android {
....
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
ndk {
abiFilters = ['armeabi-v7a']
}
}
....
}
4料扰、混淆設(shè)置
# OAID
-dontwarn com.bun.**
-keep class com.bun.**{ *;}
5、嘗試獲取oaid
private void getoaid() {
try {
int i = new OaidHelper(new OaidHelper.AppIdsUpdater() {
@Override
public void OnIdsAvalid(@NonNull final String oaid) {
if (!TextUtils.isEmpty(oaid)) {
Log.i("OaidHelper", "load oaid return value: " + oaid);
}
}
}).CallFromReflect(context);
} catch (Exception e) {
e.printStackTrace();
}
}
OaidHelper.java 如下:
package com.game.utils;
import android.content.Context;
import android.util.Log;
import android.support.annotation.NonNull;
import com.bun.miitmdid.core.ErrorCode;
import com.bun.miitmdid.core.MdidSdkHelper;
import com.bun.miitmdid.interfaces.IIdentifierListener;
import com.bun.miitmdid.interfaces.IdSupplier;
public class OaidHelper implements IIdentifierListener {
private OaidHelper.AppIdsUpdater _listener;
public OaidHelper(OaidHelper.AppIdsUpdater callback){
_listener=callback;
}
public void getDeviceIds(Context cxt){
long timeb=System.currentTimeMillis();
// 方法調(diào)用
int nres = CallFromReflect(cxt);
long timee=System.currentTimeMillis();
long offset=timee-timeb;
if(nres == ErrorCode.INIT_ERROR_DEVICE_NOSUPPORT){//不支持的設(shè)備
}else if( nres == ErrorCode.INIT_ERROR_LOAD_CONFIGFILE){//加載配置文件出錯
}else if(nres == ErrorCode.INIT_ERROR_MANUFACTURER_NOSUPPORT){//不支持的設(shè)備廠商
}else if(nres == ErrorCode.INIT_ERROR_RESULT_DELAY){//獲取接口是異步的焙蹭,結(jié)果會在回調(diào)中返回晒杈,回調(diào)執(zhí)行的回調(diào)可能在工作線程
}else if(nres == ErrorCode.INIT_HELPER_CALL_ERROR){//反射調(diào)用出錯
}
Log.d(getClass().getSimpleName(),"return value: "+String.valueOf(nres));
}
/*
* 方法調(diào)用
*
* */
public int CallFromReflect(Context cxt){
return MdidSdkHelper.InitSdk(cxt,true,this);
}
/*
* 獲取相應(yīng)id
*
* */
@Override
public void OnSupport(boolean isSupport, IdSupplier _supplier) {
if(_supplier==null) {
return;
}
String oaid=_supplier.getOAID();
String vaid=_supplier.getVAID();
String aaid=_supplier.getAAID();
StringBuilder builder=new StringBuilder();
builder.append("support: ").append(isSupport?"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("oaid", "idstext:" + idstext);
if(_listener!=null){
_listener.OnIdsAvalid(oaid);
}
}
public interface AppIdsUpdater{
void OnIdsAvalid(@NonNull String ids);
}
}
3. 說明
舊的msa_mdid_1.0.13.jar 版本需要在應(yīng)用的application的onCreate中調(diào)用
JLibrary.InitEntry(this);
新的msa_mdid_1.0.22.aar版本已經(jīng)不需要了