首页 > 编程知识 正文

ios如何屏蔽弹窗广告,ios 跳过启动广告快捷指令

时间:2023-05-05 06:21:36 阅读:219744 作者:537

前言

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

一、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.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。