广告平台对接Android集成指引

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

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

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

一、设备唯一标识码获取

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

1、权限声明

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

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

2、利用内部Api申请权限并初始化

2.1、删除掉原有的初始化代码,在Activity中调用需要请求权限的初始化 API

OpenInstall.initWithPermission(activity);

如果在调用初始化之后,想立即做后续API调用,改用以下方法

OpenInstall.initWithPermission(this, new Runnable() {
    @Override
    public void run() {
        // 调用 getWakeUp 或者 getInstall
    }
});

2.2、重写ActivityonRequestPermissionsResult方法,将请求结果告知SDK

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        OpenInstall.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

3、自行处理权限请求,确保初始化在权限请求之后调用

如果已使用内部Api申请权限并初始化,请忽略
3.1、需要依赖support-v7包,如项目中已经导入依赖,请忽略
build.gradle中导入依赖

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

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

public class SplashActivity extends AppCompatActivity {

    @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());
            }
        } else {
            OpenInstall.init(getApplicationContext());
        }

    }

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

}

二、获取OAID

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

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

集成前,请先前往移动安全联盟申请下载 SDK

1、导入SDK和资源

将下载的压缩包解压
msa_mdid_1.0.13.aar(文件名可能不一样,找到aar文件即可)拷贝到项目的app/libs/目录下
supplierconfig.json拷贝到项目app/src/main/assets/⽬录下

2、配置项目

添加依赖
app/build.gradle文件的dependencies中添加 MSA 库依赖

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    // 添加MSA库依赖
    implementation files('libs/msa_mdid_1.0.13.aar')
}

配置混淆
在混淆文件中,新增一条记录

-keep class com.bun.miitmdid.core.** {*;}

设置编译选项
app/build.gradle文件的android -> defaultConfig中设置编译选项

android {
    // ...
    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"
        }
    }
}

三、上传APK包,检查配置

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

红色提示表明,当前选择的APK包集成的SDK版本过低,且没有声明必要的权限