過去,App里各種彈窗和貼片廣告不僅令用戶心煩,廣告主們也頭疼,一方面,廣撒網的廣告成本較高;另一方面,這些廣告不能精準觸達需要的用戶,直到個性化廣告的出現,才解決了這一痛點,
如今媒體廣告主們為了更精準地投放廣告,通常會收集用戶個人資料來判斷他們的特征定位、興趣愛好或近期需求等,然后在App里進行定向的廣告推送,基于有些用戶不愿意共享隱私資料來接收個性化廣告,所以App出于實作個性化廣告的目的需要收集、使用和共享用戶的個人資料,須先獲得用戶的有效同意,
HUAWEI Ads提供了征求用戶意見能力,在一些隱私比較嚴格的地區,建議發布商通過HUAWEI Ads SDK接入個性化廣告服務,將收集和使用用戶的個人資料與HUAWEI Ads共享,HUAWEI Ads有權對媒體廣告主們的隱私和資料合規性進行監督,默認情況下,向HUAWEI Ads平臺發出的廣告請求會投放個性化廣告,并根據以前收集的用戶資料篩選廣告,HUAWEI Ads平臺也支持通過配置廣告請求來投放非個性化廣告,詳情請參見《HUAWEI Ads隱私與資料安全相關政策》“個性化廣告和非個性化廣告”,
為了征求用戶意見,可以使用HUAWEI Ads平臺提供的Consent SDK,也可以使用符合IAB TCF v2.0規范的CMP,詳情請參見IAB TCF v2.0用戶同意資訊傳遞,
接下來我們就看一下如何使用Consent SDK征求用戶意見,以及在征得用戶意見后如何根據用戶意見獲取廣告,
開發步驟
在開發前需要集成HMS Core SDK和HUAWEI Ads SDK,具體步驟可參考開發檔案,
Consent SDK使用
- 集成Consent SDK,
a. 配置Maven倉地址,
Android Studio的代碼庫配置在Gradle 插件7.0以下版本、7.0版本和7.1及以上版本有所不同,請根據您當前的Gradle 插件版本,選擇對應的配置程序,
b. 在應用級的“build.gradle”檔案中添加編譯依賴,

將{version}替換為實際的版本號,版本號索引請參見版本更新說明,修改如下:
dependencies {
implementation 'com.huawei.hms:ads-consent:3.4.54.300'
}
c. 在完成以上的配置后,點擊工具列中的gradle同步圖示,完成“build.gradle”檔案的同步,將相關依賴下載到本地,

- 更新用戶意見狀態,
使用Consent SDK時,應確保Consent SDK獲得的是HUAWEI Ads平臺廣告技術提供商的最新資訊,如果在征求用戶意見后,廣告技術提供商的串列發生改變,則Consent SDK會自動將用戶意見置為未知狀態,因此在每次啟動應用時都必須通過呼叫requestConsentUpdate()方法確定用戶意見狀態,示例代碼如下所示:
...
import com.huawei.hms.ads.consent.*;
...
public class ConsentActivity extends BaseActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// 檢查用戶意見狀態
checkConsentStatus();
...
}
...
private void checkConsentStatus() {
...
Consent consentInfo = Consent.getInstance(this);
...
consentInfo.requestConsentUpdate(new ConsentUpdateListener() {
@Override
public void onSuccess(ConsentStatus consentStatus, boolean isNeedConsent, List<AdProvider> adProviders) {
// 獲取用戶意見狀態成功
...
}
@Override
public void onFail(String errorDescription) {
// 獲取用戶意見狀態失敗
...
}
});
...
}
...
}
如果成功更新用戶意見資訊,那么會通過ConsentUpdateListener的onSuccess()方法提供更新后的用戶意見狀態引數ConsentStatus、isNeedConsent引數(是否需要consent)和廣告技術提供商的adProviders串列,
- 征求用戶意見,
您需要通過彈框等方式向用戶征求意見,并展示廣告技術提供商的完整串列,以下是通過彈框征求用戶意見的樣例:
a. 彈框征求用戶意見,
示例代碼如下所示:
...
import com.huawei.hms.ads.consent.*;
...
public class ConsentActivity extends BaseActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// 檢查用戶意見狀態
checkConsentStatus();
...
}
...
private void checkConsentStatus() {
...
Consent consentInfo = Consent.getInstance(this);
...
consentInfo.requestConsentUpdate(new ConsentUpdateListener() {
@Override
public void onSuccess(ConsentStatus consentStatus, boolean isNeedConsent, List<AdProvider> adProviders) {
...
// 此回傳引數代表是否需要consent
if (isNeedConsent) {
// UNKNOWN狀態,需要重新征求用戶意見
if (consentStatus == ConsentStatus.UNKNOWN) {
...
showConsentDialog();
}
// 如果是PERSONALIZED或者NON_PERSONALIZED狀態,則不需要彈框征求用戶意見
else {
...
}
} else {
...
}
}
@Override
public void onFail(String errorDescription) {
...
}
});
...
}
...
private void showConsentDialog() {
// 開始Consent彈出框處理
ConsentDialog dialog = new ConsentDialog(this, mAdProviders);
dialog.setCallback(this);
dialog.setCanceledOnTouchOutside(false);
dialog.show();
}
}
對話框效果圖如下:

注:該頁面僅為簡單示例,具體實作需要開發者結合隱私界面自行設計UI,
點擊“here”跳轉至更多資訊:

注:該頁面僅為簡單示例,具體實作需要開發者結合隱私界面自行設計UI,
b. 展示廣告技術提供商串列,
您需要將廣告技術提供商的名稱展示給用戶,并提供訪問廣告技術提供商隱私政策的入口,
通過點擊上述更多資訊頁面中的here鏈接彈出廣告技術提供商串列對話框,效果如下:
注:該頁面僅為簡單示例,具體實作需要開發者結合隱私界面自行設計UI,

c. 設定用戶意見,
征得用戶意見后,請使用setConsentStatus()方法設定用戶的選擇,示例代碼如下所示:
Consent.getInstance(getApplicationContext()).setConsentStatus(ConsentStatus.PERSONALIZED);
d. 設定“未達到法定承諾年齡用戶”的標記,
如果您需要針對未達到法定承諾年齡的用戶請求對應的廣告,則在呼叫requestConsentUpdate()前必須通過呼叫setUnderAgeOfPromise設定“未達到法定承諾年齡用戶”的標記,示例代碼如下所示:
// 設定“未達到法定承諾年齡用戶”的標記
Consent.getInstance(getApplicationContext()).setUnderAgeOfPromise(true);
一旦將此設定為“true”,則每次requestConsentUpdate()請求均會回呼onFail(String errorDescription)方法,并提供給用戶錯誤描述引數errorDescription,此時不需要再展示征求用戶意見彈框,設定為“false”表明用戶已達到法定承諾年齡,
- 根據用戶意見獲取廣告,
請求廣告時,默認不設定setNonPersonalizedAd方法,請求個性化廣告與非個性化廣告,如果用戶在Consent階段沒有做出選擇,則只能請求非個性化廣告,
setNonPersonalizedAd方法的值可以設定為:
? ALLOW_ALL:個性化廣告與非個性化廣告
? ALLOW_NON_PERSONALIZED:非個性化廣告
示例代碼如下所示:
// setNonPersonalizedAd設定為ALLOW_NON_PERSONALIZED時,只請求非個性化廣告
RequestOptions requestOptions = HwAds.getRequestOptions();
requestOptions = requestOptions.toBuilder().setNonPersonalizedAd(ALLOW_NON_PERSONALIZED).build();
HwAds.setRequestOptions(requestOptions);
AdParam adParam = new AdParam.Builder().build();
adView.loadAd(adParam);
Consent SDK測驗
為了讓您能輕松地測驗應用,Consent SDK提供了可設定的除錯選項,
- 呼叫getTestDeviceId()獲取設備ID,
示例代碼如下所示:
String testDeviceId = Consent.getInstance(getApplicationContext()).getTestDeviceId();
- 使用獲取的設備ID將您的設備作為除錯設備列入允許清單,
示例代碼如下所示:
Consent.getInstance(getApplicationContext()).addTestDeviceId(testDeviceId);
- 呼叫setDebugNeedConsent設定是否需要Consent,
示例代碼如下所示:
// 設定除錯需要Consent,此時ConsentUpdateListener方法回傳的isNeedConsent引數為true
Consent.getInstance(getApplicationContext()).setDebugNeedConsent(DebugNeedConsent.DEBUG_NEED_CONSENT);
// 設定除錯不需要Consent,此時ConsentUpdateListener方法回傳的isNeedConsent引數為false
Consent.getInstance(getApplicationContext()).setDebugNeedConsent(DebugNeedConsent.DEBUG_NOT_NEED_CONSENT);
完成這些步驟后,呼叫更新用戶意見狀態時會根據您的除錯狀態回傳isNeedConsent的值,
如果您需要了解更多Consent SDK相關資訊,請查看此示例代碼,
了解更多詳情>>
訪問華為開發者聯盟官網
獲取開發指導檔案
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間了解 HMS Core 最新技術資訊~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/516479.html
標籤:Android
上一篇:如何使用命名元組作為可選引數?
