이 페이지에서는 MAX Terms & Privacy Policy Flow를 사용하여 이용약관 및 개인정보 처리방침에 대한 동의를 유도하는 방법을 설명합니다.
MAX SDK에 포함된 CMP flow를 사용하거나 자체 CMP flow를 연동할 수 있습니다. 자체 CMP flow를 연동하는 경우, 해당 flow가 완료된 후에 MAX SDK를 초기화해야 합니다.
iOS 17.4의 버그로 인해 App Tracking Transparency (ATT) 프롬프트가 사용자가 ATT를 거부한 것으로 조기에 표시될 수 있습니다. 이로 인해 사용자가 ATT에 동의할 수 있는 경우에도 AppLovin SDK가 LAT로 구성된 ad network로 Ad Units를 초기화하게 됩니다. AppLovin의 Unified Consent Flow를 사용하는 경우, 이 문제를 완화하기 위해 최신 iOS SDK(12.3.0 이상)로 업데이트하십시오.
AppLovin MAX SDK는 Google UMP와 함께 사용할 때 TCF v2를 준수합니다. MAX SDK는 동의 문자열 및 AC 문자열을 수신하여 TCF v2 consent에 설명된 대로 미디에이션된 네트워크에 TCF v2 동의 문자열/상태를 전달할 수 있습니다.
AppLovin의 자동화된 flow 등을 통해 Google UMP를 CMP로 사용하지 않는 경우, 선택한 CMP가 연동하는 모든 미디에이션된 네트워크를 지원하는지 확인해야 합니다.
CMP를 사용하지 않는 경우, Consent and other applicable flags in GDPR and other regions에 설명된 대로 AppLovin SDK의 바이너리 동의 플래그를 계속 설정해야 합니다.
MAX를 통해 Google 디맨드에 액세스하는 경우, 연동 프로세스를 시작하기 전에 Google CMP 요구 사항을 검토하는 것이 매우 중요합니다.
AppLovin MAX SDK는 Google UMP 연동을 자동화합니다. Google UMP를 수동으로 연동할 필요가 없습니다. 이는 옵트인 방식이며, AppLovin은 이 Google UMP 연동을 활성화하는 방법에 대한 지침을 제공합니다. 아래는 flow의 시각적 표현입니다.
다음 중 하나의 상황에서는 TCF 동의 상태가 false일 수 있습니다.
MAX consent flow에서 Google GDPR 양식을 표시하려면 먼저 AdMob 대시보드에서 Google GDPR 메시지를 생성하고 게시해야 합니다. 방법은 다음과 같습니다.
닫기(동의하지 않음) 옵션은 선택하지 마십시오.
#ffffff)으로 설정합니다.#6e6e6e)으로 설정합니다.기본 GDPR 메시지에서 Google은 모든 광고 네트워크 파트너를 표시하지 않을 수 있습니다. 이러한 네트워크를 포함하지 않으면 광고 수익에 부정적인 영향을 미칠 수 있습니다. 모든 광고 파트너가 GDPR 메시지에 표시되도록 하려면 이 섹션의 단계를 따르십시오.
Google에서 GDPR 인증을 받은 광고 파트너 목록은 Google AdMob 고객센터의 “GDPR 광고 파트너 관리”를 참조하십시오.
먼저, 앱의 타겟에 Google User Messaging Platform SDK에 대한 종속성을 추가합니다.
프로젝트의 Podfile에서 이 작업을 수행합니다.
target '«your-project-name»' do
pod 'Google-Mobile-Ads-SDK'
end
앱의 Info.plist에 String 타입의 NSUserTrackingUsageDescription이라는 새 키를 생성합니다.
이 문자열은 앱이 사용자 또는 기기를 추적하는 데이터를 사용할 수 있도록 권한을 요청하는 이유를 사용자에게 알리는 방법입니다.
AppLovin은 이 값을 “보다 개인화된 광고 및 콘텐츠를 위해 기기 정보를 사용합니다.”로 설정할 것을 권장합니다.
프로그래밍 방식으로 또는 애플리케이션 리소스에 설정 파일을 추가하여 MAX Terms and Privacy Policy Flow를 활성화할 수 있습니다. 아래 섹션에서 이 두 가지 방법을 모두 설명합니다.
앱을 검토를 위해 App Store Connect에 제출할 때, iOS 14.5 이상에서만 App Tracking Transparency 프레임워크 권한 요청을 활성화했음을 검토자에게 알려야 합니다. 심사 추가 정보 섹션에서 이 작업을 수행하십시오. 이렇게 하지 않으면 Apple에서 빌드를 거부할 수 있습니다.
프로그래밍 방식으로 MAX Terms and Privacy Policy Flow를 활성화하려면 SDK를 초기화하기 전에 SDK의 settings 개체의 특정 속성을 설정하십시오.
아래 코드 샘플은 이를 수행하는 방법을 보여줍니다.
#import <AppLovinSDK/AppLovinSDK.h>
⋮
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
⋮
ALSdkSettings *settings = [ALSdk shared].settings;
settings.termsAndPrivacyPolicyFlowSettings.enabled = YES;
settings.termsAndPrivacyPolicyFlowSettings.privacyPolicyURL = [NSURL URLWithString: @"«https://your-company-name.com/privacy-policy»"];
// 서비스 약관 URL은 선택 사항입니다.
settings.termsAndPrivacyPolicyFlowSettings.termsOfServiceURL = [NSURL URLWithString: @"«https://your-company-name.com/terms-of-service»"];
// GDPR 지역에서 Terms & Privacy Policy flow를 표시하는 것은 선택 사항입니다 (기본적으로 비활성화됨)
settings.termsAndPrivacyPolicyFlowSettings.showTermsAndPrivacyPolicyAlertInGDPR = YES;
// 올바른 작동을 위해 미디에이션 프로바이더 값을 @"max"로 설정하십시오.
ALSdkInitializationConfiguration *initConfig = [ALSdkInitializationConfiguration configurationWithSdkKey: @"«SDK-key»" builderBlock:^(ALSdkInitializationConfigurationBuilder *builder) {
builder.mediationProvider = ALMediationProviderMAX;
}];
// 구성으로 SDK를 초기화합니다.
[[ALSdk shared] initializeWithConfiguration: initConfig completionHandler:^(ALSdkConfiguration *sdkConfig) {
⋮
}];
}
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
{
⋮
let settings = ALSdk.shared().settings
settings.termsAndPrivacyPolicyFlowSettings.isEnabled = true
settings.termsAndPrivacyPolicyFlowSettings.privacyPolicyURL = URL(string: "«https://your-company-name.com/privacy-policy»")
// 서비스 약관 URL은 선택 사항입니다.
settings.termsAndPrivacyPolicyFlowSettings.termsOfServiceURL = URL(string: "«https://your-company-name.com/terms-of-service»")
// GDPR 지역에서 Terms & Privacy Policy flow를 표시하는 것은 선택 사항입니다 (기본적으로 비활성화됨)
settings.termsAndPrivacyPolicyFlowSettings.shouldShowTermsAndPrivacyPolicyAlertInGDPR = true
// 올바른 작동을 위해 미디에이션 프로바이더 값을 "max"로 설정하십시오.
let initConfig = ALSdkInitializationConfiguration(sdkKey: "«SDK-key»") { builder in
builder.mediationProvider = ALMediationProviderMAX
⋮
}
// 구성으로 SDK를 초기화합니다.
ALSdk.shared().initialize(with: initConfig) { sdkConfig in
⋮
}
}
}
SDK 키는 AppLovin 대시보드의 Account > General > Keys 섹션에서 찾을 수 있습니다.
앱의 AppLovin-Settings.plist를 사용하여 MAX Terms and Privacy Policy Flow를 활성화하려면 다음을 수행하십시오.
AppLovin-Settings.plist라는 새 프로퍼티 리스트 파일을 추가합니다.AppLovin-Settings.plist에 ConsentFlowInfo라는 Dictionary 타입의 새 키를 생성합니다.
ConsentFlowInfo 내부에 다음 키/값 쌍을 추가합니다.
ConsentFlowEnabled이고 값이 YES인 Boolean.ConsentFlowPrivacyPolicy이고 값이 개인정보 처리방침 URL인 String.ConsentFlowTermsOfService이고 값이 서비스 약관 URL인 String.ConsentFlowShowTermsAndPrivacyPolicyAlertInGDPR이고 값이 YES인 Boolean.최종 결과는 다음과 같아야 합니다.

SDK는 SDK를 초기화할 때 consent flow를 표시합니다. 사용자가 flow를 완료하면 SDK는 초기화 완료 콜백을 호출합니다.
제3자 SDK(MMP 또는 분석 SDK 등)를 초기화하기 전에 사용자가 consent flow를 완료할 때까지 기다려야 합니다. 이러한 이유로 초기화 완료 콜백에서 해당 SDK를 초기화하십시오. 사용자가 consent flow를 완료하기 전에 제3자 SDK를 초기화하면 이러한 SDK가 관련 식별자에 액세스할 수 없으므로 측정, 보고 및 광고 수익에 실질적인 영향을 미칩니다.
초기화 콜백에서 MAX 미디에이션 네트워크 SDK를 초기화하지 마십시오. MAX는 이 초기화를 자동으로 수행합니다.
MMP 연동에서 사용자 ID를 설정하는 경우, AppLovin 사용자 ID를 설정하는 곳에 설정하십시오. 아래 코드 스니펫은 Adjust를 예로 사용합니다. Adjust를 초기화하는 방법 및 사용자 ID를 설정하는 방법을 알아보려면 Adjust 문서를 참조하십시오.
#import <AppLovinSDK/AppLovinSDK.h>
#import <Adjust/Adjust.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
⋮
// 초기화 구성을 생성합니다.
ALSdkInitializationConfiguration *initConfig = [ALSdkInitializationConfiguration configurationWithSdkKey: @"«SDK-key»" builderBlock:^(ALSdkInitializationConfigurationBuilder *builder) {
builder.mediationProvider = ALMediationProviderMAX;
}];
// 필요한 경우 SDK 초기화 전후에 SDK 설정을 구성합니다.
ALSdkSettings *settings = [ALSdk shared].settings;
settings.userIdentifier = @"«user-ID»";
[Adjust addSessionCallbackParameter: @"«your-user-ID-key»" value: @"«user-ID»"];
// 구성으로 SDK를 초기화합니다.
[[ALSdk shared] initializeWithConfiguration: initConfig completionHandler:^(ALSdkConfiguration *sdkConfig) {
// configuration.appTrackingTransparencyStatus를 통해 앱 투명성 추적 권한을 확인할 수 있습니다.
// 다른 제3자 SDK를 초기화합니다. 미디에이션된 광고 SDK는 초기화하지 마십시오. MAX가 자동으로 처리합니다. 이 단계를 따르지 않으면 눈에 띄는 연동 문제가 발생할 수 있습니다.
// AppLovin SDK의 초기화 콜백 내에서 Adjust SDK를 초기화합니다.
ADJConfig *adjustConfig = [ADJConfig configWithAppToken: @"«your-Adjust-app-token»"
environment: ADJEnvironmentSandbox or ADJEnvironmentProduction];
[Adjust appDidLaunch: adjustConfig];
// 광고 로드 시작
}];
}
import AppLovinSDK
import Adjust
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
{
⋮
// 초기화 구성을 생성합니다.
let initConfig = ALSdkInitializationConfiguration(sdkKey: "«SDK-key»") { builder in
builder.mediationProvider = ALMediationProviderMAX
}
let settings = ALSdk.shared().settings
settings.userIdentifier = "«user-ID»"
Adjust.addSessionCallbackParameter("«your-user-ID-key»", value: "«user-ID»")
// 구성으로 SDK를 초기화합니다.
ALSdk.shared().initialize(with: initConfig) { sdkConfig in
// `configuration.appTrackingTransparencyStatus`를 통해 앱 투명성 추적 권한을 확인할 수 있습니다.
// 다른 제3자 SDK를 초기화합니다. 미디에이션된 광고 SDK는 초기화하지 마십시오. MAX가 자동으로 처리합니다. 이 단계를 따르지 않으면 눈에 띄는 연동 문제가 발생할 수 있습니다.
// AppLovin SDK의 초기화 콜백 내에서 Adjust SDK를 초기화합니다.
let adjustConfig = ADJConfig(appToken: "«your-Adjust-app-token»",
environment: ADJEnvironmentSandbox or ADJEnvironmentProduction)
Adjust.appDidLaunch(adjustConfig)
// 광고 로드 시작
}
}
}
아래 표는 영어(기본) 설명과 재량에 따라 사용할 수 있는 다양한 현지화 버전을 제공합니다. 앱을 현지화하는 방법을 알아보려면 Documentation > Xcode > Localization 지침을 읽어보십시오.
| 로케일 | 문자열 |
|---|---|
| 영어 (기본) | This uses device info for more personalized ads and content |
| 중국어 간체 (ZhHans) | 我们使用设备信息来提供个性化的广告和内容。 |
| 중국어 번체 (ZhHant) | 我們使用設備信息來提供個性化的廣告和內容。 |
| 프랑스어 (fr) | Cela permet d’utiliser les informations du téléphone pour afficher des contenus publicitaires plus pertinents. |
| 독일어 (de) | Dies benutzt Gerätinformationen für relevantere Werbeinhalte |
| 일본어 (Ja) | これはユーザーデータをもとに、より関連性の高い広告コンテンツをお客様に提供します |
| 한국어 (Ko) | 보다 개인화된 광고 및 콘텐츠를 위해 기기 정보를 사용합니다. |
| 스페인어 (es) | Esto utiliza la información del dispositivo para anuncios y contenido más personalizados |
AppLovin은 GDPR 지역의 기존 사용자가 GDPR flow에 다시 진입할 수 있도록 허용할 것을 권장합니다.
일반적으로 사용자는 앱의 설정 섹션에서 기존 개인정보 보호 설정 관리 옵션을 통해 이 작업을 수행합니다.
SDK API ALSdkConfiguration.consentFlowUserGeography를 사용하여 사용자가 GDPR 지역에 있는지 확인할 수 있습니다.
consentFlowUserGeography가 ALConsentFlowUserGeographyGDPR인 경우 사용자는 GDPR 지역에 있는 것입니다.
이 경우 조건부로 해당 설정 옵션을 사용자에게 표시할 수 있습니다.
사용자가 기존 개인정보 보호 설정 관리(또는 이에 상응하는 옵션)를 클릭하면 -[ALCMPService showCMPForExistingUserWithCompletion]을 호출합니다.
이렇게 하면 사용자의 기존 동의 정보가 재설정됩니다.
#import "MyViewController.h"
#import <AppLovinSDK/AppLovinSDK.h>
@interface MyViewController ()
@end
@implementation MyViewController
- (void)loadAndShowCMPFlow
{
ALCMPService *cmpService = [ALSdk shared].cmpService;
[cmpService showCMPForExistingUserWithCompletion:^(ALCMPError * _Nullable error) {
if ( !error )
{
// CMP 알림이 성공적으로 표시되었습니다.
}
}];
}
@end
import AppLovinSDK
class MyViewController: UIViewController
{
func loadAndShowCmpFlow()
{
let cmpService = ALSdk.shared().cmpService
cmpService.showCMPForExistingUser { error in
if (nil == error)
{
// CMP 알림이 성공적으로 표시되었습니다.
}
}
}
}
GDPR 지역 외부에서 Google CMP를 테스트하려면 아래 표시된 기술 중 하나를 사용하여 디버그 사용자 지역을 설정하십시오:
이 flow는 신규 사용자에게만 표시됩니다. CMP 프롬프트를 완료한 후 flow를 테스트하려면 앱을 삭제하고 다시 설치해야 합니다.
디버그 사용자 지역을 GDPR로 설정하려면 다음과 같은 코드를 사용하십시오:
ALSdk.shared.termsAndPrivacyPolicyFlowSettings.debugUserGeography = ALConsentFlowUserGeographyGDPR;
ALSdk.shared().termsAndPrivacyPolicyFlowSettings.debugUserGeography = .GDPR
디버그 사용자 지역을 설정하려면 ConsentFlowInfo 개체 아래에 문자열 값 gdpr을 가진 ConsentFlowDebugUserGeography 키를 추가합니다.

MAX Mediation Debugger의 Privacy 섹션 아래에 있는 CMP (Consent Management Platform) 행에는 연동한 Google 인증 CMP SDK의 이름이 표시됩니다. Google UMP SDK를 연동한 경우 이름으로 “Google consent management solutions”가 표시됩니다.

CMP (Consent Management Platform) 행을 선택하면 IAB TCF 매개변수인 IABTCF_gdprApplies, IABTCF_TCString 및 IABTCF_AddtlConsent를 검사할 수 있습니다. 후자의 두 개 매개변수의 경우, 행을 클릭하여 해당 값을 복사하거나 공유할 수 있습니다.

CMP CONFIGURATION 섹션에서 Google UMP 구성에 연동되어 있거나 누락된 네트워크를 확인할 수 있습니다. 이는 MAX에서 사용할 수 있는 모든 네트워크의 전체 목록입니다. 애플리케이션에 연동하지 않은 네트워크는 무시해도 됩니다.
CMP flow에는 애플리케이션에 연동하는 네트워크를 나열해야 합니다. 해당 네트워크 중 누락된 네트워크가 있는지 확인하고 이 문제를 해결하려면 다음을 수행하십시오.
CMP flow에 모든 네트워크가 포함되었는지 확인할 때까지 이 단계를 반복합니다.
모든 네트워크의 동의 상태를 보려면 Mediation Debugger에서 Network Consent Statuses를 확장합니다. Mediation Debugger는 TC 문자열을 파싱하고 모든 네트워크의 동의 상태를 표시합니다. 또한 Google UMP가 생성하는 AC 문자열에서 파싱하는 AppLovin 동의 상태도 표시합니다.
