Flutter应用追踪透明度插件app_tracking_transparency的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter应用追踪透明度插件app_tracking_transparency的使用

app_tracking_transparency

pub package

这个Flutter插件允许你在iOS 14+设备上显示追踪授权对话框,并请求权限以收集数据。收集的数据对于广告网络(如AdMob)在iOS 14+设备上的高效工作至关重要。

Introduction

从iOS 14.0开始,App Tracking Transparency框架可用,因此我们可以向最终用户呈现应用追踪授权请求。

从iOS 14.5开始,IDFA(广告标识符)将在应用程序未调用App Tracking Transparency框架向最终用户展示追踪授权请求的情况下被自动置为零,这可能会导致广告收入显著减少。

在iOS >=14.0 <14.5版本中,不需要显示追踪授权请求对话框即可获取IDFA。但请注意,在这些iOS版本中,如果你询问了该权限而用户拒绝了它,你将失去访问IDFA的权限。

此插件允许你显示App Tracking Transparency授权请求并询问权限。

授权对话框

Usage

Step 1

确保更新位于ios/Runner目录下的Info.plist文件,并添加带有自定义消息的NSUserTrackingUsageDescription键来描述你的用途。

<key>NSUserTrackingUsageDescription</key>
<string>这个标识符将用于向您推送个性化广告。</string>

Step 2

Google建议你应该使用Google Mobile Ads SDK 7.64.0或更高版本。Google Mobile Ads SDK支持通过Apple的SKAdNetwork进行转化跟踪,这意味着即使在IDFA不可用时,Google也能够归因应用安装。为了启用此功能,你需要在Info.plist中更新SKAdNetworkItems键。详情请参阅官方文档

Example

以下是一个完整的示例代码,展示了如何在Flutter应用中使用app_tracking_transparency插件。

import 'package:flutter/material.dart';
import 'package:app_tracking_transparency/app_tracking_transparency.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String _authStatus = 'Unknown';

  @override
  void initState() {
    super.initState();

    // 确保在widget完全构建和初始化后调用原生代码
    WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((_) => initPlugin());
  }

  Future<void> initPlugin() async {
    final TrackingStatus status = await AppTrackingTransparency.trackingAuthorizationStatus;
    setState(() => _authStatus = '$status');

    // 如果系统可以显示授权请求对话框
    if (status == TrackingStatus.notDetermined) {
      // 显示自定义解释对话框
      await showCustomTrackingDialog(context);
      // 等待对话框弹出动画完成
      await Future.delayed(const Duration(milliseconds: 200));
      // 请求系统的追踪授权对话框
      final TrackingStatus newStatus = await AppTrackingTransparency.requestTrackingAuthorization();
      setState(() => _authStatus = '$newStatus');
    }

    final uuid = await AppTrackingTransparency.getAdvertisingIdentifier();
    print("UUID: $uuid");
  }

  Future<void> showCustomTrackingDialog(BuildContext context) async =>
      await showDialog<void>(
        context: context,
        builder: (context) => AlertDialog(
          title: const Text('亲爱的用户'),
          content: const Text(
            '我们关心您的隐私和数据安全。我们通过展示广告保持应用免费。\n'
            '我们可以继续使用您的数据为您定制广告吗?\n\n'
            '您可以在应用设置中随时更改选择。\n'
            '我们的合作伙伴将在您的设备上收集数据并使用唯一标识符向您展示广告。',
          ),
          actions: [
            TextButton(
              onPressed: () => Navigator.pop(context),
              child: const Text('继续'),
            ),
          ],
        ),
      );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('App Tracking Transparency 示例'),
      ),
      body: Center(
        child: Text('追踪状态: $_authStatus\n'),
      ),
    );
  }
}

Notes

  • 使用此插件需要使用XCode 12+编译项目,并在iOS 14+设备上运行应用。
  • iOS不允许同时显示多个原生对话框。如果尝试在已有对话框的情况下打开新的对话框,之前的对话框将被系统强制关闭。常见的场景是在首次启动iOS应用时显示通知权限对话框。如果你同时尝试显示通知权限对话框和应用追踪请求对话框,其中一个将会被取消。一种解决方法是在请求追踪授权之前使用自定义解释对话框。强烈推荐这种做法。
  • 另一种解决方法是推迟权限请求直到应用的第二次或第N次启动。如果你选择这种方法,请确保告知App Store审核人员你推迟了追踪请求,否则提交可能会被拒绝。
  • 始终在真实设备上测试新安装的应用程序。

通过以上步骤和示例代码,你可以成功集成app_tracking_transparency插件到你的Flutter应用中,确保在iOS 14+设备上正确处理追踪授权请求。


更多关于Flutter应用追踪透明度插件app_tracking_transparency的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用追踪透明度插件app_tracking_transparency的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter应用中集成和使用app_tracking_transparency插件可以帮助你请求用户的追踪授权,尤其是在iOS平台上。下面是一个完整的示例,展示了如何在Flutter应用中集成并使用app_tracking_transparency插件。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加app_tracking_transparency依赖:

dependencies:
  flutter:
    sdk: flutter
  app_tracking_transparency: ^2.0.0  # 确保使用最新版本

然后运行flutter pub get来安装依赖。

2. 配置iOS项目

由于app_tracking_transparency插件主要与iOS相关,你需要在ios/Runner/Info.plist文件中添加必要的权限请求说明。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
<key>NSUserTrackingUsageDescription</key>
<string>We need your permission to track your activity across apps and websites owned by other companies.</string>

3. 编写Dart代码

接下来,在你的Flutter应用中编写Dart代码来请求追踪授权。

import 'package:flutter/material.dart';
import 'package:app_tracking_transparency/app_tracking_transparency.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TrackingPermissionScreen(),
    );
  }
}

class TrackingPermissionScreen extends StatefulWidget {
  @override
  _TrackingPermissionScreenState createState() => _TrackingPermissionScreenState();
}

class _TrackingPermissionScreenState extends State<TrackingPermissionScreen> {
  String _status = "Checking permission...";

  @override
  void initState() {
    super.initState();
    _requestTrackingPermission();
  }

  Future<void> _requestTrackingPermission() async {
    if (Platform.isIOS) {
      ATTrackingManagerAuthorizationStatus status = await ATTrackingManager.requestTrackingAuthorization();
      setState(() {
        if (status == ATTrackingManagerAuthorizationStatus.authorized) {
          _status = "Tracking is authorized.";
        } else if (status == ATTrackingManagerAuthorizationStatus.denied) {
          _status = "Tracking is denied.";
        } else if (status == ATTrackingManagerAuthorizationStatus.restricted) {
          _status = "Tracking is restricted.";
        } else if (status == ATTrackingManagerAuthorizationStatus.notDetermined) {
          _status = "Tracking authorization status is not determined.";
        } else {
          _status = "Unknown tracking authorization status.";
        }
      });
    } else {
      setState(() {
        _status = "This feature is only available on iOS.";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('App Tracking Transparency'),
      ),
      body: Center(
        child: Text(_status),
      ),
    );
  }
}

4. 运行应用

现在,你可以运行你的Flutter应用。在iOS设备上,你应该会看到一个屏幕,显示正在检查追踪权限的状态,并在请求权限后更新状态。

注意事项

  • 确保你已经在App Store Connect中配置了相关的隐私设置,以符合Apple的隐私政策。
  • 在实际开发中,你可能需要根据用户的授权状态来动态调整应用的行为,比如是否显示广告追踪相关的功能。

这个示例展示了如何在Flutter中集成和使用app_tracking_transparency插件来请求用户的追踪授权。你可以根据具体需求进一步扩展这个示例。

回到顶部