RCNConfigExperiment.swift 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import Foundation
  2. import FirebaseABTesting
  3. class RCNConfigExperiment {
  4. var experimentPayloads: [Data] = []
  5. var experimentMetadata: [String: Any] = [:]
  6. var activeExperimentPayloads: [Data] = []
  7. var DBManager: RCNConfigDBManager?
  8. var experimentController: FIRExperimentController
  9. var experimentStartTimeDateFormatter: DateFormatter
  10. init(DBManager: RCNConfigDBManager, experimentController: FIRExperimentController) {
  11. self.experimentPayloads = []
  12. self.experimentMetadata = [:]
  13. self.activeExperimentPayloads = []
  14. self.experimentStartTimeDateFormatter = DateFormatter()
  15. self.experimentStartTimeDateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
  16. self.experimentStartTimeDateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
  17. // Locale needs to be hardcoded. See
  18. // https://developer.apple.com/library/ios/#qa/qa1480/_index.html for more details.
  19. self.experimentStartTimeDateFormatter.locale = Locale(identifier: "en_US_POSIX")
  20. self.experimentStartTimeDateFormatter.timeZone = TimeZone(abbreviation: "UTC")
  21. self.DBManager = DBManager
  22. self.experimentController = experimentController
  23. loadExperimentFromTable()
  24. }
  25. func loadExperimentFromTable() {
  26. if DBManager == nil {
  27. return
  28. }
  29. _DBManager?.loadExperimentWithCompletionHandler(completionHandler: {
  30. (success, result) in
  31. if result[RCNExperimentTableKeyPayload] != nil {
  32. for experiment in result[RCNExperimentTableKeyPayload] as! [NSData] {
  33. var experimentPayloadJSON = [:] as NSDictionary
  34. do {
  35. let experimentPayloadJSONData = try JSONSerialization.jsonObject(with: experiment as Data, options: .allowFragments)
  36. if experimentPayloadJSONData == nil {
  37. FIRLogWarning(RCNRemoteConfigQueueLabel, "I-RCN000031",
  38. "Experiment payload could not be parsed as JSON.")
  39. }
  40. } catch let error {
  41. FIRLogWarning(RCNRemoteConfigQueueLabel, "I-RCN000031",
  42. "Experiment payload could not be parsed as JSON.")
  43. }
  44. }
  45. }
  46. if (result[RCNExperimentTableKeyMetadata] != nil) {
  47. self.experimentMetadata = result[RCNExperimentTableKeyMetadata] as! [String : Any]
  48. }
  49. /// Load activated experiments payload and metadata.
  50. if (result[RCNExperimentTableKeyActivePayload] != nil) {
  51. self.activeExperimentPayloads = []
  52. for experiment in result[RCNExperimentTableKeyActivePayload] as! [NSData] {
  53. }
  54. }
  55. })
  56. }
  57. func updateExperimentsWithResponse(response: [[String: Any]]){
  58. }
  59. func updateExperimentsWithHandler(handler: @escaping ((Error?) -> Void)) {
  60. }
  61. func latestStartTimeWithExistingLastStartTime(existingLastStartTime: TimeInterval) -> TimeInterval {
  62. return 0.0
  63. }
  64. }