广告界有一句老话,我知道个人广告费有一半是浪费掉的,可是不知道是怎么浪费掉的。因此对广告主来讲广告跟踪很是重要,当你花了一大笔预算去作广告投放,带来的效果如何?如何根据每次广告投放的数据,去调整优化投放策略,这些都要靠广告跟踪来得到。java
但现实状况是,广告平台与广告主侧的数据存在自然的割裂。广告平台能采集到安装事件,但应用内如付费、激活等转化事件平台采集不到,没法分析真实的转化率。广告主能轻易收集到实际转化的状况,但没法和广告任务相关联,影响对后续投放的优化。而经过转化跟踪,能够将广告主侧的转化事件与广告平台侧的投听任务相关联,从而为投放效果分析作数据支撑。android
转化跟踪是将广告主最关注的转化行为(OAID、时间戳、转化行为、行为参数)经过API、SDK等方式上报给广告平台的产品。基于转化跟踪,广告主能够详细跟踪广告效果,监测不一样平台、不一样形式的广告带来的流量与对应转化效果,为不断优化广告投放提供准确的数据依据。git
为了更好地帮助广告主在华为设备上进行应用推广,华为广告服务(HUAWEI Ads Kit)也提供转化跟踪能力,方便广告主进行广告转化渠道跟踪和转化效果分析。github
1. 广告主App集成广告服务获取转化跟踪参数能力并上架华为应用市场(AppGallery)。
2. 广告主在华为广告平台(Ad Network)投放App下载类广告,并设置转化跟踪参数。3. 媒体App(Media App)请求并展现广告主投放的广告。
4. 用户在媒体App上点击广告主投放的广告,用户能够选择并下载安装广告主App。
5. 华为应用市场(AppGallery)将转化跟踪参数写入广告服务。
6. 用户在端侧激活广告主App时,App从广告服务获取转化跟踪参数。
7. 广告主App上报激活事件给三方监测平台(Third-party tracking platform),平台可以使用转化跟踪参数分析App转化效果。json
1、集成转化跟踪参数开放能力(SDK方式)
SDK方式指广告主经过华为广告服务提供的SDK接入开放能力,得到App转化跟踪参数markdown
集成SDKapp
1. 配置HUAWEI Ads SDK的Maven仓地址
打开Android Studio项目级"build.gradle"文件,在"allprojects > repositories"里面配置SDK的Maven仓地址。maven
allprojects {
repositories {
google()
jcenter()
maven { url 'https://developer.huawei.com/repo/' }
}
}
复制代码
2. 配置依赖
打开子工程"app"下的"build.gradle"文件,在dependencies新增SDK的依赖,并将{version}替换为实际的HUAWEI Ads SDK版本号,请参见版本更新说明。ide
dependencies {
implementation 'com.huawei.hms:ads-installreferrer:{version}'
}
复制代码
3. 同步修改的文件oop
4. PK前须要配置不要混淆HUAWEI Ads SDK,避免功能异常。
打开Android工程应用级根目录下的"app/proguard-rules.pro"混淆配置文件,添加以下两行代码,加入排除HUAWEI Ads SDK的混淆配置。
allprojects {
repositories {
google()
jcenter()
maven { url 'https://developer.huawei.com/repo/' }
}
}
复制代码
建立转化跟踪参数状态监听器
1. 实现InstallReferrerStateListener监听器接口的两个方法onInstallReferrerSetupFinished和onInstallReferrerServiceDisconnected,代码示例以下:
/** * 建立监听 */
private InstallReferrerStateListener installReferrerStateListener = new InstallReferrerStateListener() {
@Override
public void onInstallReferrerSetupFinished(int responseCode) {
switch (responseCode) {
case InstallReferrerClient.InstallReferrerResponse.OK:
Log.i(TAG, "connect ads kit ok");
get();
break;
case InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
// 服务不支持,请下载并安装最新版本的HMS Core(APK)
Log.i(TAG, "FEATURE_NOT_SUPPORTED");
break;
case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:
// 服务不可用,请将HMS Core(APK)版本升级到2.6.5及以上
Log.i(TAG, "SERVICE_UNAVAILABLE");
break;
default:
Log.i(TAG, "responseCode: " + responseCode);
break;
}
}
@Override
public void onInstallReferrerServiceDisconnected() {
Log.i(TAG, "onInstallReferrerServiceDisconnected");
}
};
复制代码
2. 在链接成功的回调中调用getInstallReferrer方法获取转化跟踪参数。
/** * 获取转化跟踪参数 */
private void get() {
if (null != mReferrerClient) {
try {
// 获取referrerDetails实例,不要在主线程中调用此方法
ReferrerDetails referrerDetails = mReferrerClient.getInstallReferrer();
if (null != referrerDetails && null != mCallback) {
// 更新数据
mCallback.onSuccess(referrerDetails.getInstallReferrer(),
referrerDetails.getReferrerClickTimestampMillisecond(),
referrerDetails.getInstallBeginTimestampMillisecond());
}
} catch (RemoteException e) {
Log.i(TAG, "getInstallReferrer RemoteException: " + e.getMessage());
} catch (IOException e) {
Log.i(TAG, "getInstallReferrer IOException: " + e.getMessage());
} finally {
disconnect();
}
}
}
复制代码
建立InstallReferrerClient实例
经过builder配置和建立一个InstallReferrerClient实例。
1. 调用InstallReferrerClient.newBuilder建立一个Builder实例。
2. 调用build建立InstallReferrerClient实例。
mReferrerClient = InstallReferrerClient.newBuilder(mContext).build();
复制代码
链接转化跟踪参数服务
创建与转化跟踪参数服务的链接。
1. 设置startConnection的监听器为已建立的InstallReferrerStateListener监听器。
2. 在子线程中调用startConnection方法链接服务。
mReferrerClient.startConnection(installReferrerStateListener);
复制代码
2、集成转化跟踪参数开放能力(AIDL方式)
除了接入SDK之外,广告主也能够直接调用华为广告服务的AIDL接口获取华为设备上的转化跟踪参数,两种方法获取同一设备的转化跟踪参数是相同的。
新增AIDL接口文件
在工程"app/src/main/aidl/com/huawei/android/hms/ppskit/"路径中新增一个"IPPSChannelInfoService.aidl"接口文件,包名为"com.huawei.android.hms.ppskit",而后将下面内容拷贝到该接口文件中。
// IPPSRemoteService.aidl
package com.huawei.android.hms.ppskit;
/* * 注意:不要修改AIDL文件的方法顺序 */
interface IPPSChannelInfoService {
String getChannelInfo();
}
复制代码
建立一个类,实现ServiceConnection接口
1. 实现ServiceConnection的onServiceConnected方法。
2. 调用IPPSChannelInfoService.Stub.asInterface方法获取IPPSChannelInfoService。
3. 调用getChannelInfo方法获取转化跟踪参数。
private final class InstallReferrerServiceConnection implements ServiceConnection {
private InstallReferrerServiceConnection() {
}
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.i(TAG, "onServiceConnected");
mService = IPPSChannelInfoService.Stub.asInterface(iBinder);
if (null != mService) {
try {
// 获取渠道信息(Json格式)
String channelJson = mService.getChannelInfo();
Log.i(TAG, "channelJson: " + channelJson);
// 解析
JSONObject jsonObject = new JSONObject(channelJson);
// 获取转化跟踪参数
String installReferrer = jsonObject.optString("channelInfo");
long clickTimestamp = jsonObject.optLong("clickTimestamp", 0);
long installTimestamp = jsonObject.optLong("installTimestamp", 0);
if (null != mCallback) {
// 更新数据
mCallback.onSuccess(installReferrer, clickTimestamp, installTimestamp);
} else {
mCallback.onFail("install referrer is empty");
}
} catch (RemoteException e) {
Log.e(TAG, "getChannelInfo RemoteException");
mCallback.onFail(e.getMessage());
} catch (Exception e) {
Log.e(TAG, "getChannelInfo Exception");
mCallback.onFail(e.getMessage());
} finally {
unbindService();
}
}
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
Log.i(TAG, "onServiceDisconnected");
mService = null;
}
}
复制代码
链接转化跟踪参数的AIDL服务
1. 建立一个InstallReferrerServiceConnection实例。
2. 建立一个Intent,Action是"com.huawei.android.hms.CHANNEL_SERVICE"。
3. 设置Intent的包名为"com.huawei.hwid"。
4. 调用bindService链接转化跟踪参数的AIDL服务
private boolean bindService() {
Log.i(TAG, "bindService");
if (null == mContext) {
Log.e(TAG, "context is null");
return false;
}
mServiceConnection = new InstallReferrerServiceConnection();
Intent intent = new Intent(Constants.SERVICE_ACTION);
intent.setPackage(Constants.SERVICE_PACKAGE_NAME);
// 绑定服务
boolean result = mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
Log.i(TAG, "bindService result: " + result);
return result;
}
复制代码
断开转化跟踪参数的AIDL服务
使用完AIDL接口后,应该主动断开服务链接。
private void unbindService() {
Log.i(TAG, "unbindService");
if (null == mContext) {
Log.e(TAG, "context is null");
return;
}
if (null != mServiceConnection) {
// 解绑服务
mContext.unbindService(mServiceConnection);
mService = null;
mContext = null;
mCallback = null;
}
}
复制代码
3、接入单机测试
完成上述获取转化跟踪参数业务代码的补全后,就能够进行编译,完成编译后,生成APK安装并运行。提供了相关Demo, 能够在端侧生成转化跟踪参数,供测试使用。
修改App用于测试转化跟踪参数。
SDK方式:在建立InstallReferrerClient时设置为测试模式,调用setTest(true),示例代码以下所示:
mReferrerClient = InstallReferrerClient.newBuilder(mContext).setTest(true).build();
mReferrerClient.startConnection(installReferrerStateListener);
复制代码
AIDL方式:在测试时设置绑定的AIDL服务的包名为"com.huawei.pps.hms.test",示例代码以下所示:
mServiceConnection = new InstallReferrerServiceConnection();
Intent intent = new Intent(Constants.SERVICE_ACTION);
intent.setPackage(Constants.TEST_SERVICE_PACKAGE_NAME);
boolean result = mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
Log.i(TAG, "bindService result: " + result);
复制代码
将工程编译生成APK文件,并将APK文件安装到设备。运行App,显示以下页面。
点击"写入测试转化跟踪参数",界面将跳转到以下图所示页面,输入的App包名(参见"AndroidManifest.xml")和转化跟踪参数,并保存。
获得转化跟踪参数后,须要登陆华为广告平台将广告跟踪参数和推广任务联系起来
1. 广告主App集成转化跟踪参数后,上架华为应用市场。
2. 在华为广告投放平台建立推广任务时,设置转化跟踪参数,以下图所示:
3. 读取转化跟踪参数。广告主App被激活时,将会读取转化跟踪参数,并上报信息到开发者制定分析平台。
欲了解更多详情
访问华为广告服务官网
获取华为广告服务开发指导文档
华为广告服务开源仓库地址:GitHub、Gitee
华为HMS Core官方论坛
解决集成问题请到Stack Overflow
关注咱们,第一时间了解HMS Core最新技术~