Google EU 사용자 동의 정책에 따라 유럽 경제 지역(EEA)에서 사용자에게 특정 정보를 공개해야 하며, 법적으로 필요한 경우 쿠키 또는 기타 로컬 저장소를 사용하고 개인 정보(예: AdID)를 사용해 광고를 게재한다는 점에 대해 EEA 사용자의 동의를 받아야 합니다. 이 정책에는 EU 온라인 개인정보보호지침 및 개인정보 보호법(GDPR)의 요구사항이 반영되어 있습니다.
이 정책에 따른 게시자의 의무사항 준수를 지원하기 위해 Google에서는 동의 SDK를 제공하고 있습니다. 동의 SDK는 사용자의 동의를 수집하는 유틸리티 기능을 제공하는 오픈소스 라이브러리입니다. 전체 소스 코드는 GitHub에서 가져올 수 있습니다.
Google에서 게재하는 광고는 개인 맞춤 광고 또는 개인 맞춤이 아닌 광고로 분류할 수 있습니다(둘 다 EEA 사용자의 동의가 필요함). 기본적으로 Google로 보내는 광고 요청에서는 개인 맞춤 광고가 게재되며, 이전에 수집한 사용자 관련 데이터에 따라 광고를 선택합니다. 또한 Google에서는 개인 맞춤이 아닌 광고를 게재하기 위한 광고 요청 구성도 지원합니다. 개인 맞춤 광고 및 개인 맞춤이 아닌 광고 자세히 알아보기
이 가이드에서는 동의 SDK를 활용하여 사용자 동의를 얻는 방법을 설명합니다. 또한 동의를 얻은 후 Google 모바일 광고 SDK에 동의를 전달하는 방법에 대해서도 설명합니다.
기본 요건
- AdMob 계정에 로그인하고 광고 기술 제공업체를 선택하세요.
동의 SDK 가져오기
CocoaPods(권장)
SDK를 iOS 프로젝트로 가져오는 가장 간단한 방법은 CocoaPods를 이용하는 것입니다. 프로젝트의 Podfile을 열고 다음 행을 앱의 타겟에 추가하세요.
pod 'PersonalizedAdConsent'
그런 다음 명령 행에서 다음을 실행하세요.
pod install --repo-update
CocoaPods를 처음 사용하는 경우에는 Podfiles를 만들고 사용하는 방법에 대한 공식 설명서를 읽어보세요.
수동 다운로드
SDK의 소스를 직접 다운로드하거나 복제한 후 다음 안내에 따라 프로젝트에 소스를 포함할 수도 있습니다.
찾기 도구에서
PersonalizedAdConsent.xcodeproj
파일을 프로젝트에 드래그합니다.Build Phases(빌드 단계) 탭으로 이동합니다. Target Dependencies(타겟 종속성)에서 + 버튼을 클릭하고 PersonalizedAdConsent 타겟을 추가합니다.
프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Add Files to "MyProject"('내 프로젝트'에 파일 추가)를 선택합니다.
PersonalizedAdConsent.bundle
로 이동합니다. Create folder references(폴더 참조 만들기)를 선택하세요.이 작업이 완료되면 Copy Bundle Resources(번들 리소스 복사) 섹션의 Build Phases(빌드 단계) 탭에
PersonalizedAdConsent.bundle
이 표시됩니다.
동의 SDK 사용에 대한 팁
동의 SDK의 다른 메서드를 사용하기 전에 동의 상태를 업데이트하여 AdMob UI에서 선택한 광고 기술 제공업체 관련 최신 정보를 동의 SDK에 적용해야 합니다. 사용자가 마지막으로 동의한 후 광고 기술 제공업체 목록이 변경되었다면 동의 상태가 알 수 없음으로 돌아갑니다.
미디에이션을 사용하지 않는 경우
미디에이션을 사용하지 않는 경우에는 동의 SDK를 구현하여 동의를 수집하는 옵션이 2개입니다.
먼저, 동의 SDK를 사용하여 Google에서 렌더링한 동의 양식을 사용자에게 제공하는 옵션이 있습니다. 동의 양식에는 AdMob UI에서 선택한 광고 기술 제공업체의 목록이 표시되며 동의 SDK에 사용자 동의 응답이 저장됩니다.
다른 옵션은 동의 SDK를 사용하여 AdMob에서 광고 기술 제공업체의 전체 목록을 동적으로 가져오는 방법입니다(게시자 관리 동의 수집 참고). 이 경우에는 사용자에게 제공업체 목록을 제공하는 방법을 정하고 자체 동의 양식을 사용자에게 제공해야 합니다.
사용자가 동의를 선택하면 동의 SDK에 사용자의 동의 선택을 저장하도록 요청할 수 있습니다(게시자 관리 동의 저장의 설명 참조).
동의를 수집할 때 사용자가 개인 맞춤이 아닌 광고만 수신하는 데 동의했다면 Google 모바일 광고 SDK에 동의를 전달해야 합니다.
AdMob 미디에이션을 사용하는 경우
동의 SDK를 사용하여 AdMob에서 광고 기술 제공업체의 전체 목록을 동적으로 가져올 수 있습니다(게시자 관리 동의 수집 참고). 동의를 위해 다른 광고 네트워크에서 사용자에게 제시해야 하는 광고 기술 제공업체를 정해야 합니다.
앱 개발자는 동의 SDK가 반환한 광고 기술 제공업체와 다른 광고 네트워크의 제공업체 모두에 대해 사용자 동의를 수집해야 합니다. 또한 사용자가 개인 맞춤이 아닌 광고만 수신하는 데 동의한 경우에는 사용자 동의 응답을 직접 저장하고 동의를 Google 모바일 광고 SDK에 전달해야 합니다.
현재 Google에서는 미디에이션 네트워크에 대한 동의를 받거나 처리하지 못하므로 각 광고 네트워크에 대한 동의를 개별적으로 받아서 처리해야 합니다. Google에서는 업데이트된 설명서를 통해 오픈소스 및 버전이 지정된 미디에이션 네트워크 전체에 동의 전달 방법에 대한 세부정보를 적극적으로 제공하고 있습니다. 아래의 미디에이션 네트워크의 경우 온라인 설명서가 이미 제공되고 있습니다.
동의 상태 업데이트
동의 SDK를 사용할 때 앱을 실행할 때마다
사용자의 동의 상태를 확인하는 것이 좋습니다. 이렇게 하려면
PACConsentInformation
인스턴스에서
requestConsentInfoUpdateForPublisherIdentifiers:completionHandler:
를 호출하세요.
Swift
import PersonalizedAdConsent ... class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() PACConsentInformation.sharedInstance. requestConsentInfoUpdate( forPublisherIdentifiers: ["pub-0123456789012345"]) {(_ error: Error?) -> Void in if let error = error { // Consent info update failed. } else { // Consent info update succeeded. The shared PACConsentInformation // instance has been updated. } } }
Objective-C
#import <PersonalizedAdConsent/PersonalizedAdConsent.h> ... @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [PACConsentInformation.sharedInstance requestConsentInfoUpdateForPublisherIdentifiers:@[ @"pub-0123456789012345" ] completionHandler:^(NSError *_Nullable error) { if (error) { // Consent info update failed. } else { // Consent info update succeeded. The shared PACConsentInformation // instance has been updated. } }]; }
requestConsentInfoUpdateForPublisherIdentifiers:completionHandler:
호출에서는
다음과 같은 두 개의 인수가 필요합니다.
앱에서 광고를 요청하는 일련의 유효하고 완전히 활성화된 게시자 ID입니다. 게시자 ID를 찾으세요.
NSError
를 입력 매개변수로 허용하는 블록. 실패한 동의 업데이트 요청에 대한 정보를 제공합니다.
동의 정보가 성공적으로 업데이트되면
PACConsentInformation.sharedInstance.consentStatus
에서 업데이트된 동의 상태를
제공합니다. 동의 상태에 적용될 수 있는 값은 다음과 같습니다.
동의 상태 | 정의 |
---|---|
PACConsentStatusPersonalized |
사용자가 개인 맞춤 광고에 대해 동의했습니다. |
PACConsentStatusNonPersonalized |
사용자가 개인 맞춤이 아닌 광고에 대해 동의했습니다. |
PACConsentStatusUnknown |
사용자가 개인 맞춤 광고 또는 개인 맞춤이 아닌 광고에 대해 동의하지도 거부하지도 않았습니다. |
동의 정보가 성공적으로 업데이트되면 PACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown
을 통해
사용자가 유럽 경제 지역에 거주하는지 또는
요청 위치를 알 수 없는지를
확인할 수 있습니다.
requestLocationInEEAOrUnknown
속성이 NO
이면 사용자가 유럽 경제 지역에
거주하지 않는 것으로 EU 사용자 동의 정책에 동의하지 않아도
됩니다. Google
모바일 광고 SDK에 광고를 요청할 수 있습니다.
requestLocationInEEAOrUnknown
속성이 YES
인 경우:
PACConsentStatus
가PACConsentStatusPersonalized
또는PACConsentStatusNonPersonalized
이면 사용자가 이미 동의한 것입니다. 이제 동의를 Google 모바일 광고 SDK에 전달할 수 있습니다.사용자가
PACConsentStatusUnknown
동의를 한 경우 동의를 수집하는 유틸리티 메서드의 사용에 대해 설명한 아래의 동의 수집 섹션을 참고하세요.
동의 수집
Google의 동의 SDK 에서는 두 가지 방법으로 사용자 동의를 수집할 수 있습니다.

Google이 렌더링한 동의 양식을 사용자에게 제공하세요.
광고 기술 제공업체 목록을 요청하고 게시자 관리 동의 수집 옵션을 이용해 동의를 직접 수집하세요.
사용자에게 동의 변경 또는 철회 옵션을 제공해야 합니다.
Google이 렌더링한 동의 양식
Google이 렌더링한 동의 양식은 앱의 콘텐츠 위에 전체 화면으로 표시됩니다. 사용자에게 다음과 같은 옵션의 조합이 표시되도록 동의 양식을 구성할 수 있습니다.
- 개인 맞춤 광고 보기에 대한 동의
- 개인 맞춤이 아닌 광고 보기에 대한 동의
- 광고를 보는 대신 유료 버전의 앱 사용
동의 문구를 신중하게 검토해야 합니다. 기본으로 표시되는 문구는
Google을 활용해 앱에서 수익을 창출하는 경우에
적합할 수 있는 메시지입니다.
단, Google에서는 게시자에게 적합한 동의 문구에 대해 법률 자문을 제공할 수 없습니다. Google이 렌더링한 동의 양식의 동의 문구를 업데이트하려면 필요에 따라
동의 SDK에 포함된 consentform.html
파일을 수정하세요.
Google이 렌더링한 동의 양식은 PACConsentForm
클래스를 이용해
구성 및 표시됩니다. 다음 코드에는 세 가지 양식 옵션이 모두 적용된 PACConsentForm
을
생성하는 방법이 나와 있습니다.
Swift
// TODO: Replace with your app's privacy policy url. guard let privacyUrl = URL(string: "https://www.your.com/privacyurl"), let form = PACConsentForm(applicationPrivacyPolicyURL: privacyUrl) else { print("incorrect privacy URL.") return } form.shouldOfferPersonalizedAds = true form.shouldOfferNonPersonalizedAds = true form.shouldOfferAdFree = true
Objective-C
// TODO: Replace with your app's privacy policy url. NSURL *privacyURL = [NSURL URLWithString:@"https://www.your.com/privacyurl"]; PACConsentForm *form = [[PACConsentForm alloc] initWithApplicationPrivacyPolicyURL:privacyURL]; form.shouldOfferPersonalizedAds = YES; form.shouldOfferNonPersonalizedAds = YES; form.shouldOfferAdFree = YES;
PACConsentForm
의 속성에 대해서는 아래에서 자세히 설명합니다.
shouldOfferPersonalizedAds
- 동의 양식에 개인 맞춤 광고 옵션이 표시되어야 하는지를 나타냅니다.
기본값은
YES
입니다. shouldOfferNonPersonalizedAds
- 동의 양식에 개인 맞춤이 아닌 광고 옵션이 표시되어야 하는지를 나타냅니다.
기본값은
YES
입니다. shouldOfferAdFree
- 동의 양식에 무광고 앱 옵션이 표시되어야 하는지를 나타냅니다.
기본값은
NO
입니다.
동의 양식 로드
PACConsentForm
객체를 만들고 구성한 후에는
아래와 같이 PACConsentForm
의 loadWithCompletionHandler:
메서드를 실행하여
동의 양식을 로드하세요.
Swift
form.load {(_ error: Error?) -> Void in print("Load complete.") if let error = error { // Handle error. print("Error loading form: \(error.localizedDescription)") } else { // Load successful. } }
Objective-C
[form loadWithCompletionHandler:^(NSError *_Nullable error) { NSLog(@"Load complete. Error: %@", error); if (error) { // Handle error. } else { // Load successful. } }];
동의 양식 표시
사용자에게 Google이 렌더링한 동의 양식을 제공하려면
로드된 PACConsentForm
에서
presentFromViewController:dismissCompletion:
을 호출하세요(아래 참고).
Swift
form.present(from: self) { (error, userPrefersAdFree) in if let error = error { // Handle error. } else if userPrefersAdFree { // User prefers to use a paid version of the app. } else { // Check the user's consent choice. let status = PACConsentInformation.sharedInstance.consentStatus } }
Objective-C
[form presentFromViewController:self dismissCompletion:^(NSError *_Nullable error, BOOL userPrefersAdFree) { if (error) { // Handle error. } else if (userPrefersAdFree) { // The user prefers to use a paid version of the app. } else { // Check the user's consent choice. PACConsentStatus status = PACConsentInformation.sharedInstance.consentStatus; } }];
presentFromViewController:dismissCompletion:
호출에서는 다음과 같은 두 개의 인수가
필요합니다.
양식을 제공할
UIViewController
NSError
와BOOL
을 입력 매개변수로 허용하는 블록. 동의 양식을 표시하는 과정에서 오류가 발생하면NSError
를 통해 정보를 제공합니다. 사용자가 광고를 보는 대신 유료 버전의 앱을 사용하기로 선택한 경우에는userPrefersAdFree
BOOL
에YES
값이 적용됩니다.
사용자가 옵션을 선택하고 양식을 닫으면
동의 SDK가 사용자의 선택 정보를 저장하고 dismissCompletion:
블록을 호출합니다. 사용자의 선택 정보를 읽고
동의를 Google 모바일 광고 SDK에
전달할 수 있습니다.
게시자 관리 동의 수집
동의를 직접 수집하기로 선택한 경우
PACConsentInformation
클래스의 adProviders
속성을 이용해 앱에서
사용된 게시자 ID와 연결된 광고 기술 제공업체를 가져올 수 있습니다. 게시자
ID로 구성된 광고 기술 제공업체의 전체 목록에 대해
동의가 필요합니다.
PACConsentInformation
의 adProviders
속성에 액세스하기 전에
사용자의 동의 상태가 성공적으로 업데이트될 때까지 기다려야 합니다
(업데이트 동의 상태 섹션 참고).
Swift
let adProviders = PACConsentInformation.sharedInstance.adProviders
Objective-C
NSArray*adProviders = PACConsentInformation.sharedInstance.adProviders;
그런 다음 광고 기술 제공업체 목록을 사용하여 동의를 직접 받을 수 있습니다.
게시자 관리 동의 저장
동의를 받았을 때 PACConsentInformation
클래스의 status
속성을
이용해 사용자의 응답에 해당하는 PACConsentStatus
를 기록하세요.
Swift
PACConsentInformation.sharedInstance.consentStatus = .personalized
Objective-C
PACConsentInformation.sharedInstance.consentStatus = PACConsentStatusPersonalized;
동의 SDK에 동의를 보고한 후 동의를 Google 모바일 광고 SDK에 전달할 수 있습니다.
동의 변경 또는 철회
사용자가 동의를 업데이트할 수 있게 하려면, 사용자가 동의 상태를 업데이트하기로 선택할 때 동의 수집 섹션에 설명된 단계를 반복하기만 하면 됩니다.
동의 연령 미만의 사용자
사용자가 동의 연령 미만임을 게시자가 알고 있는 경우
모든 광고 요청에서 TFUA(유럽 동의 연령 미만 사용자용 태그)를 설정해야 합니다. 앱에서
실행하는 모든 광고 요청에 이 태그를 포함하려면
tagForUnderAgeOfConsent
속성을 YES
로 설정하세요. 이 설정은 이후의 모든
광고 요청에 적용됩니다.
Swift
PACConsentInformation.sharedInstance.isTaggedForUnderAgeOfConsent = true
Objective-C
PACConsentInformation.sharedInstance.tagForUnderAgeOfConsent = YES;
TFUA 설정을 사용하면 Google이 렌더링한 동의 양식이 로드되지 않습니다. TFUA가 포함된 광고 요청으로는 개인 맞춤 광고 및 리마케팅을 사용할 수 없습니다. TFUA는 광고 측정 픽셀 및 외부 광고 서버와 같은 제3자 광고 기술 제공업체에 대한 요청을 비활성화합니다.
광고 요청에서 TFUA를 삭제하려면
tagForUnderAgeOfConsent
속성을 NO
로 설정하세요.
테스트
동의 SDK는
PACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown
의 값에 따라 작동 방식이 달라집니다.
예를 들어 사용자가 EEA에 거주하지 않으면
동의 양식이 로드되지 않습니다.
동의 SDK는 EEA 안팎에서 앱을 더 쉽게 테스트할 수 있도록 디버그 옵션을 지원합니다. 이 옵션은 동의 SDK의 다른 메서드를 호출하기 전에 설정할 수 있습니다.
기기의 광고 ID를 가져옵니다. 다음 코드를 사용하여 광고 ID를 기록할 수 있습니다.
#import <AdSupport/AdSupport.h> // ... NSLog(@"Advertising ID: %@", ASIdentifierManager.sharedManager.advertisingIdentifier.UUIDString);
그런 다음 콘솔에서 확인하세요.
Advertising ID: 41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339
콘솔의 광고 ID를 이용해 내 기기를 테스트 기기로 지정하세요.
PACConsentInformation.sharedInstance.debugIdentifiers = @[ @"41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339" ];
마지막으로, 테스트를 위해
debugGeography
를 원하는 지역으로 설정합니다.// Geography appears as in EEA for debug devices. PACConsentInformation.sharedInstance.debugGeography = PACDebugGeographyEEA; // Geography appears as not in EEA for debug devices. PACConsentInformation.sharedInstance.debugGeography = PACDebugGeographyNotEEA;
이 단계를 완료하면 동의 상태 업데이트 호출에서 디버그 지역을 고려합니다.
Google 모바일 광고 SDK에 동의 전달
이 섹션의 코드는 모든 버전의 Google 모바일 광고 SDK에서 사용할 수 있습니다. 이때 동의 SDK를 사용하여 동의를 수집했는지는 고려하지 않습니다.
Google 모바일 광고 SDK는 기본적으로 개인 맞춤 광고를 게재합니다.
사용자가 개인 맞춤이 아닌 광고만 수신하는 데 동의한 경우에는
개인 맞춤이 아닌 광고만 요청하도록 GADRequest
객체를
구성할 수 있습니다. 다음 코드를 사용하면 사용자가 EEA에 거주하는지에
관계없이 개인 맞춤이 아닌
광고를 요청합니다.
Swift
let request = GADRequest() let extras = GADExtras() extras.additionalParameters = ["npa": "1"] request.register(extras)
Objective-C
GADRequest *request = [GADRequest request]; GADExtras *extras = [[GADExtras alloc] init]; extras.additionalParameters = @{@"npa": @"1"}; [request registerAdNetworkExtras:extras];
현재 개인 맞춤이 아닌 광고를 요청하면
광고 요청 URL에 &npa=1
이 포함됩니다. 이는 Google 모바일 광고 SDK의 내부 구현사항이며
변경될 수 있습니다.
앱 측정 지연(선택사항)
기본적으로 Google 모바일 광고 SDK는 앱 측정을 초기화하고 앱이 시작되는 즉시 사용자 수준 이벤트 데이터를 Google에 전송하기 시작합니다. 이와 같은 초기화 동작이 진행되면 코드를 추가로 변경하지 않고도 AdMob 사용자 측정항목을 사용할 수 있습니다.
하지만 이 이벤트를 전송하기 전에 앱에 사용자 동의가 필요한 경우 명시적으로 모바일 광고 SDK를 초기화하거나 광고를 로드할 때까지 앱 측정을 지연시킬 수 있습니다.
앱 측정을 지연하려면 앱의 Info.plist
에 부울 값이 YES
인 GADDelayAppMeasurementInit
키를 추가하세요. 프로그래매틱 방식으로 다음과 같이
변경하거나
<key>GADDelayAppMeasurementInit</key>
<true/>
속성 목록 편집기에서 다음과 같이 수정할 수 있습니다.
FAQ
- 동의 SDK에서는 몇 군데의 광고 기술 제공업체를 지원하나요?
- 동의 SDK에서는 게시자가 사용하기로 선택하는 광고 기술 제공업체의 수에 제한을 두지 않습니다.
- AdMob UI에서 내 선택 정보를 변경하면 SDK에서 반환한 광고 기술 제공업체 목록이 자동으로 업데이트되나요?
- 예, 맞습니다. AdMob UI에서 광고 기술 제공업체 목록을 변경하면 약 1시간 후에 변경사항이 Google 광고 서버에 전송됩니다.