31
31
#import " Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h"
32
32
#include " Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h"
33
33
#include " Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h"
34
+ #import " Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.h"
34
35
#import " Crashlytics/Crashlytics/Models/FIRCLSFileManager.h"
35
36
#import " Crashlytics/Crashlytics/Models/FIRCLSSettings.h"
36
37
#import " Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.h"
47
48
#import " Crashlytics/Crashlytics/Controllers/FIRCLSNotificationManager.h"
48
49
#import " Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h"
49
50
#import " Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h"
51
+ #import " Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.h"
50
52
#import " Crashlytics/Crashlytics/Private/FIRCLSExistingReportManager_Private.h"
51
53
#import " Crashlytics/Crashlytics/Private/FIRCLSOnDemandModel_Private.h"
52
54
#import " Crashlytics/Crashlytics/Private/FIRExceptionModel_Private.h"
58
60
#import < GoogleDataTransport/GoogleDataTransport.h>
59
61
60
62
@import FirebaseSessions;
63
+ @import FirebaseRemoteConfigInterop;
64
+ #if SWIFT_PACKAGE
65
+ @import FirebaseCrashlyticsSwift;
66
+ #else // Swift Package Manager
67
+ #import < FirebaseCrashlytics/FirebaseCrashlytics-Swift.h>
68
+ #endif // CocoaPods
61
69
62
70
#if TARGET_OS_IPHONE
63
71
#import < UIKit/UIKit.h>
76
84
@protocol FIRCrashlyticsInstanceProvider <NSObject >
77
85
@end
78
86
79
- @interface FIRCrashlytics () <FIRLibrary, FIRCrashlyticsInstanceProvider, FIRSessionsSubscriber>
87
+ @interface FIRCrashlytics () <FIRLibrary,
88
+ FIRCrashlyticsInstanceProvider,
89
+ FIRSessionsSubscriber,
90
+ FIRRolloutsStateSubscriber>
80
91
81
92
@property (nonatomic ) BOOL didPreviouslyCrash;
82
93
@property (nonatomic , copy ) NSString *googleAppID;
@@ -91,6 +102,8 @@ @interface FIRCrashlytics () <FIRLibrary, FIRCrashlyticsInstanceProvider, FIRSes
91
102
92
103
@property (nonatomic , strong ) FIRCLSAnalyticsManager *analyticsManager;
93
104
105
+ @property (nonatomic , strong ) FIRCLSRemoteConfigManager *remoteConfigManager;
106
+
94
107
// Dependencies common to each of the Controllers
95
108
@property (nonatomic , strong ) FIRCLSManagerData *managerData;
96
109
@@ -104,7 +117,8 @@ - (instancetype)initWithApp:(FIRApp *)app
104
117
appInfo : (NSDictionary *)appInfo
105
118
installations : (FIRInstallations *)installations
106
119
analytics : (id <FIRAnalyticsInterop>)analytics
107
- sessions : (id <FIRSessionsProvider>)sessions {
120
+ sessions : (id <FIRSessionsProvider>)sessions
121
+ remoteConfig : (id <FIRRemoteConfigInterop>)remoteConfig {
108
122
self = [super init ];
109
123
110
124
if (self) {
@@ -189,8 +203,19 @@ - (instancetype)initWithApp:(FIRApp *)app
189
203
}] catch: ^void (NSError *error) {
190
204
FIRCLSErrorLog (@" Crash reporting failed to initialize with error: %@ " , error);
191
205
}];
192
- }
193
206
207
+ // RemoteConfig subscription should be made after session report directory created.
208
+ if (remoteConfig) {
209
+ FIRCLSDebugLog (@" Registering RemoteConfig SDK subscription for rollouts data" );
210
+
211
+ FIRCLSRolloutsPersistenceManager *persistenceManager =
212
+ [[FIRCLSRolloutsPersistenceManager alloc ] initWithFileManager: _fileManager];
213
+ _remoteConfigManager =
214
+ [[FIRCLSRemoteConfigManager alloc ] initWithRemoteConfig: remoteConfig
215
+ persistenceDelegate: persistenceManager];
216
+ [remoteConfig registerRolloutsStateSubscriber: self for: FIRRemoteConfigConstants.FIRNamespaceGoogleMobilePlatform];
217
+ }
218
+ }
194
219
return self;
195
220
}
196
221
@@ -215,6 +240,7 @@ + (void)load {
215
240
216
241
id <FIRAnalyticsInterop> analytics = FIR_COMPONENT (FIRAnalyticsInterop, container);
217
242
id <FIRSessionsProvider> sessions = FIR_COMPONENT (FIRSessionsProvider, container);
243
+ id <FIRRemoteConfigInterop> remoteConfig = FIR_COMPONENT (FIRRemoteConfigInterop, container);
218
244
219
245
FIRInstallations *installations = [FIRInstallations installationsWithApp: container.app];
220
246
@@ -224,7 +250,8 @@ + (void)load {
224
250
appInfo: NSBundle .mainBundle.infoDictionary
225
251
installations: installations
226
252
analytics: analytics
227
- sessions: sessions];
253
+ sessions: sessions
254
+ remoteConfig: remoteConfig];
228
255
};
229
256
230
257
FIRComponent *component =
@@ -377,11 +404,13 @@ - (void)recordError:(NSError *)error {
377
404
}
378
405
379
406
- (void )recordError : (NSError *)error userInfo : (NSDictionary <NSString *, id> *)userInfo {
380
- FIRCLSUserLoggingRecordError (error, userInfo);
407
+ NSString *rolloutsInfoJSON = [_remoteConfigManager getRolloutAssignmentsEncodedJsonString ];
408
+ FIRCLSUserLoggingRecordError (error, userInfo, rolloutsInfoJSON);
381
409
}
382
410
383
411
- (void )recordExceptionModel : (FIRExceptionModel *)exceptionModel {
384
- FIRCLSExceptionRecordModel (exceptionModel);
412
+ NSString *rolloutsInfoJSON = [_remoteConfigManager getRolloutAssignmentsEncodedJsonString ];
413
+ FIRCLSExceptionRecordModel (exceptionModel, rolloutsInfoJSON);
385
414
}
386
415
387
416
- (void )recordOnDemandExceptionModel : (FIRExceptionModel *)exceptionModel {
@@ -407,4 +436,14 @@ - (FIRSessionsSubscriberName)sessionsSubscriberName {
407
436
return FIRSessionsSubscriberNameCrashlytics;
408
437
}
409
438
439
+ #pragma mark - FIRRolloutsStateSubscriber
440
+ - (void )rolloutsStateDidChange : (FIRRolloutsState *_Nonnull)rolloutsState {
441
+ if (!_remoteConfigManager) {
442
+ FIRCLSDebugLog (@" rolloutsStateDidChange gets called without init the rc manager." );
443
+ return ;
444
+ }
445
+ NSString *currentReportID = _managerData.executionIDModel .executionID ;
446
+ [_remoteConfigManager updateRolloutsStateWithRolloutsState: rolloutsState
447
+ reportID: currentReportID];
448
+ }
410
449
@end
0 commit comments