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
相关产品推荐
相关产品推荐

