Google EU 사용자 동의 정책에 따라 유럽 경제 지역 (EEA) 및 영국에서 사용자에게 특정 정보를 공개해야 하며, 법적으로 필요한 경우 쿠키 또는 기타 로컬 저장소를 사용하고 개인 정보 (예: 광고 ID)를 사용하여 광고를 게재한다는 점에 대해 EEA 사용자의 동의를 받아야 합니다. 이 정책에는 EU 온라인 개인 정보 보호 지침 및 개인 정보 보호법 (GDPR)의 요구사항이 반영되어 있습니다.
이 가이드에서는 UMP SDK의 일환으로 GDPR IAB TCF v2 메시지를 지원하는 데 필요한 단계를 설명합니다. 이 가이드는 UMP SDK를 사용하여 앱을 실행하는 방법에 대한 개요와 메시지를 설정하는 방법에 대한 기본사항을 제공하는 시작하기와 연계할 수 있도록 작성되었습니다. 다음 안내는 GDPR IAB TCF v2 메시지 전용입니다. 자세한 내용은 IAB 요구사항이 EU 동의 메시지에 미치는 영향을 참고하세요.
기본 요건
- 시작 가이드를 완료합니다.
- 앱용 유럽 규정 메시지를 만듭니다.
동의 철회
GDPR에서는 사용자가 언제든지 동의 선택을 철회할 수 있도록 동의 철회를 요구합니다. 사용자가 동의 선택을 철회할 수 있는 방법을 구현하려면 개인 정보 보호 옵션을 참고하세요.
동의 연령 미만의 사용자 태그
사용자가 동의 연령 미만인지 여부를 나타내려면
setTagForUnderAgeOfConsent
(TFUA)를 설정합니다. TFUA를 true
로 설정하면 UMP SDK는 사용자에게 동의를 요청하지 않습니다. 앱 사용자의 연령대가 다양하면 아동 사용자에게 이 매개변수를 설정하여 동의를 요청하지 않도록 합니다.
다음 예에서는 UMP 동의 요청에서 TFUA를 true로 설정합니다.
자바
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 동의가 수집된 후 TCF v2 사양에 따라 로컬 저장소에서 동의 선택을 읽을 수 있습니다. IABTCF_PurposeConsents
키는 각 TCF 목적에 대한 동의를 나타냅니다.
다음 코드 스니펫은 목적 1에 대한 동의를 확인하는 방법을 보여줍니다.
자바
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"
}
자주 묻는 질문(FAQ)
- EEA 및 영국에서 광고를 게재할 때 적용되는 동의 관리 플랫폼 요구사항을 충족하기 위해 조치를 취하지 않으면 어떻게 되나요?
2024년 1월 16일부터 파트너가 Google 인증 CMP를 채택하지 않으면 EEA 및 영국 트래픽에 제한적인 광고만 게재할 수 있습니다.
2024년 1월 16일부터 소수의 EEA 및 영국 트래픽을 대상으로 시행되기 시작하여 2024년 2월 말까지 모든 EEA 및 영국 트래픽에 확대 적용될 예정입니다. 수익 창출에 영향을 받지 않도록 2024년 1월 16일까지 인증 CMP를 도입하시기 바랍니다.
- 사용자가 동의했는지 어떻게 확인할 수 있나요?
동의는 단일 비트로 표시되지 않고 IAB TCF 사양에 정의된 대로 목적 및 공급업체 집합으로 표시됩니다. Google Ads 개인 최적화 기준에 관한 자세한 내용은 동의 정책: 개인 맞춤 광고 및 개인 맞춤이 아닌 광고를 참고하세요.
또한 TCF 공급업체 목록에 등록되지 않은 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 문자열입니다. 동의 선택사항을 프로그래매틱 방식으로 읽으려면 동의 선택사항을 읽는 방법을 참고하세요.
- CMP 요구사항을 충족하기 위해 Google의 UMP SDK를 사용해야 하나요?
아니요. Google 인증 CMP 목록에 있는 CMP를 사용하여 광고를 게재할 수 있습니다.
- 사용자가 이미 동의한 경우에도 UMP SDK를 사용하여 동의 양식을 다시 표시하려면 어떻게 해야 하나요?
사용자가 이미 동의 여부를 결정한 경우 Google의 동의 관리 솔루션은 TC 문자열이 만료되거나 무효화될 때까지 새 동의를 수집하도록 요청하지 않습니다.
GDPR에 따라 사용자가 언제든지 동의 선택사항을 철회할 수 있도록 동의 수정이 필요합니다. 사용자가 동의 선택을 철회할 수 있는 방법을 구현하려면 개인 정보 보호 옵션을 참고하세요. 동의 양식을 다시 표시하려면
showPrivacyOptionsForm()
를 호출합니다.- Google 인증 CMP를 통합했지만 동의한 사용자의 경우에도 미디에이션 파트너에 대한 광고 요청이 표시되지 않습니다. 이유가 무엇인가요?
TCF에 따라 Google에서는 광고 기술 제공업체 및 기타 프로그래매틱 수요 소스가 Google 정책을 위반하지 않으며 연쇄 광고 호출 조정에 포함되기 전에 데이터를 처리하기 위한 법적 근거가 하나 이상 있는지 확인합니다. 자세한 내용은 미디에이션 섹션을 참고하세요.
Google 광고 기술 제공업체 (ATP) 목록에 있는 일부 미디에이션 파트너는 TCF 공급업체 목록에 등록되어 있지 않습니다. 이러한 파트너는 동의 수집 시 Google의 추가 동의 기술 사양을 대신 사용합니다. Google은 IAB에 등록되지 않은 광고 기술 제공업체 및 해당 ID를 다음 위치에 게시합니다. https://storage.googleapis.com/tcfac/additional-consent-providers.csv
UMP SDK는 ACString 저장을 지원하므로 파트너가 TCF에 등록되어 있는지 확인하지 않고도 게시된 GDPR 메시지에 광고 파트너를 추가할 수 있습니다. 서드 파티 CMP를 사용할 때는 다음을 실행해야 합니다.
- 서드 파티 CMP가 ACString 저장을 지원하는지 확인합니다.
- 서드 파티 CMP에서 동의를 수집하는 데 사용하는 광고 기술 제공업체 목록에 각 미디에이션 파트너를 포함합니다.
- 사용자가 동의하지 않는 경우 앱의 작동 방식을 변경할 수 있나요? 정책에 의해 허용되나요?
게시자는 앱에서 IAB TCF 문자열을 읽을 수 있습니다. 동의 선택사항을 프로그래매틱 방식으로 읽는 방법에 관한 자세한 내용은 동의 선택사항을 읽는 방법을 참고하세요. 게시자는 관련 규정에 따른 의무를 법률 전문가와 함께 검토해야 합니다.
- 옵션 관리를 선택하고 모든 목적에 동의했는데 광고가 표시되지 않습니다. 이유가 무엇인가요?
목적 동의 수집 외에도 공급업체 동의도 수집해야 합니다. Google과 같은 공급업체가 적절한 광고를 게재하려면 목적 동의와 공급업체 동의가 모두 필요합니다.
- 이미 버전 1에 동의한 사용자에게 AC 문자열 버전 2를 구현하려면 어떻게 해야 하나요?
Google의 추가 동의 기술 사양에 따라 로컬 저장소의
IABTCF_AddtlConsent
키를 확인하여 사용자가 AC 문자열 버전 2에 동의했는지, 동의 양식을 다시 표시해야 하는지 확인합니다.자바
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" }