4

如何正确跟踪广告转化数据,优化广告投放效果?

 3 years ago
source link: https://my.oschina.net/u/4956408/blog/5174994
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

如何正确跟踪广告转化数据,优化广告投放效果? - 华为移动服务的个人空间 - OSCHINA - 中文开源技术交流社区

为什么要做转化跟踪

广告界有一句老话,我知道我的广告费有一半是浪费掉的,但是不知道是怎么浪费掉的。所以对广告主来说广告跟踪非常重要,当你花了一大笔预算去做广告投放,带来的效果如何?如何根据每次广告投放的数据,去调整优化投放策略,这些都要靠广告跟踪来获得。

但现实情况是,广告平台与广告主侧的数据存在天然的割裂。广告平台能采集到安装事件,但应用内如付费、激活等转化事件平台采集不到,无法分析真实的转化率。广告主能轻易收集到实际转化的情况,但无法和广告任务相关联,影响对后续投放的优化。而通过转化跟踪,可以将广告主侧的转化事件与广告平台侧的投放任务相关联,从而为投放效果分析做数据支撑。

什么是转化跟踪

转化跟踪是将广告主最关注的转化行为(OAID、时间戳、转化行为、行为参数)通过API、SDK等方式上报给广告平台的产品。基于转化跟踪,广告主可以详细跟踪广告效果,监测不同平台、不同形式的广告带来的流量与对应转化效果,为不断优化广告投放提供准确的数据依据。

为了更好地帮助广告主在华为设备上进行应用推广,华为广告服务(HUAWEI Ads Kit)也提供转化跟踪能力,方便广告主进行广告转化渠道跟踪和转化效果分析。

华为广告服务转化跟踪参数能力工作原理

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转化效果。

一、集成转化跟踪参数开放能力(SDK方式)
SDK方式指广告主通过华为广告服务提供的SDK接入开放能力,获得App转化跟踪参数

集成SDK

1. 配置HUAWEI Ads SDK的Maven仓地址
打开Android Studio项目级"build.gradle"文件,在"allprojects > repositories"里面配置SDK的Maven仓地址。

allprojects { 
        repositories { 
                google() 
                jcenter() 
                maven { url 'https://developer.huawei.com/repo/' } 
        } 
}

2. 配置依赖
打开子工程"app"下的"build.gradle"文件,在dependencies新增SDK的依赖,并将{version}替换为实际的HUAWEI Ads SDK版本号,请参见版本更新说明

dependencies { 
        implementation 'com.huawei.hms:ads-installreferrer:{version}' 
}

3. 同步修改的文件

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);

二、集成转化跟踪参数开放能力(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; 
     } 
 }

三、接入单机测试
完成上述获取转化跟踪参数业务代码的补全后,就可以进行编译,完成编译后,生成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被激活时,将会读取转化跟踪参数,并上报信息到开发者制定分析平台。

欲了解更多详情

访问华为广告服务官网
获取华为广告服务开发指导文档
华为广告服务开源仓库地址:GitHubGitee
华为HMS Core官方论坛 
解决集成问题请到Stack Overflow

关注我们,第一时间了解HMS Core最新技术~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK