App Tracking Transparency 규정 준수

iOS 14 이상에서는 퍼블리셔가 여러 애플리케이션을 통해 사용자의 디바이스를 트래킹하려면 권한을 얻어야 합니다. 이러한 디바이스 설정을 ATT(App Tracking Transparency)라고 합니다. 유니티에서는 커스텀 권한 플로를 구현할 것을 권장합니다.

퍼블리셔는 ATT 권한 요청을 트리거한 후에 IDFA 설정을 수신할 SDK를 초기화해야 합니다.

중요: Apple에서는 이 요청을 인스톨당 한 번만 트리거하도록 했고, 사용자는 iOS 설정 메뉴에서 언제든지 해당 환경 설정을 변경할 수 있습니다.

다음은 ATT 권한 요청을 표시하는 일반적인 사용자 플로입니다.

  1. (권장) 광고주 트래킹을 선택하여 얻는 가치를 설명하는 ATT 컨텍스트 화면을 구성합니다.

  2. 권한 요청 시 표시되는 시스템 권한 알림에 대한 사용자 트래킹 설명을 구성합니다. 사용자 트래킹 권한을 요청하려는 경우 이 단계는 필수입니다.

  3. 프로젝트에 권한 플로를 구현합니다.

    • 디바이스의 권한 상태를 검사합니다.
    • 디바이스의 권한 상태를 알 수 없는 경우 ATT 컨텍스트 화면과 권한 요청을 최종 사용자에게 제시합니다.

ATT 컨텍스트 화면 표시

타겟 광고는 문맥 광고보다 유지율이 높습니다. Apple 정책에 따라 사용자가 타겟 광고 수신 여부를 선택하는 프롬프트를 앱 인스톨당 한 번만 표시할 수 있습니다. 따라서 유니티에서는 타겟 광고를 수신할 경우의 이점을 설명하는 컨텍스트 화면을 구현할 것을 권장합니다.

Unity의 iOS 14 지원 패키지에는 완전히 커스터마이즈 가능한 프리팹 컨텍스트 화면 에셋이 완비된 예제 컨텍스트 화면 씬이 포함되어 있습니다. 해당 텍스트는 예시일 뿐입니다. 공개 애플리케이션에서 사용하는 경우 제출한 나머지 내용과 동일한 인증 가이드라인을 따릅니다. 타겟 광고를 선택할 가능성을 높일 수 있으므로 유니티에서는 포함된 메시지와 이미지를 커스터마이즈할 것을 권장합니다.

중요: 이 섹션에 나와 있는 에셋을 사용하려면 iOS 14 지원 패키지 버전 0.3.0 이상, Unity 버전 2018.4.33f1 이상을 사용해야 합니다.

Unity 버전 2019.1 이상에서 에셋 사용

Unity 에디터 최신 버전에서는 Package Manager 창에서의 샘플 임포트를 지원합니다.

  1. Unity 에디터에서 Window > Package Manager를 선택하여 Package Manager 창을 엽니다.
  2. Package Manager 창에서 iOS 14 Support Advertising Support 패키지를 선택합니다.
  3. 패키지 설명 하단의 samples 섹션에서 01 Context Screen을 찾아 Import Into Project를 클릭합니다.
  4. 프로젝트(Project) 창에서 Assets > Samples > iOS 14 Advertising Support > 01 Context Screen Scenes > Context Screen Sample을 선택하여 Context Screen Sample 씬을 엽니다.

샘플 씬을 임포트한 후 복사, 수정하거나 사용할 프리팹을 기존 씬 중 하나에 복사할 수 있습니다.

Unity 2019.0 이전 버전에서 에셋 사용

이전 Unity 버전에서는 샘플을 별도의 Unity 프로젝트로 열어야 합니다.

  1. Unity Hub프로젝트에서 추가를 선택합니다.
  2. 패키지 저장소에서 다운로드한 com.unity.ads.ios-support 폴더로 이동한 후 SampleProject~를 선택하고 Select Folder를 클릭합니다.
  3. 샘플 프로젝트에 사용할 Unity 버전을 선택하고 엽니다.
  4. Unity 에디터의 프로젝트 창에서 Assets > Samples > iOS 14 Advertising Support > 01 Context Screen > Context Screen Sample을 선택하여 Context Screen Sample 씬을 엽니다.

에셋을 프로젝트에 통합합니다.

  1. 샘플 프로젝트 디렉토리에서 Assets/Samples/iOS 14 Advertising Support/01 - Context Screen 폴더를 복사합니다.
  2. 원하는 구조 체계에 따라 복사한 폴더를 사용 중인 프로젝트의 디렉토리에 붙여 넣습니다.
  3. 사용 중인 프로젝트를 열고 01 - Context Screen 에셋이 복사되었는지 확인합니다.
  4. Context Screen Sample 씬을 열고 플레이 모드로 진입하여 예상대로 동작하는지 확인합니다.

예상되는 동작

비어 있는 씬이 표시됩니다. 플레이 모드에 진입하면 컨텍스트 화면이 표시됩니다. iOS 디바이스에서만 기본 ATT 요청이 발생하므로, 컨텍스트 화면에서 Next를 선택하면 아무 일도 일어나지 않습니다.

ContextScreenManager 스크립트(Assets/Samples/iOS 14 Advertising Support/01 - Context Screen/Scripts/ContextScreenManager)는 씬이 시작되는 경우와 사용자가 이전에 ATT 권한 요청을 받지 않은 경우에만 컨텍스트 화면이 표시됩니다.

중요: 자신만의 메시지와 디자인(look and feel)으로 커스텀 컨텍스트 화면을 구현할 수 있습니다. 커스텀 컨텍스트 화면 프리팹을 사용하는 경우 인스펙터(Inspector)에서 ContextScreenManager 스크립트의 contextScreenPrefab 필드에 할당해야 합니다.

사용자가 SDK의 RequestAuthorizationTracking API를 호출하여 컨텍스트 화면을 해제하면 ContextScreenView 스크립트(Assets/Samples/iOS 14 Advertising Support/01 - Context Screen/Scripts/ContentScreenView)가 Apple의 ATT 권한 요청을 트리거합니다.

ATT 권한 요청 표시

Apple의 ATT 가이드라인을 준수하려면 요청 다이얼로그에 설명을 제공한 후 애플리케이션에 권한 요청을 구현해야 합니다.

중요: 권한 요청을 구현한 후 게임에 광고를 게재해야 합니다.

사용자 트래킹 설명 구성

Apple에서는 ATT 권한 요청에 대한 설명을 요구합니다. Info.plist 파일의 NSUserTrackingUsageDescription 키로 설명을 설정할 수 있습니다. 사용자에게 디바이스 트래킹 데이터 사용 권한을 요청하는 이유를 설명하는 메시지를 제공하려면 다음을 수행합니다.

  1. Xcode 프로젝트 내비게이터에서 Info.plist 파일을 엽니다.

  2. 프로퍼티 목록 에디터에서 임의의 키 옆에 있는 추가 버튼(+)을 클릭하여 새 프로퍼티 키를 생성합니다.

  3. 키 이름 NSUserTrackingUsageDescription을 입력합니다.

  4. 문자열 값 유형을 선택합니다.

  5. App Tracking Transparency 메시지를 값 필드에 입력합니다. 다음은 일부 예시입니다.

    • "보다 뛰어난 맞춤형 광고 경험을 제공하기 위해 귀하의 데이터를 사용합니다."
    • "귀하가 사용하는 앱과 디바이스, 귀하가 거주하는 국가에 기반하여 최대한 귀하가 가장 관심을 둘 만한 앱과 제품에 대한 광고를 표시하려 합니다."
    • "귀하가 사용하는 앱에 기반하여 귀하가 가장 관심을 둘 만한 앱과 제품에 대한 광고를 표시하려 합니다."

중요: Apple에서는 모든 최종 사용자가 접하는 개인정보 보호 관련 기능에 대해 허용 용도와 메시지를 정의하는 구체적인 App Store 가이드라인을 제공합니다. 유니티는 법적 자문을 제공하지 않습니다. 따라서 이 페이지의 정보를 비즈니스 및 프로세스의 법적 요구 사항과 그 해결 방법을 확인하기 위해 본인의 법률 자문을 구하는 것을 대신하는 수단으로 사용할 수 없습니다.

필요에 따라 Unity 개발자는 빌드를 생성할 때마다 일일이 사용자 트래킹 설명을 수동으로 구성할 필요 없이 자동으로 파일에 추가하는 빌드 후 단계를 만들 수 있습니다.

using UnityEditor;
using UnityEditor.Callbacks;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif
using System.IO;
 
public class PostBuildStep {
    // Set the IDFA request description:
    const string k_TrackingDescription = "Your data will be used to provide you a better and personalized ad experience.";
 
    [PostProcessBuild(0)]
    public static void OnPostProcessBuild(BuildTarget buildTarget, string pathToXcode) {
        if (buildTarget == BuildTarget.iOS) {
            AddPListValues(pathToXcode);
        }
    }
 
    // Implement a function to read and write values to the plist file:
    static void AddPListValues(string pathToXcode) {
        // Retrieve the plist file from the Xcode project directory:
        string plistPath = pathToXcode + "/Info.plist";
        PlistDocument plistObj = new PlistDocument();
 
 
        // Read the values from the plist file:
        plistObj.ReadFromString(File.ReadAllText(plistPath));
 
        // Set values from the root object:
        PlistElementDict plistRoot = plistObj.root;
 
        // Set the description key-value in the plist:
        plistRoot.SetString("NSUserTrackingUsageDescription", k_TrackingDescription);
 
        // Save changes to the plist:
        File.WriteAllText(plistPath, plistObj.WriteToString());
    }
}

Unity에서 ATT 권한 요청 구현

iOS 14 지원 패키지는 디바이스의 권한 상태를 검사하고 상태가 결정되지 않은 경우 요청을 표시할 수 있는 Apple API 액세스 권한을 제공합니다.

다음 스크립트는 iOS 디바이스에서 실행하는 경우에만 코드를 실행하는 UNITY_IOS 사전 컴파일 정의를 사용해 간단한 권한 요청을 구현하는 방법을 보여 줍니다.

using UnityEngine;
#if UNITY_IOS
// Include the IosSupport namespace if running on iOS:
using Unity.Advertisement.IosSupport;
#endif
 
public class AttPermissionRequest : MonoBehaviour {
    void Awake() {
#if UNITY_IOS
        // Check the user's consent status.
        // If the status is undetermined, display the request request:
        if(ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED) {
            ATTrackingStatusBinding.RequestAuthorizationTracking();
        }
#endif
    }
}

Xcode에서 ATT 권한 요청 구현

참고: 권한 요청 구현에 대한 자세한 내용은 Apple 개발자 기술 자료를 참고하십시오.

다음 예제 스크립트에서 간단하게 권한 요청을 구현하는 방법을 볼 수 있습니다.

#import <AppTrackingTransparency/AppTrackingTransparency.h>
 
- (void)requestTrackingAuthorization {
    [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
        // Tracking authorization completed. Start loading ads here.
    }];
}

권한 요청 테스트

구현을 테스트하려면 iOS용 프로젝트를 빌드한 후 Xcode에서 엽니다. Info.plist 파일(기본 위치: 애플리케이션 번들의 루트 폴더)을 열면 빌드 후 단계에서 추가한 NSUserTrackingUsageDescription 설명이 표시됩니다.

다음으로 앱을 빌드하고 테스트 디바이스에서 실행합니다. 프로젝트를 첫 번째로 실행 시 ATT 권한 요청이 표시되어야 합니다.

참고: Apple 요구 사항에 따르면 요청을 닫고 앱을 두 번째로 실행하면 요청이 트리거되지 않습니다. 구현을 다시 테스트하려는 경우 앱을 제거한 후 다시 설치해야 합니다.

추가 리소스