如果您要记录设备的广告 ID (即 IDFA),需要先展示弹窗获得用户的授权。要达到这个目的,您需要在应用中添加 Apple 的 App Tracking Transparency (ATT) 框架。Adjust SDK 会存储用户的授权状态并在每次请求中将该信息发送至 Adjust 服务器。
授权状态
| 状态 | 代码 | 描述 | 
|---|---|---|
| ATTrackingManagerAuthorizationStatusNotDetermined | 0 | 用户尚未对访问权限请求弹窗做出响应 | 
| ATTrackingManagerAuthorizationStatusRestricted | 1 | 用户已在设备层级禁止应用相关数据访问 | 
| ATTrackingManagerAuthorizationStatusDenied | 2 | 用户已拒绝授予可用于设备监测的应用相关数据访问权限 | 
| ATTrackingManagerAuthorizationStatusAuthorized | 3 | 用户已授予可用于设备监测的应用相关数据访问权限 | 
ATT 授权包装器
requestAppTrackingAuthorization(): Promise<number>Adjust SDK 包含 Apple requestTrackingAuthorizationWithCompletionHandler: 方法的包装器。如果您不想对 ATT 弹窗进行自定义,则可以使用这一包装器。
用户对授权窗口做出响应时,回传方法就会被触发。该方法会将用户的授权状态代码发送至 Adjust 服务器。您可以在回传函数中定义每种状态代码的响应。
您必须指定 ATT 的文本内容。为此,请将文本加入 Info.plist 文件中的 NSUserTrackingUsageDescription key。
Adjust.requestAppTrackingAuthorization(function (status) {   print("Authorization status update!");   switch (status) {      case 0:         // ATTrackingManagerAuthorizationStatusNotDetermined case         break;      case 1:         // ATTrackingManagerAuthorizationStatusRestricted case         break;      case 2:         // ATTrackingManagerAuthorizationStatusDenied case         break;      case 3:         // ATTrackingManagerAuthorizationStatusAuthorized case         break;   }});示例
该示例展示了当用户与弹窗交互时,我们如何记录一个人类可读的用户授权状态描述。
Adjust.requestAppTrackingAuthorization(function (status) {   print("Authorization status update!");   switch (status) {      case 0:         console.log("The user has not responded to the access prompt yet.");         break;      case 1:         console.log(            "Access to app-related data is blocked at the device level.",         );         break;      case 2:         console.log(            "The user has denied access to app-related data for device measurement.",         );         break;      case 3:         console.log(            "The user has approved access to app-related data for device measurement.",         );         break;   }});获取当前授权状态
getAppTrackingAuthorizationStatus(): Promise<number>您可以随时读取用户当前授权状态。调用 getAppTrackingAuthorizationStatus 方法来以 number 形式返回授权状态代码。
Adjust.getAppTrackingAuthorizationStatus(function (status) {   // check status value});自定义弹窗时机
setAttConsentWaitingInterval(attConsentWaitingInterval: number): void如果您的应用包含新手引导流程或教程,您可能想在用户完成新手引导流程或教程后再发送用户的 ATT 许可状态。您可以设置 attConsentWaitingInterval 属性将数据发送延迟最多 360 秒 ,让用户有足够的时间完成初始用户引导。延时结束或用户设置许可状态后,SDK 会将在延迟时间内记录的所有信息以及用户许可状态发送给 Adjust 服务器。
const adjustConfig = new AdjustConfig(   "{YourAppToken}",   AdjustConfig.EnvironmentSandbox,);adjustConfig.setAttConsentWaitingInterval(30);
Adjust.initSdk(adjustConfig);禁用 App Tracking Transparency
disableAppTrackingTransparencyUsage(): void若要禁用 Adjust SDK 与 AppTrackingTransparency.framework 的自动交互,请在 SDK 初始化之前调用 AdjustConfig 实例上的 disableAppTrackingTransparencyUsage 方法。
const adjustConfig = new AdjustConfig(   "{YourAppToken}",   AdjustConfig.EnvironmentSandbox,);adjustConfig.disableAppTrackingTransparencyUsage();
Adjust.initSdk(adjustConfig);