iOS 广告标识符IDFA不弹窗问题以及弹窗逻辑解决方案

前言

在做项目过程中总免不了苹果隐私这个问题,广告标识符便是其中的一个让人琢磨的事情。

一、IDFA代码实现

1、也许你在项目中一直在info.plist里设置权限申请:

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

这个描述可能被拒,建议说明得详细点如:

请放心,开启权限不会获取您在其他站点的隐私信息,该权限仅用于标识设备、第三方广告、并保障服务安全与提示浏览体验

类似这样,就容易过审。

2、也许你在项目中也写了对应的广告标识符授权代码:

//导入框架
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/ASIdentifierManager.h>

if (@available(iOS 14, *)) { 
		// iOS14及以上版本需要先请求权限
     [ATTrackingManager                                          requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
      	// 获取到权限后,依然使用老方法获取idfa
        if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
        NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
    	NSLog(@"%@",idfa);
        } else {
    		NSLog(@"请在设置-隐私-跟踪中允许App请求跟踪");
    	}}];
    }else {
    	 // iOS14以下版本依然使用老方法 // 判断在设置-隐私里用户是否打开了广告跟踪
		if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
			NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString]; NSLog(@"%@",idfa);
		} else {
			NSLog(@"请在设置-隐私-广告中打开广告跟踪功能");
		}
}

但是运行验证的时候却没有弹窗,下面是解决弹窗的方法:

1、iPhone手机没有设置广告标识符开关

检查设置---->隐私---->跟踪---->允许App请求跟踪开关是否打开。

2、iPhone手机iOS版本是否是iOS15以上

如果是iOS15以上,那么可能广告标识符不弹窗,因为iOS 15 对 AppTrackingTransparency 框架做了调整,需要满足以下 2 点:

  • 应用当前的状态为 UIApplicationStateActive。
  • 当前没有其他的授权弹窗。

当满足以上 2 点后,再检查 ATTrackingManagerAuthorizationStatus 和请求授权。因此,可以在以下的选项中选择一个作为调整方案:

1、启动应用后,延时 1~2 秒去检查和申请权限。
2、在主控制器的 “ViewDidAppear” 方法中检查和申请权限(推荐)。
3、在FinishLaunching和BecomeActive分别写请求授权方法请求

使用类似递归方式去获取授权:

-(void)initAds
{      
	  UIApplication *applicaiton = [UIApplication sharedApplication];

    if (applicaiton.applicationState == UIApplicationStateActive)
    {
        if (@available(iOS 14, *)) {
            ATTrackingManagerAuthorizationStatus status = [ATTrackingManager trackingAuthorizationStatus];
            if(status == ATTrackingManagerAuthorizationStatusNotDetermined){
                [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
                    // Tracking authorization completed. Start loading ads here.

                    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                        [self loadBannerAd];
                        [self createAndLoadInterstitial];
                    }];
                }];
            }else{
                [self loadBannerAd];
                [self createAndLoadInterstitial];
            }
        }else{
            // Fallback on earlier versions
        }
    }else{
        [self performSelector:@selector(initAds)
                       withObject:nil
                       afterDelay:0.5f];
    }
}

延迟调用方法:

if #available(iOS 14.0, *) {
  DispatchQueue.main.asyncAfter(deadline: .now() +1) {
                ATTrackingManager.requestTrackingAuthorization{ (status)in
                }
        }
         }else{
             if ASIdentifierManager.shared().isAdvertisingTrackingEnabled{
                 advertisingId =ASIdentifierManager.shared().advertisingIdentifier.uuidString
                   print(" 低于  iOS 14.0 advertisingId : ",advertisingId)
             }else{
    }
}

END.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明似水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值