iOS上架审核之IDFA以及审核被拒问题

2023-05-16

iOS上架审核之IDFA以及审核被拒问题

We’re looking forward to completing our review, but we need more information to continue. Your app uses the AppTrackingTransparency framework, but we are still unable to locate the App Tracking Transparency permission request when reviewed on iOS 15.0.

我们期待着完成我们的审查,但我们需要更多信息来继续。您的应用程序使用AppTrackingTransparency框架,但在iOS 15.0上查看时,我们仍然无法找到app Tracking Transparency权限请求。

原因:离你使用了AppTrackingTransparency框架,需要弹出权限框

修改info.plist文件

添加以下key和value

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

重要!!!内容尽量完善,例如,我们使用第三方的框架需要追踪使用情况,例如:崩溃统计分析,推送统计分析,我们不追踪用户活动。

新建一个WMPermissionRequest.swift文件

//
//  WMPermissionRequest.swift
//  
//
//  Created by wumeng on 2021/5/13.
//  Copyright © 2021 wumeng. All rights reserved.
//

import UIKit

import AppTrackingTransparency


class WMPermissionRequest: NSObject {
    
    //NEWLY ADDED PERMISSIONS FOR iOS 14
    static func requestIDFAPermission() {
        if #available(iOS 14, *) {
            #if DEBUG
            print("IDFA status = \(ATTrackingManager.trackingAuthorizationStatus)")
            #endif
            let status = ATTrackingManager.trackingAuthorizationStatus
            switch status {
            case .notDetermined:
                ATTrackingManager.requestTrackingAuthorization { status in
                    switch status {
                    case .authorized:
                        // Tracking authorization dialog was shown
                        // and we are authorized
                        print("Authorized")
                        // Now that we are authorized we can get the IDFA
                        print(ASIdentifierManager.shared().advertisingIdentifier)
                    case .denied:
                        // Tracking authorization dialog was
                        // shown and permission is denied
                        print("Denied")
                    case .notDetermined:
                        // Tracking authorization dialog has not been shown
                        print("Not Determined")
                    case .restricted:
                        print("Restricted")
                    @unknown default:
                        print("Unknown")
                    }
                }
            default:
                print("default")
            }


        }
    }
    
    /// 定义私有全局变量,解决在iOS 13 定位权限弹框自动消失的问题
    private static let locationAuthManager = CLLocationManager()
    
    /**
     定位权限
     - parameters: action 权限结果闭包(有无权限,是否第一次请求权限)
     */
    static func authLocation(clouser: @escaping ((Bool,Bool)->())) {
        let authStatus = CLLocationManager.authorizationStatus()
        switch authStatus {
        case .notDetermined:
            //由于IOS8中定位的授权机制改变 需要进行手动授权
            WMPermissionRequest.locationAuthManager.requestAlwaysAuthorization()
            WMPermissionRequest.locationAuthManager.requestWhenInUseAuthorization()
            let status = CLLocationManager.authorizationStatus()
            if  status == .authorizedAlways || status == .authorizedWhenInUse {
                DispatchQueue.main.async {
                    clouser(true && CLLocationManager.locationServicesEnabled(), true)
                }
            }else{
                DispatchQueue.main.async {
                    clouser(false, true)
                }
            }
        case .restricted:
            clouser(false, false)
        case .denied:
            clouser(false, false)
        case .authorizedAlways:
            clouser(true && CLLocationManager.locationServicesEnabled(), false)
        case .authorizedWhenInUse:
            clouser(true && CLLocationManager.locationServicesEnabled(), false)
        @unknown default:
            clouser(false, false)
        }
    }
    
  

}


在AppDelegate使用

 func applicationDidBecomeActive(_ application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
        //请求权限 ios 14.5
        WMPermissionRequest.requestIDFAPermission()
    }

上述代码写在didFinishLaunchingWithOptions中。
但是从iOS15开始,需要转移到applicationDidBecomeActive中。

在主界面或者第一个展示页面的viewDidAppear调用。

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        //请求权限 ios 14.5
        WMPermissionRequest.requestIDFAPermission()
    }

在 App Store Connect 中设置好App隐私的标识符用于追踪目的即可

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS上架审核之IDFA以及审核被拒问题 的相关文章

随机推荐

  • 病毒变种--C语言练习

    病毒变种 病毒DNA可以表示成由一些字母组成的字符串序列 xff0c 且病毒的DNA序列是环状的 例如 xff0c 假设病毒的DNA序列为baa xff0c 则该病毒的DNA序列有三种变种 xff1a baa aab aba 试编写一程序
  • http、https 等 常用默认端口号

    HTTP协议代理服务器常用端口号 xff1a 80 8080 3128 8081 9080 SOCKS代理协议服务器常用端口号 xff1a 1080 FTP xff08 文件传输 xff09 协议代理服务器常用端口号 xff1a 21 Te
  • 网络传输性能netperf测试方法和下载

    简介 Netperf是一种网络性能的测试工具 xff0c 主要针对基于TCP或UDP的传输 Netperf根据应用的不同 xff0c 可以进行不同模式的网络性能测试 xff0c 即批量数据传输 xff08 bulk data transfe
  • 个人服务器(Linux)安装confluence

    个人服务器 Linux 安装confluence 文章目录 个人服务器 Linux 安装confluence 前言 一 服务器配置 二 JDK环境安装 1 下载java8 2 上传安装包 3 解压缩并重命名 4 配置jdk环境变量 5 测试
  • 关于Windows利用Mstsc远程访问Ubutu的VNC方法

    这里发现了一篇网上很好的文章 xff0c 实现也很顺利 xff0c 因此将那篇文章直接引用过来 地址为 xff1a https www cnblogs com xuliangxing p 7642650 html
  • VSCode 常用且好用的插件推荐

    python相关插件 Tabnine AI代码提示器 xff08 支持JavaScript Python Java Typescript amp all other languages xff09 Python vscode 的 pytho
  • Qt中实现图片透明度设置与显示

    在使用QGraphicsScene过程中 xff0c 想要实现背景和前景图层叠加显示 xff0c 需要设置对应层绘图的透明度的设置 采用重写drawBackground QPainter painter const QRectF amp r
  • c语言现代发方法19章学习经历记录

    19 4 5用栈实现抽象数据类型 这里简直太牛了 xff0c 直接定义一个结构体类型的栈 xff0c 里面是一个头节点 xff08 也是一个指针 xff09 后面直接定义一个栈的指针对象 xff0c 那么就可以随意改变栈里面的内容 xff0
  • 计蒜客 信息学题库 T1068 救援

    T1068 救援 救生船从大本营出发 xff0c 营救若干屋顶上的人回到大本营 xff0c 屋顶数目以及每个屋顶的坐标和人数都将由输入决定 xff0c 求出所有人都到达大本营并登陆所用的时间 在直角坐标系的原点是大本营 xff0c 救生船每
  • 计蒜客 信息学题库 T1079 开关灯

    T1079 开关灯 假设有 N 盏灯 xff08 N 为不大于 5000 的正整数 xff09 xff0c 从 1 到 N 按顺序依次编号 xff0c 初始时全部处于开启状态 xff1b 有 M 个人 xff08 M 为不大于 N 的正整数
  • 利用python实现ftp的文件读写

    ftp登陆连接 from ftplib import FTP 加载ftp模块 ftp 61 FTP 设置变量 ftp set debuglevel 2 打开调试级别2 xff0c 显示详细信息 ftp connect 34 IP 34 34
  • Serdes原理

    Serdes原理 1 为什么需要SerDes 电子系统中 xff0c 传送数据的方式一般有两种方式 xff0c 串口或者并口 xff0c 具体定义不区分 先来说一下同步与异步通信 二者的区别在于是否有时钟线来对齐数据 xff0c 采样数据
  • 02、oh my zsh安装和git 常用命令简介

    大家好 xff0c 上一节我们简单介绍了git xff0c 对比了git xff0c gitlab github之间的关系 xff0c 最后安装了git xff0c 这节我们学习一些git的基本的命令 另外希望初学者可以跟着博客逐个练习这些
  • 技术转管理,先来试试管理好项目

    今天分享的主题是 xff1a 如果你想技术转管理 xff0c 先来试试管好一个项目 技术转管理 xff0c 是很多技术人员的梦想 xff0c 这也是30多岁之前还在做技术的人 xff0c 也会对自己常常发出居安思危的意识表现 xff0c 所
  • Pyinstaller 多进程代码打包 exe 出现多个进程解决方案

    Pyinstaller 多进程代码打包 exe 出现多个进程解决方案 在执行项目的根目录添加 multiprocessing win py import os import sys import multiprocessing try if
  • Spring-boot required a bean named entityManagerFactory that could not be found

    在学习spring boot2 3 0的过程中遇到了Spring boot required a bean named entityManagerFactory that could not be found或A component req
  • Ubuntu 卸载 Nvidia 驱动和安装最新驱动

    Ubuntu 卸载 Nvidia 驱动和安装最新驱动 1 切换为集成显卡 如果没有 xff0c 那么先切换到字符界面 2 卸载驱动 span class token function sudo span span class token f
  • App Store上架出现“二进制文件无效“的处理方法

    App Store上架出现 34 二进制文件无效 34 的处理方法 App Store上架点击审核之后 xff0c 出现二进制文件无效 xff0c 最后发现是Analyze设成了debug模式 重要的事情是去邮箱看具体报什么错误然后一个一个
  • Linux下的/dev/sr0和/dev/cdrom

    dev sr0是光驱的设备名 xff0c dev cdrom代表光驱 cdrom是sr0的软链接 你ll dev cdrom和ll dev sr0看看显示 用df命令查看磁盘驱动器当前的可用空间 xff0c 用free显示当前可用内存
  • iOS上架审核之IDFA以及审核被拒问题

    iOS上架审核之IDFA以及审核被拒问题 We re looking forward to completing our review but we need more information to continue Your app us