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

68 篇文章 1 订阅

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隐私的标识符用于追踪目的即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WMSmile

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

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

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

打赏作者

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

抵扣说明:

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

余额充值