广告平台对接Android集成指引

注意:此文档是针对使用了 渠道统计 功能中的 广告平台渠道 报表统计功能而提供的补充性文档

  • 首次集成SDK的,先按照Android集成指南或者 后台【应用集成】->【Android集成】文档集成完毕

  • 进入应用后台,找到:“android集成”->“android应用配置”->“广告平台对接”,勾选并保存

一、设备唯一标识码获取

针对广告平台,为了精准地匹配到渠道,需要获取设备唯一标识码(IMEI),因此需要做额外的权限申请。

1、权限声明

AndroidManifest.xml文件中添加权限声明

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

2、请求权限,确保初始化在权限请求之后调用

内部ApiinitWithPermission已废弃,请自行处理权限申请

2.1、以下示例代码需要依赖support-v7包,如项目中已经导入依赖,请忽略
build.gradle中导入依赖

dependencies {
    implementation "com.android.support:appcompat-v7:28.0.0"
}

2.2、删除掉原有的初始化代码,在请求权限之后初始化
示例:在应用启动页申请权限并初始化,确保后续操作在初始化之后

public class SplashActivity extends AppCompatActivity {
    Configuration configuration = new Configuration.Builder().adEnabled(true).build();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 999);
            } else {
                OpenInstall.init(getApplicationContext(), configuration);
            }
        } else {
            OpenInstall.init(getApplicationContext(), configuration);
        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 999) {
            OpenInstall.init(getApplicationContext(), configuration);
        }
    }

}

二、获取OAID

在 Android 10 版本中,广告渠道商作为非厂商系统应用将不支持获取 IMEI,会造成 Android 10 以上系统用户无法进行推广渠道的匹配。

移动安全联盟针对该问题联合国内手机厂商推出补充设备标准体系方案,选择 OAID 字段作为 IMEI 的替代字段。根据“移动智能终端补充设备标识体系”技术要求,华为、小米、OPPO、vivo、中兴、努比亚、魅族、联想、三星等设备厂商均将逐步实现本标识体系。广告渠道商也已将 OAID 作为渠道匹配的字段,OAID 的准确性和覆盖率均满足广告场景的使用需求。联盟已开发并发布支持多厂商的统一的补充设备标识调用SDK,协助移动应用开发者更便捷的访问移动智能终端补充设备标识体系。

集成前,请先前往移动安全联盟注册账号并进行“资质审核”,再下载最新版本 SDK

1.0.26之前版本

1、拷贝资源

  • oaid_sdk_x.x.x.aar拷贝到项目的 libs 目录
  • supplierconfig.json拷贝到项目 assets 目录下,并修改里面的内容,appid 需要去对应厂商的应用商店里注册自己的 app

2、设置依赖

implementation files("libs/oaid_sdk_x.x.x.aar")

3、设置gradle编译选项

ndk {
    abiFilters 'armeabi-v7a','x86','arm64-v8a','x86_64','armeabi'
}

4、设置混淆
由于版本更新会新增设备厂商支持或者修改包架构,导致混淆配置不一样,因此开发者需要根据版本对应的文档设置混淆

5、代码调用

Configuration configuration = new Configuration.Builder().adEnabled(true).build();
OpenInstall.init(activity, configuration);

1.0.26之后版本

SDK 1.0.26 版本引入证书校验机制,会对 APP 包名进行校验,每个 APP 包名对应一个证书文件,只有包名校验成功的 APP 才能获取ID。证书需要填写 example_batch.csv 后发送到 msa@caict.ac.cn 申请,注意每个包名对应一个签名,申请时要将所需的全部包名填写到表格中。默认证书有效期一年,快过期时请及时发送邮件申请更新。

1、拷贝资源

  • oaid_sdk_x.x.x.aar拷贝到项目的 libs 目录
  • supplierconfig.json拷贝到项目 assets 目录下,并修改里面的内容,appid 需要去对应厂商的应用商店里注册自己的 app
  • 将证书文件(应用包名.cert.pem)拷贝到项目 assets 目录下(为避免证书过期影响 APP 获取 ID,建议证书信息可以从后台服务器获取)

2、设置依赖

implementation files("libs/oaid_sdk_x.x.x.aar")

3、设置 gradle 编译选项

ndk {
    abiFilters 'armeabi-v7a','x86','arm64-v8a','x86_64'
}

4、设置混淆
由于版本更新会新增设备厂商支持或者修改包架构,导致混淆配置不一样,因此开发者需要根据版本对应的文档设置混淆

5、代码调用
调用前必须先载入SDK安全库

 // 库名称请根据 aar 中的 SO 文件名修改,某些版本中该库名称类似:nllvm**********
 System.loadLibrary("msaoaidsec");

在调用openinstall初始化前,先初始化SDK证书

if (!isCertInit){  // 证书只需初始化一次
    try {
        isCertInit = MdidSdkHelper.InitCert(this, certString);
    } catch (java.lang.Error e){
        e.printStackTrace();
    }
    if(!isCertInit){
        Log.e("MSA", "getDeviceIds: cert init failed");
    }
}
Configuration configuration = new Configuration.Builder().adEnabled(true).build();
OpenInstall.init(activity, configuration);

自行获取并传入(推荐)

由于联盟SDK版本更新可能导致 openinstall SDK 内部获取失败,推荐开发者参照联盟SDK对应版本的集成文档集成,并将获取到的 oaid 传递给 openinstall SDK,示例如下:

/**
 * adEnabled 为 true 表示 SDK 需要获取广告追踪相关参数
 * f32a09dc-3312-d43e-6583-62fac13f33ae 是通过移动安全联盟获取到的 oaid
 */
Configuration configuration = new Configuration.Builder().adEnabled(true)
        .oaid("f32a09dc-3312-d43e-6583-62fac13f33ae").build();
OpenInstall.init(activity, configuration);

三、Google 广告 ID 获取

1、获取 Google Advertising ID,您不需要做任何项目配置,仅需设置允许 SDK 获取广告追踪相关参数

Configuration configuration = new Configuration.Builder().adEnabled(true).build();
OpenInstall.init(activity, configuration);

2、开发者也可以自行获取 advertisingId ,并传递给 OpenInstall SDK 。示例如下:

/**
 * adEnabled 为 true 表示 SDK 需要获取广告追踪相关参数
 * e78a09dc-2207-4c1b-9879-1fc4de1f22f4 是通过 google api 获取到的 advertisingId
 */
Configuration configuration = new Configuration.Builder().adEnabled(true)
        .gaid("e78a09dc-2207-4c1b-9879-1fc4de1f22f4").build();
OpenInstall.init(this, configuration);

四、上传APK包,检查配置

广告代码集成完毕后,需要导出安装包上传openinstall后台,openinstall会自动检查应用所有的配置工作

“权限列表”红色提示表明,应用当前上传的APK未声明必要的权限