RCNPersonalization.swift 1.6 KB

1234567891011121314151617181920212223242526272829303132
  1. import Foundation
  2. class RCNPersonalization: NSObject {
  3. private var _analytics: FIRAnalyticsInterop?
  4. private var _loggedChoiceIds: NSMutableDictionary?
  5. init(analytics: FIRAnalyticsInterop?) {
  6. self._analytics = analytics
  7. self._loggedChoiceIds = [:]
  8. }
  9. func logArmActive(rcParameter: String, config: [AnyHashable:Any]) {
  10. guard let ids = config[RCNFetchResponseKeyPersonalizationMetadata] as? [String: Any],
  11. let values = config[RCNFetchResponseKeyEntries] as? [String: FIRRemoteConfigValue] else { return }
  12. guard let metadata = ids[rcParameter] as? [String : Any] else { return }
  13. guard let choiceId = metadata[kChoiceId] as? String else { return }
  14. // Listeners like logArmActive() are dispatched to a serial queue, so loggedChoiceIds should
  15. // contain any previously logged RC parameter / choice ID pairs.
  16. if self._loggedChoiceIds?[rcParameter] as? String == choiceId {
  17. return
  18. }
  19. self._loggedChoiceIds?[rcParameter] = choiceId
  20. self._analytics?.logEventWithOrigin(origin: kAnalyticsOriginPersonalization, name: kExternalEvent, parameters: [kExternalRcParameterParam: rcParameter, kExternalArmValueParam: values[rcParameter]!.stringValue, kExternalPersonalizationIdParam: metadata[kPersonalizationId] ?? "" , kExternalArmIndexParam: metadata[kArmIndex] ?? "", kExternalGroupParam: metadata[kGroup] ?? ""])
  21. self._analytics?.logEvent(withOrigin: kAnalyticsOriginPersonalization, name: kInternalEvent, parameters: [kInternalChoiceIdParam : choiceId])
  22. }
  23. }