如果您要记录设备的广告 ID (即 IDFA),需要先展示弹窗获得用户的授权。要达到这个目的,您需要在应用中添加 Apple 的 App Tracking Transparency (ATT) 框架。Adjust SDK 会存储用户的授权状态并在每次请求中将该信息发送至 Adjust 服务器。
授权状态
Status | Code | Description |
---|---|---|
ATTrackingManagerAuthorizationStatusNotDetermined | 0 | The user hasn’t responded to the access prompt yet |
ATTrackingManagerAuthorizationStatusRestricted | 1 | Access to app-related data is blocked at the device level |
ATTrackingManagerAuthorizationStatusDenied | 2 | The user has denied access to app-related data for device measurement |
ATTrackingManagerAuthorizationStatusAuthorized | 3 | The user has approved access to app-related data for device measurement |
ATT 授权包装器
static Future<num> requestAppTrackingAuthorization() async
The Adjust SDK contains a wrapper around Apple’s requestTrackingAuthorizationWithCompletionHandler
method. You can use this wrapper if you don’t want to customize the ATT prompt.
The callback method triggers when your user responds to the consent dialog. This method sends the user’s consent status code to Adjust’s servers. You can define responses to each status code within the callback function.
You must specify text content for the ATT request dialog. To do this, add your text to the NSUserTrackingUsageDescription
key in your Info.plist
file.
if (Platform.isIOS) { Adjust.requestAppTrackingAuthorization().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; } });}
示例
This example shows how to log a human-readable description of the user’s authorization status when they interact with a prompt.
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.initSdk(config);
Adjust.requestAppTrackingAuthorization().then((status) { print('[Adjust]: Authorization status update!'); final int statusInt = status.toInt(); switch (statusInt) { case 0: print( '[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusNotDetermined'); break; case 1: print( '[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusRestricted'); break; case 2: print( '[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusDenied'); break; case 3: print( '[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusAuthorized'); break; } });}
获取当前授权状态
static Future<int> getAppTrackingAuthorizationStatus() async
You can retrieve a user’s current authorization status at any time. Call the getAppTrackingAuthorizationStatus
method to return the authorization status code as an integer .
Adjust.getAppTrackingAuthorizationStatus().then((status) { // status gives you information about ATT consent value});
示例
This example shows how to collect the user’s authorization status and convert it to a String
. This information is assigned to a variable called authorizationStatus
and passed as a session partner parameter with the key "status"
.
String authorizationStatus = Convert.ToString(Adjust.getAppTrackingAuthorizationStatus());Adjust.addSessionPartnerParameter("status", authorizationStatus);
查看授权状态变化
static void checkForNewAttStatus()
If you use a custom ATT prompt, you need to inform the Adjust SDK of changes to the user’s authorization status. Call the checkForNewAttStatus
method to send the authorization status to Adjust’s servers.
Adjust.checkForNewAttStatus();
自定义弹窗时机
num? attConsentWaitingInterval;
如果您的应用包含新手引导流程或教程,您可能想在用户完成新手引导流程或教程后再发送用户的 ATT 许可状态。您可以设置 attConsentWaitingInterval
属性将数据发送延迟最多 360 秒 ,让用户有足够的时间完成初始用户引导。延时结束或用户设置许可状态后,SDK 会将在延迟时间内记录的所有信息以及用户许可状态发送给 Adjust 服务器。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);adjustConfig.attConsentWaitingInterval = 30;
Adjust.initSdk(adjustConfig);
禁用 App Tracking Transparency
bool? isAppTrackingTransparencyUsageEnabled;
若要禁用 Adjust SDK 与 AppTrackingTransparency.framework
的自动交互,您需要在 SDK 初始化之前将 AdjustConfig
实例上的 isAppTrackingTransparencyUsageEnabled
属性设为 false
。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);adjustConfig.isAppTrackingTransparencyUsageEnabled = false;
Adjust.initSdk(adjustConfig);