如何正確跟蹤廣告轉化數據,優化廣告投放效果?

爲何要作轉化跟蹤

廣告界有一句老話,我知道個人廣告費有一半是浪費掉的,可是不知道是怎麼浪費掉的。因此對廣告主來講廣告跟蹤很是重要,當你花了一大筆預算去作廣告投放,帶來的效果如何?如何根據每次廣告投放的數據,去調整優化投放策略,這些都要靠廣告跟蹤來得到。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轉化跟蹤參數app

集成SDKmaven

1. 配置HUAWEI Ads SDK的Maven倉地址
打開Android Studio項目級"build.gradle"文件,在"allprojects > repositories"裏面配置SDK的Maven倉地址。ide

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. 同步修改的文件gradle

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")和轉化跟蹤參數,並保存。

4、產品聯調

獲得轉化跟蹤參數後,須要登陸華爲廣告平臺將廣告跟蹤參數和推廣任務聯繫起來
1. 廣告主App集成轉化跟蹤參數後,上架華爲應用市場。
2. 在華爲廣告投放平臺建立推廣任務時,設置轉化跟蹤參數,以下圖所示:

3. 讀取轉化跟蹤參數。廣告主App被激活時,將會讀取轉化跟蹤參數,並上報信息到開發者制定分析平臺。

欲瞭解更多詳情

訪問華爲廣告服務官網
獲取華爲廣告服務開發指導文檔
華爲廣告服務開源倉庫地址:GitHubGitee
華爲HMS Core官方論壇 
解決集成問題請到Stack Overflow

關注咱們,第一時間瞭解HMS Core最新技術~

相關文章
相關標籤/搜索