Используя 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 в настройках приложения, как попытки в моем вопросе?