Flutter应用因AdMob consent及追踪权限违反App Store 5.1.2准则遭拒排障
Flutter应用AdMob合规与iOS追踪权限问题
背景
我的Flutter应用初始通过了App Store审核,但因未在AdMob后台关联应用,导致GDPR consent表单未显示。后续更新因违反《准则5.1.2 - 法律 - 隐私 - 数据使用与共享》被拒,问题出在consent表单的处理逻辑上。
核心疑问
- 是否应先展示Apple追踪权限弹窗,用户允许后再显示GDPR Consent Form;若拒绝则跳过表单,加载非个性化广告?
- 或是跳过GDPR consent表单,仅展示Apple追踪权限弹窗,允许则加载个性化广告,拒绝则加载非个性化广告?
我的实现(采用第一种逻辑)
pubspec.yaml配置
permission_handler: ^11.3.0
info.plist配置
<key>NSUserTrackingUsageDescription</key> <string>Your description for why you need the tracking permission</string>
Dart核心代码
Future<void> _requestTrackingPermission() async { if (Platform.isIOS) { var status = await Permission.appTrackingTransparency.status; print('Current tracking status: $status'); if (status == PermissionStatus.denied || status == PermissionStatus.permanentlyDenied) { status = await Permission.appTrackingTransparency.request(); } setState(() { _isTrackingPermissionGranted = status == PermissionStatus.granted; }); _storeTrackingPermissionStatus(_isTrackingPermissionGranted); if (_isTrackingPermissionGranted) { await _requestAndShowConsentForm(); } else { _storeConsentStatus(ConsentStatus.unknown); _loadNonPersonalizedAds(); } } else if (Platform.isAndroid) { await _requestAndShowConsentForm(); } } Future<void> _storeTrackingPermissionStatus(bool isGranted) async { final prefs = await SharedPreferences.getInstance(); prefs.setBool('tracking_permission_granted', isGranted); } @override void initState() { super.initState(); _initializeMobileAds(); _requestTrackingPermission(); _loadItems(); _loadDarkModePreference(); _loadLocalePreference(); WidgetsBinding.instance.addPostFrameCallback((_) async { await _showAppOpenAd(); }); }
后续优化(处理权限拒绝场景)
新增跳转应用设置代码
Future<void> _openAppSettings() async { bool opened = await openAppSettings(); if (!opened) { print("Failed to open app settings."); } }
更新后的_requestTrackingPermission方法
Future<void> _requestTrackingPermission() async { if (Platform.isIOS) { var status = await Permission.appTrackingTransparency.status; print('Current tracking status: $status'); if (status == PermissionStatus.denied || status == PermissionStatus.permanentlyDenied) { bool userConfirmed = await _showPermissionDialog(); if (userConfirmed) { await _openAppSettings(); } } else if (status != PermissionStatus.granted) { status = await Permission.appTrackingTransparency.request(); } setState(() { _isTrackingPermissionGranted = status == PermissionStatus.granted; }); _storeTrackingPermissionStatus(_isTrackingPermissionGranted); if (_isTrackingPermissionGranted) { await _requestAndShowConsentForm(); } else { _storeConsentStatus(ConsentStatus.unknown); _loadNonPersonalizedAds(); } } else if (Platform.isAndroid) { await _requestAndShowConsentForm(); } } Future<bool> _showPermissionDialog() async { return showDialog<bool>( context: context, builder: (BuildContext context) { return AlertDialog( title: Text('Tracking Permission Required'), content: Text('This app requires tracking permission to show personalized ads. Please enable it in the app settings.'), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(false); }, child: Text('Cancel'), ), TextButton( onPressed: () { Navigator.of(context).pop(true); }, child: Text('Open Settings'), ), ], ); }, ) ?? false; }
当前遇到的问题
现在能正常弹出权限提示对话框,但进入应用设置页面后没有追踪权限选项,且在系统「设置-隐私与安全性-追踪」列表中找不到我的应用。
提问
请问我的处理逻辑是否正确?若逻辑正确,代码或配置环节存在什么问题?
内容的提问来源于stack exchange,提问作者Serkan Tarakcı
相关产品推荐
相关产品推荐

