32
32
#import " FIRInstallationsLogger.h"
33
33
#import " FIRInstallationsSingleOperationPromiseCache.h"
34
34
#import " FIRInstallationsStore.h"
35
- #import " FIRInstallationsStoredIIDCheckin.h"
36
35
#import " FIRSecureStorage.h"
37
36
38
37
#import " FIRInstallationsHTTPError.h"
39
38
#import " FIRInstallationsStoredAuthToken.h"
40
- #import " FIRInstallationsStoredRegistrationError.h"
41
- #import " FIRInstallationsStoredRegistrationParameters.h"
39
+ #import " FIRInstallationsStoredIIDCheckin.h"
42
40
43
41
const NSNotificationName FIRInstallationIDDidChangeNotification =
44
42
@" FIRInstallationIDDidChangeNotification" ;
47
45
48
46
NSTimeInterval const kFIRInstallationsTokenExpirationThreshold = 60 * 60 ; // 1 hour.
49
47
50
- NSTimeInterval const kFIRInstallationsRegistrationErrorTimeout = 24 * 60 * 60 ; // 1 day.
51
-
52
48
@interface FIRInstallationsIDController ()
53
49
@property (nonatomic , readonly ) NSString *appID;
54
50
@property (nonatomic , readonly ) NSString *appName;
@@ -149,22 +145,9 @@ - (instancetype)initWithGoogleAppID:(NSString *)appID
149
145
__PRETTY_FUNCTION__, self.appName );
150
146
151
147
FBLPromise<FIRInstallationsItem *> *installationItemPromise =
152
- [self getStoredInstallation ]
153
- .recover (^id (NSError *error) {
154
- return [self createAndSaveFID ];
155
- })
156
- .then (^id (FIRInstallationsItem *installation) {
157
- // Validate if a previous registration attempt failed with an error requiring Firebase
158
- // configuration changes.
159
- if (installation.registrationStatus == FIRInstallationStatusRegistrationFailed &&
160
- [self isRegistrationErrorWithDateUpToDate: installation.registrationError.date] &&
161
- [self areInstallationRegistrationParametersEqualToCurrent:
162
- installation.registrationError.registrationParameters]) {
163
- return installation.registrationError .APIError ;
164
- }
165
-
166
- return installation;
167
- });
148
+ [self getStoredInstallation ].recover (^id (NSError *error) {
149
+ return [self createAndSaveFID ];
150
+ });
168
151
169
152
// Initiate registration process on success if needed, but return the installation without waiting
170
153
// for it.
@@ -183,7 +166,6 @@ - (instancetype)initWithGoogleAppID:(NSString *)appID
183
166
switch (installation.registrationStatus ) {
184
167
case FIRInstallationStatusUnregistered:
185
168
case FIRInstallationStatusRegistered:
186
- case FIRInstallationStatusRegistrationFailed:
187
169
isValid = YES ;
188
170
break ;
189
171
@@ -249,19 +231,6 @@ - (FIRInstallationsItem *)createInstallationWithFID:(NSString *)FID
249
231
return installation;
250
232
}
251
233
252
- - (BOOL )areInstallationRegistrationParametersEqualToCurrent :
253
- (FIRInstallationsStoredRegistrationParameters *)parameters {
254
- NSString *APIKey = self.APIService .APIKey ;
255
- NSString *projectID = self.APIService .projectID ;
256
- return (parameters.APIKey == APIKey || [parameters.APIKey isEqual: APIKey]) &&
257
- (parameters.projectID == projectID || [parameters.projectID isEqual: projectID]);
258
- }
259
-
260
- - (BOOL )isRegistrationErrorWithDateUpToDate : (NSDate *)errorDate {
261
- return errorDate != nil &&
262
- -[errorDate timeIntervalSinceNow ] <= kFIRInstallationsRegistrationErrorTimeout ;
263
- }
264
-
265
234
#pragma mark - FID registration
266
235
267
236
- (FBLPromise<FIRInstallationsItem *> *)registerInstallationIfNeeded :
@@ -273,14 +242,19 @@ - (BOOL)isRegistrationErrorWithDateUpToDate:(NSDate *)errorDate {
273
242
274
243
case FIRInstallationStatusUnknown:
275
244
case FIRInstallationStatusUnregistered:
276
- case FIRInstallationStatusRegistrationFailed:
277
245
// Registration required. Proceed.
278
246
break ;
279
247
}
280
248
281
249
return [self .APIService registerInstallation: installation]
282
- .recover (^id (NSError *error) {
283
- return [self handleRegistrationRequestError: error installation: installation];
250
+ .catch(^(NSError *_Nonnull error) {
251
+ if ([self doesRegistrationErrorRequireConfigChange: error]) {
252
+ FIRLogError (kFIRLoggerInstallations ,
253
+ kFIRInstallationsMessageCodeInvalidFirebaseConfiguration ,
254
+ @" Firebase Installation registration failed for app with name: %@ , error: "
255
+ @" %@ \n Please make sure you use valid GoogleService-Info.plist" ,
256
+ self.appName , error);
257
+ }
284
258
})
285
259
.then (^id (FIRInstallationsItem *registeredInstallation) {
286
260
// Expected successful result: @[FIRInstallationsItem *registeredInstallation, NSNull]
@@ -299,32 +273,6 @@ - (BOOL)isRegistrationErrorWithDateUpToDate:(NSDate *)errorDate {
299
273
});
300
274
}
301
275
302
- - (FBLPromise<FIRInstallationsItem *> *)handleRegistrationRequestError : (NSError *)error
303
- installation :
304
- (FIRInstallationsItem *)installation {
305
- if ([self doesRegistrationErrorRequireConfigChange: error]) {
306
- FIRLogError (kFIRLoggerInstallations , kFIRInstallationsMessageCodeInvalidFirebaseConfiguration ,
307
- @" Firebase Installation registration failed for app with name: %@ , error: "
308
- @" %@ \n Please make sure you use valid GoogleService-Info.plist" ,
309
- self.appName , error);
310
-
311
- FIRInstallationsItem *failedInstallation = [installation copy ];
312
- [failedInstallation updateWithRegistrationError: error
313
- date: [NSDate date ]
314
- registrationParameters: [self currentRegistrationParameters ]];
315
-
316
- // Save the error and then fail with the API error.
317
- return
318
- [self .installationsStore saveInstallation: failedInstallation].then (^NSError *(id result) {
319
- return error;
320
- });
321
- }
322
-
323
- FBLPromise *errorPromise = [FBLPromise pendingPromise ];
324
- [errorPromise reject: error];
325
- return errorPromise;
326
- }
327
-
328
276
- (BOOL )doesRegistrationErrorRequireConfigChange : (NSError *)error {
329
277
FIRInstallationsHTTPError *HTTPError = (FIRInstallationsHTTPError *)error;
330
278
if (![HTTPError isKindOfClass: [FIRInstallationsHTTPError class ]]) {
@@ -344,12 +292,6 @@ - (BOOL)doesRegistrationErrorRequireConfigChange:(NSError *)error {
344
292
}
345
293
}
346
294
347
- - (FIRInstallationsStoredRegistrationParameters *)currentRegistrationParameters {
348
- return [[FIRInstallationsStoredRegistrationParameters alloc ]
349
- initWithAPIKey: self .APIService.APIKey
350
- projectID: self .APIService.projectID];
351
- }
352
-
353
295
#pragma mark - Auth Token
354
296
355
297
- (FBLPromise<FIRInstallationsItem *> *)getAuthTokenForcingRefresh : (BOOL )forceRefresh {
@@ -455,7 +397,6 @@ - (id)regenerateFIDOnRefreshTokenErrorIfNeeded:(NSError *)error {
455
397
switch (installation.registrationStatus ) {
456
398
case FIRInstallationStatusUnknown:
457
399
case FIRInstallationStatusUnregistered:
458
- case FIRInstallationStatusRegistrationFailed:
459
400
// The installation is not registered, so it is safe to be deleted as is, so return early.
460
401
return [FBLPromise resolvedWith: installation];
461
402
break ;
0 commit comments