根據 Google《歐盟地區使用者同意授權政策》,您必須向歐洲經濟區 (EEA) 和英國境內的使用者揭露特定資訊,而且在使用 Cookie 或其他本機儲存空間 (在法律要求的情況下) 以及使用個人資料 (例如 AdID) 放送廣告時,都需要徵得使用者的同意。本政策是配合《歐盟電子通訊隱私指令》和《一般資料保護規則》(GDPR) 而制定。
本指南將概述支援 GDPR IAB 資訊公開和同意聲明架構第 2 版訊息所需的步驟,並納入 UMP SDK。本文件與「開始使用」一文搭配使用,可概略說明如何使用 UMP SDK 執行應用程式,以及設定訊息的基本概念。以下指引適用於 GDPR 資訊公開和同意聲明架構第 2 版訊息。詳情請參閱「互動廣告局規定對歐盟同意授權訊息的影響」。
必要條件
- 完成入門指南。
- 建立 應用程式所需的歐洲法規訊息。
同意聲明撤銷
GDPR 規定同意聲明撤銷功能必須允許使用者隨時撤銷同意聲明。請參閱隱私權選項,瞭解如何讓使用者撤銷同意聲明。
未滿規定年齡的標記
如要指出使用者是否未滿法定同意年齡,請設定
setTagForUnderAgeOfConsent
(TFUA)。將 TFUA 設為 true
時,UMP SDK 就不會向使用者要求同意聲明。如果應用程式包含混合各年齡層的目標對象,請為兒童使用者設定這個參數,確保系統不會要求他們同意。
以下範例會將 TFUA 設為 UMP 同意聲明要求的 true:
Java
ConsentRequestParameters params = new ConsentRequestParameters
.Builder()
// Indicate the user is under age of consent.
.setTagForUnderAgeOfConsent(true)
.build();
consentInformation = UserMessagingPlatform.getConsentInformation(this);
consentInformation.requestConsentInfoUpdate(
this,
params,
(OnConsentInfoUpdateSuccessListener) () -> {
// ...
},
(OnConsentInfoUpdateFailureListener) requestConsentError -> {
// ...
});
Kotlin
val params = ConsentRequestParameters
.Builder()
// Indicate the user is under age of consent.
.setTagForUnderAgeOfConsent(true)
.build()
consentInformation = UserMessagingPlatform.getConsentInformation(this)
consentInformation.requestConsentInfoUpdate(
this,
params,
ConsentInformation.OnConsentInfoUpdateSuccessListener {
// ...
},
ConsentInformation.OnConsentInfoUpdateFailureListener {
requestConsentError ->
// ...
})
中介服務
請按照將廣告合作夥伴加入已發布的 GDPR 訊息一文中的步驟,將中介服務合作夥伴加入廣告合作夥伴名單。否則合作夥伴可能無法在您的應用程式中放送廣告。
中介服務合作夥伴也可能提供其他工具,協助您遵守 GDPR。詳情請參閱特定合作夥伴的整合指南。
如何讀取同意聲明選項
收集 GDPR 同意聲明後,您可以按照 資訊公開和同意聲明架構第 2 版規格,從本機儲存空間讀取同意聲明選項。IABTCF_PurposeConsents
鍵會指出每個 資訊公開和同意聲明架構目的的同意聲明。
下列程式碼片段說明如何檢查目的 1 的同意聲明:
Java
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
// Example value: "1111111111"
String purposeConsents = sharedPref.getString("IABTCF_PurposeConsents", "");
// Purposes are zero-indexed. Index 0 contains information about Purpose 1.
if (!purposeConsents.isEmpty()) {
String purposeOneString = purposeConsents.charAt(0);
boolean hasConsentForPurposeOne = purposeOneString.equals("1");
}
Kotlin
val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)
// Example value: "1111111111"
val purposesConsents = sharedPref.getString("IABTCF_PurposeConsents", "")
// Purposes are zero-indexed. Index 0 contains information about Purpose 1.
if (!purposeConsents.isEmpty()) {
val purposeOneString = purposeConsents.first()
val hasConsentForPurposeOne = purposeOneString == "1"
}
常見問題
- 如果我未採取任何行動,以符合在歐洲經濟區和英國放送廣告的同意聲明管理平台規定,會發生什麼情況?
自 2024 年 1 月 16 日起,如果合作夥伴未採用 Google 認證的 CMP,在歐洲經濟區和英國的流量只能放送受限制的廣告。
自 2024 年 1 月 16 日起,我們會開始對一小部分的歐洲經濟區和英國流量實施這項要求,並在 2024 年 2 月底前逐步擴大實施,涵蓋這兩個地區的所有流量。請在 2024 年 1 月 16 日前採用經認證的 CMP,確保您的營利不受影響。
- 如何確認使用者是否同意?
同意聲明並非以單一位元表示,而是以 IAB 資訊公開和同意聲明架構規格中定義的一組用途和供應商表示。如要瞭解 Google Ads 的個人化條件,請參閱「同意聲明政策:個人化和非個人化廣告」。
此外,Google 廣告技術供應商 (ATP) 名單中未註冊於資訊公開和同意聲明架構供應商清單的廣告技術,會使用 Google 的額外同意聲明技術規格收集同意聲明。Google 會在下列位置發布未註冊 IAB 的廣告技術供應商清單及其 ID:https://storage.googleapis.com/tcfac/additional-consent-providers.csv。
如要對個別廣告請求進行偵錯,請使用廣告檢查器中的進階廣告單元偵錯功能,匯出廣告請求字串。然後尋找下列查詢參數:
查詢參數 意義 gdpr
這個廣告請求是否適用 GDPR。 gdpr_consent
資訊公開和同意聲明 (TC) 字串。IAB 提供網頁工具,可讓您手動解碼值。 addtl_consent
Google 的額外同意聲明技術規格中的 AC 字串。 如要透過程式輔助方式讀取同意聲明選項,請參閱「如何讀取同意聲明選項」一文,瞭解詳情。
- 是否必須使用 Google 的 UMP SDK 才能符合同意聲明管理平台 (CMP) 規定?
否,您可以使用Google 認證的同意聲明管理平台清單中的任何 CMP 放送廣告。
- 如何使用 UMP SDK 再次顯示同意聲明表單,即使使用者已同意也一樣?
如果使用者已做出同意聲明決定,Google 的同意聲明管理解決方案就不會要求收集新的同意聲明,除非資訊公開和同意聲明字串已過期或失效。
GDPR 規定您必須修改同意聲明,讓使用者隨時撤銷同意聲明。請參閱隱私權選項,瞭解如何讓使用者撤銷同意聲明。如要再次顯示同意聲明表單,請呼叫
showPrivacyOptionsForm()
。- 我已整合 Google 認證的 CMP,但即使使用者已同意,我還是沒有看到任何廣告請求傳送給中介服務合作夥伴。為何有這項異動?
根據資訊公開和同意聲明架構,Google 會先確認廣告技術供應商和其他程式輔助廣告需求來源遵守 Google 政策,並且可基於至少一項法律依據合法地處理資料後,再將這些供應商和廣告需求納進中介服務刊登序列。詳情請參閱「中介服務」一節。
Google 廣告技術供應商 (ATP) 名單中的部分中介服務合作夥伴並未註冊至 資訊公開和同意聲明架構供應商清單。這些合作夥伴改為使用 Google 的額外同意聲明技術規格來收集同意聲明。Google 會在下列位置發布未註冊 IAB 的廣告技術供應商清單及其 ID:https://storage.googleapis.com/tcfac/additional-consent-providers.csv
UMP SDK 支援儲存 ACString,讓您將廣告合作夥伴加入已發布的 GDPR 訊息,無須瞭解合作夥伴是否已註冊資訊公開和同意聲明架構。使用第三方同意聲明管理平台時,請務必執行以下操作:
- 確認第三方同意聲明管理平台是否支援儲存 ACString。
- 將每個中介服務合作夥伴列入第三方 CMP 用於收集同意聲明的廣告技術供應商清單中。
- 如果使用者不同意,我可以變更應用程式運作方式嗎?這是否符合政策規定?
發布商可以在應用程式中讀取 IAB 資訊公開和同意聲明架構字串。如要瞭解如何以程式輔助方式讀取同意聲明選項,請參閱「如何讀取同意聲明選項」一文。發布者應向法律顧問諮詢,瞭解相關法規規定的義務。
- 選取「管理選項」並同意所有用途後,為何我看不到任何廣告?為何有這項異動?
除了收集目的同意聲明外,您還需要收集供應商同意聲明。任何供應商 (例如 Google) 都必須取得目的同意聲明和供應商同意聲明,才能放送適當的廣告。
- 如何針對已同意第 1 版的使用者導入第 2 版 AC 字串?
請根據 Google 的額外同意聲明技術規格檢查本機儲存空間中的
IABTCF_AddtlConsent
鍵,判斷使用者是否同意使用資訊公開和同意聲明字串第 2 版,以及是否需要再次顯示同意聲明表單。Java
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); // Example value: "2~1.35.41.101~dv.9.21.81" String additionalConsent = sharedPref.getString("IABTCF_AddtlConsent", ""); // Index 0 contains information about the specification version number. if (!additionalConsent.isEmpty()) { String specACVersion = additionalConsent.charAt(0); boolean isACVersion2 = purposeOneString.equals("2"); }
Kotlin
val sharedPref = PreferenceManager.getDefaultSharedPreferences(context) // Example value: "2~1.35.41.101~dv.9.21.81" val additionalConsent = sharedPref.getString("IABTCF_AddtlConsent", "") // Index 0 contains information about the specification version number. if (!additionalConsent.isEmpty()) { val specACVersion = additionalConsent.first() val isACVersion2 = specACVersion == "2" }