跳转到内容

开始使用

  1. 安装包

    Terminal window
    npm i @capgo/capacitor-app-tracking-transparency
  2. 同步原生项目

    Terminal window
    npx cap sync

NSUserTrackingUsageDescription 键添加到 Info.plist:

<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>

该字符串应说明您为何需要跟踪权限。请求权限时这段文字会显示给用户。

导入插件并使用其方法处理跟踪授权:

import { AppTrackingTransparency } from '@capgo/capacitor-app-tracking-transparency';
// 检查当前跟踪状态
const checkStatus = async () => {
const { status } = await AppTrackingTransparency.getStatus();
console.log('Tracking status:', status);
};
// 请求跟踪权限
const requestPermission = async () => {
const { status } = await AppTrackingTransparency.requestPermission();
console.log('User chose:', status);
};

获取当前跟踪授权状态,不会提示用户。

const { status } = await AppTrackingTransparency.getStatus();
// Returns: 'authorized' | 'denied' | 'notDetermined' | 'restricted'

请求用户授权访问用于跟踪的应用相关数据。会显示 iOS 原生权限对话框。

const { status } = await AppTrackingTransparency.requestPermission();
// Returns: 'authorized' | 'denied' | 'notDetermined' | 'restricted'
import { AppTrackingTransparency } from '@capgo/capacitor-app-tracking-transparency';
export class TrackingService {
async requestTrackingIfNeeded(): Promise<boolean> {
// 先检查当前状态
const { status } = await AppTrackingTransparency.getStatus();
if (status === 'notDetermined') {
// 用户尚未被询问,显示对话框
const result = await AppTrackingTransparency.requestPermission();
return result.status === 'authorized';
}
return status === 'authorized';
}
async isTrackingAuthorized(): Promise<boolean> {
const { status } = await AppTrackingTransparency.getStatus();
return status === 'authorized';
}
}
Status描述
authorized用户已允许跟踪
denied用户拒绝跟踪
notDetermined用户尚未被询问
restricted跟踪被限制(例如家长控制)
  • 需要 iOS 14.0+
  • 使用 Apple 的 ATTrackingManager 框架
  • 权限弹窗在每次安装中只显示一次
  • 自动返回 authorized
  • 不会显示权限弹窗(ATT 仅适用于 iOS)
  • 为开发目的返回 authorized
  1. 在合适的时机请求 不要在应用启动时请求权限。等用户进入能从跟踪中获益的功能后再请求,并先说明价值。

  2. 请求前先检查 在调用 requestPermission() 前始终使用 getStatus() 检查,避免不必要的调用。

  3. 处理所有状态

    const { status } = await AppTrackingTransparency.getStatus();
    switch (status) {
    case 'authorized':
    // 启用个性化功能
    break;
    case 'denied':
    case 'restricted':
    // 使用非个性化替代方案
    break;
    case 'notDetermined':
    // 考虑请求权限
    break;
    }