為什么要做轉化跟蹤
廣告界有一句老話,我知道我的廣告費有一半是浪費掉的,但是不知道是怎么浪費掉的。所以對廣告主來說廣告跟蹤非常重要,當你花了一大筆預算去做廣告投放,帶來的效果如何?如何根據每次廣告投放的數據,去調整優化投放策略,這些都要靠廣告跟蹤來獲得。
但現實情況是,廣告平台與廣告主側的數據存在天然的割裂。廣告平台能采集到安裝事件,但應用內如付費、激活等轉化事件平台采集不到,無法分析真實的轉化率。廣告主能輕易收集到實際轉化的情況,但無法和廣告任務相關聯,影響對后續投放的優化。而通過轉化跟蹤,可以將廣告主側的轉化事件與廣告平台側的投放任務相關聯,從而為投放效果分析做數據支撐。
什么是轉化跟蹤
轉化跟蹤是將廣告主最關注的轉化行為(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
關注我們,第一時間了解HMS Core最新技術~