为什么要做转化跟踪

广告界有一句老话,我晓得我的广告费有一半是节约掉的,然而不晓得是怎么节约掉的。所以对广告主来说广告跟踪十分重要,当你花了一大笔估算去做广告投放,带来的成果如何?如何依据每次广告投放的数据,去调整优化投放策略,这些都要靠广告跟踪来取得。

但现实情况是,广告平台与广告主侧的数据存在人造的割裂。广告平台能采集到装置事件,但利用内如付费、激活等转化事件平台采集不到,无奈剖析实在的转化率。广告主能轻易收集到理论转化的状况,但无奈和广告工作相关联,影响对后续投放的优化。而通过转化跟踪,能够将广告主侧的转化事件与广告平台侧的投放工作相关联,从而为投放成果剖析做数据撑持。

什么是转化跟踪

转化跟踪是将广告主最关注的转化行为(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被激活时,将会读取转化跟踪参数,并上报信息到开发者制订剖析平台。

欲了解更多详情

拜访华为广告服务官网,理解更多相干内容
获取华为广告服务开发领导文档
华为广告服务开源仓库地址:GitHub、Gitee
华为HMS Core官方论坛 
解决集成问题请到Stack Overflow

点击右上角头像右方的关注,第一工夫理解华为挪动服务最新技术~