Как разрешить пользователям изменять свое согласие на рекламу (персонализированное или нет) с помощью переключателя в настройках приложения iOS? - PullRequest
0 голосов
/ 02 июля 2019

Используя AdMob и Firebase Analytics, я пытаюсь разрешить пользователям изменять свой тип согласия AdMob в настройках приложения, позволяя им включать / выключать персонализированные объявления (если пользователи включат переключатель «Вкл.», Они будут персонализированыобъявления, и если они отключат его, они получат неперсонализированные объявления).Я написал код, но он дает мне ошибки, и он также зацикливается.Каков правильный способ / код для этого?

Вот что я сейчас делаю: 1- Добавлен элемент тумблера в Settings.bundle> Root.plist с идентификатором "GooglePersonalizedAds", чтобы позволить пользователю включитьвключите / выключите в настройках приложения

2 - добавлены "FIREBASE_ANALYTICS_COLLECTION_ENABLED" и "GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS" в качестве "логических" свойств в "info.plist" * * * * моего приложения "* * *".1006 * 3- Чтобы инициализировать FireBase, в AppDelegate я добавил:

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

4- В viewDidLoad () ViewController.swift я добавил:

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», и, наконец, приложение вылетает с ошибкой.Одна ошибка, которую я получил после сбоя, была следующей: «Поток 1: EXC_BAD_ACCESS (code = 2, address = 0x7ffeeb86ffd8)» ошибка для «NSUserDefaults.standardUserDefaults setObject: personalizedAdStatus forKey: PACUserDefaultsRootKey]

: "Analytics.setAnalyticsCollectionEnabled (false) PACConsentInformation.sharedInstance.consentStatus = .nonPersonalized" или "PACConsentInformation.sharedInstance.consentStatus = .personalized", которые изменяют UserDefaults, и, следовательно, вызывают метод наблюдателя * и значения по умолчанию.1018 *

Как я могу установить Analytics.setAnalyticsCollectionEnabled (false) PACConsentInformation.sharedInstance.consentStatus в .personalized или .nonPersonalized с помощью переключателя (идентификатор: GooglePersonalizedAds в настройках приложения, как попытки в моем вопросе?

...