首页 > 解决方案 > 如何让用户通过使用 iOS 应用设置中的开关来更改他们的广告同意(个性化或非个性化)?

问题描述

使用 AdMob 和 Firebase Analytics,我试图让用户在应用程序的设置中更改他们的 AdMob 同意类型,方法是让他们打开/关闭个性化广告的开关(如果用户打开开关“打开”,他们将获得个性化广告,如果他们将其“关闭”,他们将获得非个性化广告)。我写了一个代码,但它给了我错误并且它也循环了。这样做的正确方法/代码是什么?

这是我目前正在做的事情: 1- 在 Settings.bundle>Root.plist 中添加了一个带有标识符“GooglePersonalizedAds”的切换开关项,让用户在应用程序的设置中打开/关闭开关

2- 在我的应用程序的“info.plist”中添加“FIREBASE_ANALYTICS_COLLECTION_ENABLED”和“GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS”作为“布尔”属性,并将它们的值设置为“NO”。

3-要初始化 FireBase,我在 AppDelegate 中添加了:

FirebaseConfiguration.shared.setLoggerLevel(.min)
FirebaseApp.configure()

4- 在 ViewController.swift 的 viewDidLoad() 中,我添加了:

registerSettingsBundle()
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.defaultsChanged), name: UserDefaults.didChangeNotification, object: nil)
defaultsChanged()

5- 在 ViewController.swift 中,我添加了:

@objc func defaultsChanged(){
let userDefault = UserDefaults.standard   //Fetch value from Settings.bundle        

if !purchasedUser {   

if userDefault.bool(forKey: "GooglePersonalizedAds") {

                print("GooglePersonalizedAds changed to: \(userDefault.bool(forKey: "GooglePersonalizedAds"))")
Analytics.setUserProperty("true", forName: AnalyticsUserPropertyAllowAdPersonalizationSignals)
self.view.backgroundColor = UIColor.red // To Test the implementation of personalized/non-personalized ads switch in App's settings
Analytics.setAnalyticsCollectionEnabled(true)
PACConsentInformation.sharedInstance.consentStatus = .personalized
let request = GADRequest()
let extras = GADExtras()
extras.additionalParameters = ["npa": "0"]
request.testDevices = [testDeviceString] 
request.register(extras)
} 

else if !userDefault.bool(forKey: "GooglePersonalizedAds") {

print("GooglePersonalizedAds changed to: \(userDefault.bool(forKey: "GooglePersonalizedAds"))")
Analytics.setUserProperty("false", forName: AnalyticsUserPropertyAllowAdPersonalizationSignals)
self.view.backgroundColor = UIColor.green // To Test the implementation of personalized/non-personalized ads switch in App's settings
Analytics.setAnalyticsCollectionEnabled(false)
PACConsentInformation.sharedInstance.consentStatus = .nonPersonalized
let request = DFPRequest()
let extras = GADExtras()
extras.additionalParameters = ["npa": "1"]
request.testDevices = [testDeviceString]
request.register(extras)
}

} else if purchasedUser {

 print("GooglePersonalizedAds changed to: \(userDefault.bool(forKey: "GooglePersonalizedAds"))")
Analytics.setUserProperty("false", forName: AnalyticsUserPropertyAllowAdPersonalizationSignals)
self.view.backgroundColor = UIColor.green
Analytics.setAnalyticsCollectionEnabled(false)PACConsentInformation.sharedInstance.consentStatus = .nonPersonalized

}    
registerSettingsBundle()
}




func registerSettingsBundle(){
        let appDefaults = [String:AnyObject]()
        UserDefaults.standard.register(defaults: appDefaults)
    }

当我运行该应用程序时,我在控制台中打印了许多“GooglePersonalizedAds 更改为:false”,最后应用程序因错误而崩溃。崩溃后我遇到的一个错误是:“NSUserDefaults.standardUserDefaults setObject:personalizedAdStatus forKey:PACUserDefaultsRootKey]”的“线程 1:EXC_BAD_ACCESS (code=2, address=0x7ffeeb86ffd8)”错误

我认为错误来自:“Analytics.setAnalyticsCollectionEnabled(false)PACConsentInformation.sharedInstance.consentStatus = .nonPersonalized”或“PACConsentInformation.sharedInstance.consentStatus = .personalized”这会改变 UserDefaults,因此调用观察者和 defaultsChanged() 等等,创建一个循环。

如何使用开关将 Analytics.setAnalyticsCollectionEnabled(false)PACConsentInformation.sharedInstance.consentStatus 设置为 .personalized 或 .nonPersonalized (标识符:应用程序设置中的 GooglePersonalizedAds,如我的问题中所尝试的那样?

标签: iosswiftadmobpersonalization

解决方案


推荐阅读