如果您要记录设备的广告主 ID (即 IDFA),需要先展示弹窗获得用户的授权。要达到这个目的,您需要在应用中添加 Apple 的 App Tracking Transparency (ATT) 框架。Adjust SDK 会存储用户的授权状态并在每次请求中将该信息发送至 Adjust 服务器。
授权状态
状态 | 代码 | 描述 |
---|---|---|
ATTrackingManagerAuthorizationStatusNotDetermined | 0 | 用户尚未对访问权限请求弹窗做出响应 |
ATTrackingManagerAuthorizationStatusRestricted | 1 | 用户已在设备层级禁止应用相关数据访问 |
ATTrackingManagerAuthorizationStatusDenied | 2 | 用户已拒绝授予可用于设备监测的应用相关数据访问权限 |
ATTrackingManagerAuthorizationStatusAuthorized | 3 | 用户已授予可用于设备监测的应用相关数据访问权限 |
ATT 授权包装器
static Future<num> requestAppTrackingAuthorization() async
Adjust SDK 包含 Apple requestTrackingAuthorizationWithCompletionHandler
方法的包装器。如果您不想对 ATT 弹窗进行自定义,则可以使用这一包装器。
用户对授权窗口做出响应时,回传方法就会被触发。该方法会将用户的授权状态代码发送至 Adjust 服务器。您可以在回传函数中定义每种状态代码的响应。
您必须设定 ATT 请求窗口中显示的文本。为此,请将文本加入 Info.plist
文件中的 NSUserTrackingUsageDescription
key。
if (Platform.isIOS) { Adjust.requestAppTrackingAuthorization().then((status) { switch (status) { case 0: // ATTrackingManagerAuthorizationStatusNotDetermined case break; case 1: // ATTrackingManagerAuthorizationStatusRestricted case break; case 2: // ATTrackingManagerAuthorizationStatusDenied case break; case 3: // ATTrackingManagerAuthorizationStatusAuthorized case break; } });}
示例
该示例展示了当用户与弹窗交互时,我们如何记录一个人类可读的用户授权状态描述。
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!'); switch (status) { 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
您可以随时读取用户当前授权状态。调用 getAppTrackingAuthorizationStatus
方法来以 整数 形式返回授权状态代码。
Adjust.getAppTrackingAuthorizationStatus().then((status) { // status gives you information about ATT consent value});
示例
该示例展示了如何收集用户授权状态并将其转化为 String
。我们会为该信息指定一个名为 authorizationStatus
的变量,并将其作为会话合作伙伴参数使用 "status"
key 传送。
String authorizationStatus = Convert.ToString(Adjust.getAppTrackingAuthorizationStatus());Adjust.addSessionPartnerParameter("status", authorizationStatus);
查看授权状态变化
static void checkForNewAttStatus()
如果使用自定义 ATT 弹窗,那么您需要告知 Adjust SDK 用户的授权状态。调用 checkForNewAttStatus
方法,以向 Adjust 服务器发送授权状态。
Adjust.checkForNewAttStatus();
自定义弹窗时机
num? attConsentWaitingInterval;
如果您的应用包含新手引导流程或教程,那么最好在用户完成新手引导流程或教程后再发送用户的 ATT 许可状态。您可以设置 attConsentWaitingInterval
属性将数据发送延迟最多 360 秒 ,让用户有足够的时间完成初始用户引导。延时结束或用户设置许可状态后,SDK 会将在延迟时间内记录的所有信息以及用户许可状态发送给 Adjust 服务器。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.attConsentWaitingInterval = 30;//...Adjust.initSdk(adjustConfig);