MAUI iOS应用添加ATT授权遇问题:配置完成无弹窗
MAUI iOS 无法弹出App Tracking Transparency(ATT)授权弹窗
我正在为iOS平台的MAUI应用添加ATT授权,已在MainPage.xaml.cs的OnAppearing方法中添加以下代码:
protected override void OnAppearing() { base.OnAppearing(); // Prompt the user for tracking authorization ATTrackingManager.RequestTrackingAuthorization(async (status) => { string message = ""; // Handle the user's authorization status here switch (status) { case ATTrackingManagerAuthorizationStatus.Authorized: message = "Authorized"; await Application.Current.MainPage.DisplayAlert("Authorization Status", message, "OK"); break; case ATTrackingManagerAuthorizationStatus.Denied: message = "Denied"; await Application.Current.MainPage.DisplayAlert("Authorization Status", message, "OK"); break; case ATTrackingManagerAuthorizationStatus.Restricted: message = "Restricted"; await Application.Current.MainPage.DisplayAlert("Authorization Status", message, "OK"); break; case ATTrackingManagerAuthorizationStatus.NotDetermined: message = "NotDetermined"; await Application.Current.MainPage.DisplayAlert("Authorization Status", message, "OK"); break; } }); }
同时在Platforms/iOS/Info.plist中添加配置:
<key>NSUserTrackingUsageDescription</key> <string>This app uses data to deliver personalized advertising.</string>
操作后无报错,但始终无法弹出苹果官方的ATT授权弹窗,期望出现标准授权提示界面。
解决方法
1. 强制在主线程执行授权请求
ATTrackingManager.RequestTrackingAuthorization必须在iOS主线程调用,异步回调中操作UI也需要切回主线程,修改代码如下:
protected override void OnAppearing() { base.OnAppearing(); MainThread.BeginInvokeOnMainThread(() => { ATTrackingManager.RequestTrackingAuthorization((status) => { string message = status switch { ATTrackingManagerAuthorizationStatus.Authorized => "已授权", ATTrackingManagerAuthorizationStatus.Denied => "已拒绝", ATTrackingManagerAuthorizationStatus.Restricted => "受限制", ATTrackingManagerAuthorizationStatus.NotDetermined => "未确定", _ => "未知状态" }; MainThread.BeginInvokeOnMainThread(async () => { await Application.Current.MainPage.DisplayAlert("授权状态", message, "确定"); }); }); }); }
2. 确认iOS版本兼容性
ATT框架仅支持iOS 14.0及以上版本,测试设备或模拟器系统版本低于iOS 14时,授权弹窗不会触发,需确保测试环境满足版本要求。
3. 验证Info.plist配置
- 检查
NSUserTrackingUsageDescription键名无拼写错误(注意大小写和符号) - 描述文本需明确说明跟踪用途,不能为空或过于简略,否则苹果可能屏蔽弹窗
- 确认修改的是MAUI项目中
Platforms/iOS/Info.plist文件,而非共享项目中的其他配置
4. 避免模拟器测试限制
iOS模拟器中ATT弹窗可能无法正常显示,建议使用真实iOS设备测试。若必须用模拟器:
- 执行
Device > Erase All Content and Settings重置模拟器 - 在模拟器
设置 > 隐私与安全性 > 跟踪中手动开启权限
5. 检查授权状态是否已确定
若用户已做出过授权选择(允许/拒绝),RequestTrackingAuthorization不会再次弹窗,可先检查状态:
protected override void OnAppearing() { base.OnAppearing(); MainThread.BeginInvokeOnMainThread(() => { var currentStatus = ATTrackingManager.TrackingAuthorizationStatus; if (currentStatus == ATTrackingManagerAuthorizationStatus.NotDetermined) { ATTrackingManager.RequestTrackingAuthorization((status) => { // 处理状态逻辑 }); } else { MainThread.BeginInvokeOnMainThread(async () => { await Application.Current.MainPage.DisplayAlert("提示", "请前往设置修改跟踪权限", "确定"); }); } }); }
内容的提问来源于stack exchange,提问作者Matan Fadida
相关产品推荐
相关产品推荐

