Android SDK接入文档
1. 下载和导入SDK
Android SDK和demo下载
Android SDK下载地址
Demo工程《BaiduMobadsActionDemo》。
2. OAID SDK集成
2.1 获取安全联盟SDK
需要在官网地址注册下载OAID SDK,具体引入流程参照该网站的SDK开发者说明文档: 注册下载地址 (如果应用已经集成了安全联盟的SDK,该步骤可以跳过。)
Demo中oCPC SDK 为2.3及其以上的版本,在使用OAID SDK时,请使用1.0.22及其以上版本,此版本安全联盟做了重大的优化和升级,建议根据最新集成文档完成升级
2.2 导入Android Studio
找到您的App工程下的libs文件夹,将下载到的Baidu_ocpc_action_*_*.aar
和OAID SDK里的miit_mdid_x.x.x.aar
拷贝到该目录下。(提示:OAID SDK的引入也可直接参考官网的SDK开发者说明文档)
然后在Android Studio中找到您的App所在的module目录,修改它的build.gradle文件,在dependencies下面添加SDK的依赖,如下所示。
dependencies {
implementation files('libs/miit_mdid_x.x.x.aar')
implementation files('libs/Baidu_ocpc_action_*.*.aar')
}
2.3 配置appid
appid是App在各个应用商店生成的,需要去各个应用商店查看。集成OAID SDK的时候,OAID SDK开发者文档要求在supplierconfig.json里注明自己应用的appid,参见demo里的格式。然后将 supplierconfig.json 拷贝到项目 assets 目录下,并修改里边对应内容。 (注:如果没有对应的appid,可以不填,不会影响OAID的获取。)
2.4 设置 gradle 编译选项
这块可以根据自己对平台的选择进行合理配置
defaultConfig {
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"
}
}
添加sdk后即可执行gradle sync
操作,添加成功后即可按照接口说明使用sdk中的相应接口。
2.5 设置OAID
方案1:只需要完成上述步骤,SDK本身即可自动采集OAID
方案2:oCPC SDK提供接口BaiduAction.setOaid("xxx")进行设置
3. 添加SDK需要的权限
找到您的App所在module的目录,修改AndroidManifest.xml
文件,添加权限:
<uses-permission android:name="android.permission.INTERNET"/> <!-- 允许联网 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!-- 检测联网方式,区分设备当前网络是2G、3G、4G还是WiFi -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- 获取MAC地址,和设备标识一起作为用户标识 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/><!-- 获取设备标识,标识用户 -->
4. 混淆配置
-dontwarn com.baidu.mobads.action.**
-keep class com.baidu.mobads.action.** {*;}
-keep, includedescriptorclasses class com.asus.msa.SupplementaryDID.** { *; }
-keepclasseswithmembernames class com.asus.msa.SupplementaryDID.** { *; }
-keep, includedescriptorclasses class com.asus.msa.sdid.** { *; }
-keepclasseswithmembernames class com.asus.msa.sdid.** { *; }
-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}
-keep class com.bun.miitmdid.**{*;}
-keep class com.bun.lib.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class a.**{*;}
5. SDK初始化
public class BaiduActionApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 调用SDK初始化接口:
// 1. 调用位置:必须在Application的onCreate方法中调用。
// 2. 必须在其他的数据上报接口调用之前调用,否则其他接口都将无法使用。
// USER_ACTION_SET_ID:SDK应用ID,需要在百度申请; Constants.APP_SECRET_KEY:SDK应用密钥,需要在百度申请
// 是否在控制台输出⽇志,可⽤于观察⽤⼾⾏为⽇志上报情况,建议仅在调试时使⽤,release版 请设置为false !
BaiduAction.setPrintLog(true);
BaiduAction.init(this, Constants.USER_ACTION_SET_ID, Constants.APP_SECRET_KEY);
// 设置应用激活的间隔(默认30天)
BaiduAction.setActivateInterval(this, 7);
// 以下两个接口必须按照文档要求在正确位置调用,否则无法正常上传日志
BaiduAction.onRequestPermissionsResult()
BaiduAction.setPrivacyStatus()
}
}
BaiduAction.init()只是基本的初始化,BaiduAction.onRequestPermissionsResult()和BaiduAction.setPrivacyStatus()接口必须全部调用才可以完成集成,具体使用见下方说明。
5.1 应用授权(必调接口)
BaiduAction.onRequestPermissionsResult()
该接口目的是设置SDK内部允许采集IMEI,SDK不做权限申请操作。
- Android 6.0及以上版本(动态权限):在Activity的回调里调用回传
Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
for (int i = 0; i < permissions.length; i++) {
String temp = permissions[i];
if (temp.equals(Manifest.permission.READ_PHONE_STATE)) {
// 授权结果回传
BaiduAction.onRequestPermissionsResult(requestCode, permissions, grantResults);
break;
}
}
}
- Android 6.0以下版本(静态权限):如果宿主App支持6.0以下系统,则直接在初始化后调用
String[] permissions = new String[]{Manifest.permission.READ_PHONE_STATE};
int[] grants = new int[]{0};
BaiduAction.onRequestPermissionsResult(1024, permissions, grants);
5.2 隐私政策(必调接口)
根据工信部要求,在宿主App弹出用户隐私权限弹窗点击同意后才可以采集设备ID(如果宿主App没有用户隐私协议弹窗则直接设置),通过接口BaiduAction.setPrivacyStatus(PrivacyStatus.AGREE)
进行设置
默认状态 (PrivacyStatus.NOT_OP)上报时不会携带imei、mac等敏感信息
选择同意(PrivacyStatus.AGREE) 调用BaiduAction.setPrivacyStatus(PrivacyStatus.AGREE) 上报时会携带imei、mac等敏感信息
选择不同意(PrivacyStatus.DISAGREE)调用BaiduAction.setPrivacyStatus(PrivacyStatus.DISAGREE)上报时不会携带imei、mac等敏感信息
6. 上报行为数据
在App内发生转化行为时(如某一个Button组件的onClick(View view)
方法),可以调用下面的接口上报行为数据。
BaiduAction.logAction(actionType);
或
BaiduAction.logAction(actionType, actionParam);
6.1 关键类型
若应用中发生了注册、付费的行为,需要调用接口,上报对应类型的转化行为
public static final String REGISTER = "REGISTER"; // 注册
public static final String PURCHASE = "PURCHASE"; // 付费
示例:用户付费且付费金额为100元(上报单位为分)
JSONObject actionParam = new JSONObject();
actionParam.put(ActionParam.Key.PURCHASE_MONEY, 10000);
BaiduAction.logAction(ActionType.PURCHASE, actionParam);
6.2 其它预定类型
public static final String PAGE_VIEW = "PAGE_VIEW"; // 页面浏览
public static final String VIEW_CONTENT = "VIEW_CONTENT"; // 内容浏览
public static final String CONSULT = "CONSULT"; // 咨询
public static final String ADD_TO_CART = "ADD_TO_CART"; // 加入购物车
public static final String SEARCH = "SEARCH"; // 搜索
public static final String ADD_TO_WISHLIST = "ADD_TO_WISHLIST"; // 加入收藏
public static final String INITIATE_CHECKOUT = "INITIATE_CHECKOUT"; // 开始结算
public static final String COMPLETE_ORDER = "COMPLETE_ORDER"; // 下单
public static final String DOWNLOAD_APP = "DOWNLOAD_APP"; // 下载应用
public static final String RATE = "RATE"; // 评分
public static final String RESERVATION = "RESERVATION"; // 预订
public static final String SHARE = "SHARE"; // 分享
public static final String APPLY = "APPLY"; // 申请
public static final String CLAIM_OFFER = "CLAIM_OFFER"; // 领取卡券
public static final String NAVIGATE = "NAVIGATE"; // 导航
public static final String PRODUCT_RECOMMEND = "PRODUCT_RECOMMEND"; // 商品推荐
public static final String LOGIN = "LOGIN"; // 登录
public static final String BIND_SOCIAL_ACCOUNT = "BIND_SOCIAL_ACCOUNT"; // 绑定社交账号
public static final String CREATE_ROLE = "CREATE_ROLE"; // 创建角色
public static final String UPGRADE = "UPGRADE"; // 升级
public static final String COMPLETE_TEACHING_TASK = "COMPLETE_TEACHING_TASK";// 完成教学任务
public static final String AUTHORIZATION_TRUST = "AUTHORIZATION_TRUST"; // 授权信任
public static final String CASH_OUT = "CASH_OUT"; // 提现
6.3 actionParam字段,非必要字段,可定制上报信息
自定义的actionParam
需满足以下条件:
actionParam
为JSONObject
类型;actionParam
参数中的key
不能为空,且只能包含字母、数字和下划线,不能以数字开头,长度不能超过255个字符;actionParam
参数的value
必须是String
/Number
/Boolean
/JSONArray
中的一种;- 如果
actionParam
参数中的某个value
是JSONArray
,那么这个JSONArray
中的每个元素必须是String
/Number
/Boolean
中的一种;
7. 测试
1. 开启日志打印,首次启动应用
BaiduAction.setPrintLog(true);
2. 出现下图日志信息,则说明正常上报激活。若缺少图中某行提示,请检查SDK接口是否有被触发。
3. 上报激活成功,却没有imei信息时,会有“imei为空...”的提示。根据提示进行修改。
8. 常见问题
- oaid sdk必须集成吗?如果获取不到会影响初始化和其他上报吗?
非必需集成,如果不集成,Android高版本设备由于获取不到imei号,影响后续归因。Oaid获取不到不影响SDK初始化以及后续的数据上报。