@@ -32,7 +32,9 @@ @interface RCNConfigExperiment ()
32
32
NSMutableArray <NSData *> *experimentPayloads; // /< Experiment payloads.
33
33
@property (nonatomic , strong )
34
34
NSMutableDictionary <NSString *, id> *experimentMetadata; // /< Experiment metadata
35
- @property (nonatomic , strong ) RCNConfigDBManager *DBManager; // /< Database Manager.
35
+ @property (nonatomic , strong )
36
+ NSMutableArray <NSData *> *activeExperimentPayloads; // /< Activated experiment payloads.
37
+ @property (nonatomic , strong ) RCNConfigDBManager *DBManager; // /< Database Manager.
36
38
@property (nonatomic , strong ) FIRExperimentController *experimentController;
37
39
@property (nonatomic , strong ) NSDateFormatter *experimentStartTimeDateFormatter;
38
40
@end
@@ -45,6 +47,7 @@ - (instancetype)initWithDBManager:(RCNConfigDBManager *)DBManager
45
47
if (self) {
46
48
_experimentPayloads = [[NSMutableArray alloc ] init ];
47
49
_experimentMetadata = [[NSMutableDictionary alloc ] init ];
50
+ _activeExperimentPayloads = [[NSMutableArray alloc ] init ];
48
51
_experimentStartTimeDateFormatter = [[NSDateFormatter alloc ] init ];
49
52
[_experimentStartTimeDateFormatter setDateFormat: @" yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" ];
50
53
[_experimentStartTimeDateFormatter setTimeZone: [NSTimeZone timeZoneForSecondsFromGMT: 0 ]];
@@ -89,6 +92,23 @@ - (void)loadExperimentFromTable {
89
92
if (result[@RCNExperimentTableKeyMetadata]) {
90
93
strongSelf->_experimentMetadata = [result[@RCNExperimentTableKeyMetadata] mutableCopy ];
91
94
}
95
+
96
+ // / Load activated experiments payload and metadata.
97
+ if (result[@RCNExperimentTableKeyActivePayload]) {
98
+ [strongSelf->_activeExperimentPayloads removeAllObjects ];
99
+ for (NSData *experiment in result[@RCNExperimentTableKeyActivePayload]) {
100
+ NSError *error;
101
+ id experimentPayloadJSON = [NSJSONSerialization JSONObjectWithData: experiment
102
+ options: kNilOptions
103
+ error: &error];
104
+ if (!experimentPayloadJSON || error) {
105
+ FIRLogWarning (kFIRLoggerRemoteConfig , @" I-RCN000031" ,
106
+ @" Activated experiment payload could not be parsed as JSON." );
107
+ } else {
108
+ [strongSelf->_activeExperimentPayloads addObject: experiment];
109
+ }
110
+ }
111
+ }
92
112
};
93
113
[_DBManager loadExperimentWithCompletionHandler: completionHandler];
94
114
}
@@ -131,6 +151,9 @@ - (void)updateExperimentsWithHandler:(void (^)(NSError *_Nullable))handler {
131
151
lastStartTime: lastStartTime
132
152
payloads: _experimentPayloads
133
153
completionHandler: handler];
154
+
155
+ // / Update activated experiments payload and metadata in DB.
156
+ [self updateActiveExperimentsInDB ];
134
157
}
135
158
136
159
- (void )updateExperimentStartTime {
@@ -157,6 +180,18 @@ - (void)updateExperimentStartTime {
157
180
completionHandler: nil ];
158
181
}
159
182
183
+ - (void )updateActiveExperimentsInDB {
184
+ // / Put current fetched experiment payloads into activated experiment DB.
185
+ [_activeExperimentPayloads removeAllObjects ];
186
+ [_DBManager deleteExperimentTableForKey: @RCNExperimentTableKeyActivePayload];
187
+ for (NSData *experiment in _experimentPayloads) {
188
+ [_activeExperimentPayloads addObject: experiment];
189
+ [_DBManager insertExperimentTableWithKey: @RCNExperimentTableKeyActivePayload
190
+ value: experiment
191
+ completionHandler: nil ];
192
+ }
193
+ }
194
+
160
195
- (NSTimeInterval )latestStartTimeWithExistingLastStartTime : (NSTimeInterval )existingLastStartTime {
161
196
return [self .experimentController
162
197
latestExperimentStartTimestampBetweenTimestamp: existingLastStartTime
0 commit comments