为 iOS/Swift 应用实施 GDPR 和 ATT

问题描述 投票:0回答:2

我的应用程序因显示 GDPR(Google 的 UMP)和 ATT 使用户感到困惑而被 Apple 拒绝。具体来说,如果用户位于欧洲经济区,GDPR 将首先显示。这时ATT才开始出现。根据苹果公司的要求:“如果用户拒绝一次跟踪权限,请勿要求他们在同一权限请求流程中再次允许跟踪。在用户授予跟踪权限之前,不应有任何跟踪活动”。所以我需要知道用户填写 GDPR 表单的结果,以便我可以决定是否显示 ATT。

我还是没有解决办法。

这是我的代码

func setupAdvertisement() {
    fatalError("This method must be overridden in the subclass")
}

func requestATTAuthorization() {
    if #available(iOS 14.5, *) {
        let trackingAuthorizationStatus = ATTrackingManager.trackingAuthorizationStatus
        if trackingAuthorizationStatus == .notDetermined {
            ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in

            })
        }
    }
}

func showAdvertisement() {
    if #available(iOS 14.5, *) {
        let trackingAuthorizationStatus = ATTrackingManager.trackingAuthorizationStatus
        if trackingAuthorizationStatus == .notDetermined {
            ATTrackingManager.requestTrackingAuthorization(completionHandler: { [weak self] status in
                DispatchQueue.main.async {
                    self?.setupAdvertisement()
                }
            })
        } else {
            DispatchQueue.main.async {
                self.setupAdvertisement()
            }
        }
    } else {
        DispatchQueue.main.async {
            self.setupAdvertisement()
        }
    }
}

@objc func showAdBasedOnConsentStatus() {
    let consentStatus = UMPConsentInformation.sharedInstance.consentStatus

    switch consentStatus {
    case UMPConsentStatus.required:
        loadForm()
    case UMPConsentStatus.obtained:
        showAdvertisement()
    case UMPConsentStatus.notRequired:
        showAdvertisement()
    case UMPConsentStatus.unknown:
        print("Error showAdBasedOnConsentStatus()")
    @unknown default:
        print("Error showAdBasedOnConsentStatus()")
    }
}

func UMPSetup() {
    let parameters = UMPRequestParameters()
    parameters.tagForUnderAgeOfConsent = false


    UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
        with: parameters,
        completionHandler: { [weak self] error in
            if let error = error {

                print(error)
            } else {
                let formStatus = UMPConsentInformation.sharedInstance.formStatus
                if formStatus == UMPFormStatus.available {
                    self?.loadForm()
                } else {
                    self?.requestATTAuthorization()
                }
            }
        })
}

func loadForm() {
    UMPConsentForm.load(completionHandler: { form, loadError in
        if loadError != nil {

        } else {
            if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.required {
                form?.present(from: self, completionHandler: { dismissError in
                    if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.obtained {
                        self.showAdBasedOnConsentStatus()
                    }
                    self.loadForm()
                })
            } else {

            }
        }
    })
}

ios swift admob gdprconsentform apptrackingtransparency
2个回答
2
投票

首先,除了 GDPR 同意书之外,您还应该让

UMP
处理 IDFA 消息。这样您就不需要在代码中显示 IDFA 消息。 Here解释了如何实现它,非常简单,不需要代码,您只需要编辑
plist
文件,链接
ATT
框架并在您的AdMob配置文件上创建IDFA消息。我现在无法真正对其进行测试,但我认为 Google 足够聪明,可以为您解决问题,因为这是 Apple 的要求。

如果情况并非如此,另一个用户提供了一个“很棒的解决方案”,可以让您了解设置后的用户 GDPR 首选项。我最近对此进行了测试,它仍然有效。 既然是关于IDFA的,我想你应该看看canShowPersonalizedAds()方法。

    


0
投票

我们不会将 UMP 用于

IDFA

,仅用于 GDPR。 但是我认为如果你不使用 Google 的 UMP,那么关于实现的总体思路:

从代码中手动显示 IDFA 提示(Apple 的本机
    UIAlert
  1. Allow tracking
    Ask App Not to Track
    消除 IDFA 提示后,请出示 GDPR 同意书。但仅适用于 EU/EEU/UK 用户,如果不是 EU/EEU/UK 用户,请继续下一步。
  2. 初始化 AdMob SDK。
  3. AdMob SDK 中的魔力以某种方式解决了定向广告和隐私问题。

由于我们是在 Apple 平台上,所以我会先选择 IDFA,然后再选择 GDPR。

⬇️ 这里还建议了苹果拒绝电子邮件/消息中的“下一步”:⬇️

如果用户拒绝一次跟踪权限,请勿要求他们在同一权限请求流程中再次允许跟踪。在用户授予跟踪权限之前,不应进行任何跟踪活动。

如果您在应用跟踪透明度权限请求中选择“要求应用不跟踪”后收集数据,请修改 GDPR 提示并明确您收集数据但不跟踪。

如果您的应用在显示应用跟踪透明度权限请求之前显示了 GDPR 提示,则无需修改 GDPR 提示的措辞。

© www.soinside.com 2019 - 2024. All rights reserved.