IDFA(ID for Advertisers)를 기록하려면 사용자의 허가를 받기 위한 메시지를 표시해야 합니다. 이렇게 하려면 앱에 Apple의 ATT(App Tracking Transparency) 프레임워크를 포함해야 합니다. Adjust SDK는 사용자의 허가 여부를 저장하고 각 요청과 함께 Adjust 서버로 전송합니다.
승인 상태
| 상태 | 코드 | 설명 | 
|---|---|---|
ATTrackingManagerAuthorizationStatusNotDetermined | 0 | 사용자가 아직 액세스 프롬프트에 응답하지 않음 | 
ATTrackingManagerAuthorizationStatusRestricted | 1 | 앱 관련 데이터에 대한 액세스가 디바이스 수준에서 차단됨 | 
ATTrackingManagerAuthorizationStatusDenied | 2 | 사용자가 앱 관련 데이터에 대한 디바이스 측정 액세스를 거부함 | 
ATTrackingManagerAuthorizationStatusAuthorized | 3 | 사용자가 앱 관련 데이터에 대한 디바이스 측정 액세스를 승인함 | 
ATT 승인 래퍼
static Future<num> requestTrackingAuthorizationWithCompletionHandler() asyncAdjust SDK에는 Apple requestTrackingAuthorizationWithCompletionHandler 메서드의 래퍼가 포함되어 있습니다. ATT 프롬프트를 커스텀하지 않으려면 이 래퍼를 사용할 수 있습니다.
콜백 메서드는 사용자가 동의 팝업창에 응답할 때 트리거되고 사용자의 동의 상태 코드를 Adjust 서버로 전송합니다. 콜백 함수 내에서 각 상태 코드에 대한 응답을 정의할 수 있습니다.
ATT 요청 다이얼로그에 대한 텍스트 콘텐츠를 지정해야 합니다. 이를 위해 텍스트를 Info.plist 파일의 NSUserTrackingUsageDescription 키에 추가합니다.
if (Platform.isIOS) {   Adjust.requestTrackingAuthorizationWithCompletionHandler().then((status) {      final int statusInt = status.toInt();      switch (statusInt) {         case 0:            // ATTrackingManagerAuthorizationStatusNotDetermined case            break;         case 1:            // ATTrackingManagerAuthorizationStatusRestricted case            break;         case 2:            // ATTrackingManagerAuthorizationStatusDenied case            break;         case 3:            // ATTrackingManagerAuthorizationStatusAuthorized case            break;      }   });}예
예시에서는 사용자가 프롬프트와 상호작용할 때 사용자의 인증 상태에 대해 읽을 수 있는(human-readable) 설명을 로그하는 방법을 보여줍니다.
import 'package:adjust_sdk/adjust.dart';import 'package:flutter/cupertino.dart';import 'package:flutter/material.dart';import 'package:flutter/services.dart';
initPlatformState() async {   AdjustConfig config =      new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);      config.logLevel = AdjustLogLevel.verbose;
Adjust.requestTrackingAuthorizationWithCompletionHandler().then((status) {      print('[Adjust]: Authorization status update!');      final int statusInt = status.toInt();      switch (statusInt) {         case 0:         print(            'The user has not responded to the access prompt yet.');         break;         case 1:         print(            'Access to app-related data is blocked at the device level.');         break;         case 2:         print(            'The user has denied access to app-related data for device measurement.');         break;         case 3:         print(            'The user has approved access to app-related data for device measurement.');         break;      }   });
   Adjust.start(config);}현재 승인 상태 확인
static Future<int> getAppTrackingAuthorizationStatus() async사용자의 현재 인증 상태는 언제든지 조회가 가능합니다. getAppTrackingAuthorizationStatus 메서드를 호출하여 정수 로 인증 상태 코드를 반환합니다.
Adjust.getAppTrackingAuthorizationStatus();예
예시에서는 사용자의 인증 상태를 수집하여 String으로 변환하는 방법을 보여줍니다. 해당 정보는 authorizationStatus라는 변수로 할당되어 키 "status"와 함께 세션 파트너 파라미터로 전달됩니다.
String authorizationStatus = Convert.ToString(Adjust.getAppTrackingAuthorizationStatus());Adjust.addSessionPartnerParameter("status", authorizationStatus);승인 상태 변경 확인
static void checkForNewAttStatus()커스텀 ATT 프롬프트를 사용하는 경우, 사용자 인증 상태 변경에 대해 Adjust SDK에 알려야 합니다. checkForNewAttStatus 메서드를 호출하여 인증 상태를 Adjust 서버로 전송합니다.
Adjust.checkForNewAttStatus();커스텀 프롬프트 타이밍
num? attConsentWaitingInterval;앱이 온보딩 과정이나 튜토리얼을 포함하는 경우, 사용자가 온보딩 과정이나 튜토리얼을 완료할 때까지 사용자의 ATT 동의 상태 전송을 지연시킬 수 있습니다. 이를 위해 attConsentWaitingInterval 속성을 설정하여 최대 120초 동안 데이터 전송을 지연하여 사용자가 초기 온보딩을 완료할 수 있는 시간을 제공할 수 있습니다. 타임아웃이 끝나거나 사용자가 동의 상태를 설정한 경우, SDK는 지연 기간 동안 기록된 모든 정보를 사용자의 동의 상태와 함께 Adjust 서버로 전송합니다.
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.Sandbox);//...adjustConfig.attConsentWaitingInterval = 30;//...Adjust.start(adjustConfig);