You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Meta激励广告:iOSAdvertiserTrackingEnabled用户授权实现方案

Flutter双端集成Meta激励广告(含iOS14+ ATT授权实现)

一、依赖准备

在pubspec.yaml中添加两个核心依赖:

  • app_tracking_transparency: 用于iOS14+的ATT授权请求
  • facebook_audience_network: Meta官方的Flutter广告SDK

执行flutter pub get完成依赖安装。

二、iOS原生配置

在iOS项目的Info.plist中添加授权描述(必须,否则无法弹出授权弹窗):

<key>NSUserTrackingUsageDescription</key>
<string>我们需要获取广告追踪权限,为您提供更贴合需求的广告内容</string>

同时确保Xcode中项目的Deployment Target设置为iOS 14.0及以上。

三、Flutter端核心实现代码

1. 封装ATT授权方法

在广告管理类或页面中实现授权逻辑:

import 'package:app_tracking_transparency/app_tracking_transparency.dart';
import 'package:facebook_audience_network/facebook_audience_network.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';

// 请求广告追踪授权并同步到Meta SDK
Future<void> requestAdTrackingPermission() async {
  if (!kIsWeb && defaultTargetPlatform == TargetPlatform.iOS) {
    try {
      // 发起ATT授权请求
      final TrackingStatus status = await AppTrackingTransparency.requestTrackingAuthorization();
      
      // 根据授权状态设置Meta广告追踪开关
      bool isTrackingEnabled = false;
      switch (status) {
        case TrackingStatus.authorized:
        case TrackingStatus.notDetermined:
          isTrackingEnabled = true;
          break;
        case TrackingStatus.denied:
        case TrackingStatus.restricted:
          isTrackingEnabled = false;
          break;
      }
      
      // 将状态同步到Meta广告SDK
      await FacebookAudienceNetwork.setAdvertiserTrackingEnabled(isTrackingEnabled);
      
      // 可选:获取当前IDFA(仅授权后有效)
      final String? idfa = await AppTrackingTransparency.getAdvertisingIdentifier();
      debugPrint('当前IDFA: $idfa');
    } on PlatformException catch (e) {
      debugPrint('ATT授权请求失败: ${e.message}');
    }
  } else {
    // Android或其他平台直接开启广告追踪
    await FacebookAudienceNetwork.setAdvertiserTrackingEnabled(true);
  }
}

2. 初始化Meta广告SDK

在App启动阶段完成SDK初始化与授权请求:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Meta广告SDK
  await FacebookAudienceNetwork.init(
    testingId: '你的测试ID', // 测试环境使用,上线前移除
  );
  
  // 请求广告追踪授权
  await requestAdTrackingPermission();
  
  runApp(MyApp());
}

3. 加载并展示激励广告

授权完成后,正常加载激励广告即可:

RewardedVideoAd? _rewardedAd;

void loadRewardedAd() {
  _rewardedAd = RewardedVideoAd()
    ..loadAd(
      placementId: '你的激励广告位ID',
      listener: (result, value) {
        if (result == RewardedVideoAdResult.LOADED) {
          _rewardedAd?.show();
        } else if (result == RewardedVideoAdResult.VIDEO_COMPLETE) {
          // 用户完成观看,执行奖励发放逻辑
          giveRewardToUser();
        }
      },
    );
}

四、关键注意事项

  • 授权时机:建议在App启动后尽早请求授权,但不要强制用户授权,避免影响初始体验
  • 状态同步:必须将ATT授权状态同步到Meta SDK的setAdvertiserTrackingEnabled方法,否则Meta广告无法正确使用IDFA
  • Android端处理:Android无需ATT授权,直接设置enabled: true即可,Meta SDK会自动处理相关逻辑
  • 测试环境:使用Meta提供的测试ID,避免触发真实广告审核

内容的提问来源于stack exchange,提问作者ROHITH A O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:55:22