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开发者说明文档)

img

  然后在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需满足以下条件:

  • actionParamJSONObject类型;
  • actionParam参数中的key不能为空,且只能包含字母、数字和下划线,不能以数字开头,长度不能超过255个字符;
  • actionParam参数的value必须是String/Number/Boolean/JSONArray中的一种;
  • 如果actionParam参数中的某个valueJSONArray,那么这个JSONArray中的每个元素必须是String/Number/Boolean中的一种;

7. 测试

1. 开启日志打印,首次启动应用

BaiduAction.setPrintLog(true);

2. 出现下图日志信息,则说明正常上报激活。若缺少图中某行提示,请检查SDK接口是否有被触发。

img

3. 上报激活成功,却没有imei信息时,会有“imei为空...”的提示。根据提示进行修改。

img

8. 常见问题

  1. oaid sdk必须集成吗?如果获取不到会影响初始化和其他上报吗?
    非必需集成,如果不集成,Android高版本设备由于获取不到imei号,影响后续归因。Oaid获取不到不影响SDK初始化以及后续的数据上报。

results matching ""

    No results matching ""