aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Chen Liang <chliang@google.com>2018-06-29 11:39:45 -0700
committerGravatar GitHub <noreply@github.com>2018-06-29 11:39:45 -0700
commit5e1472b49283e8c2374529ce89edb65ee0e8ea0b (patch)
tree571a2b4132f2e4c92a5081d4c7f6cb606d6296c5
parent7c34f464d8b1d530bba08a3adc5191112adb4ff1 (diff)
Fix the race condition of global data flag and fcm auto init enabled flag (#1466)
-rw-r--r--Example/Messaging/Tests/FIRMessagingTest.m15
-rw-r--r--Firebase/Messaging/FIRMessaging+FIRApp.m22
-rw-r--r--Firebase/Messaging/FIRMessaging.m8
-rw-r--r--Firebase/Messaging/FIRMessaging_Private.h3
4 files changed, 13 insertions, 35 deletions
diff --git a/Example/Messaging/Tests/FIRMessagingTest.m b/Example/Messaging/Tests/FIRMessagingTest.m
index 61ff136..92cf0f5 100644
--- a/Example/Messaging/Tests/FIRMessagingTest.m
+++ b/Example/Messaging/Tests/FIRMessagingTest.m
@@ -17,6 +17,8 @@
#import <XCTest/XCTest.h>
#import <OCMock/OCMock.h>
+
+#import <FirebaseCore/FIRAppInternal.h>
#import <FirebaseInstanceID/FirebaseInstanceID.h>
#import "FIRMessaging.h"
@@ -44,6 +46,7 @@ extern NSString *const kFIRMessagingFCMTokenFetchAPNSOption;
@property(nonatomic, readonly, strong) FIRMessaging *messaging;
@property(nonatomic, readwrite, strong) id mockMessaging;
@property(nonatomic, readwrite, strong) id mockInstanceID;
+@property(nonatomic, readwrite, strong) id mockFirebaseApp;
@end
@@ -51,6 +54,9 @@ extern NSString *const kFIRMessagingFCMTokenFetchAPNSOption;
- (void)setUp {
[super setUp];
+ _mockFirebaseApp = OCMClassMock([FIRApp class]);
+ OCMStub([_mockFirebaseApp defaultApp]).andReturn(_mockFirebaseApp);
+
_messaging = [[FIRMessaging alloc] initWithInstanceID:[FIRInstanceID instanceID]
userDefaults:[NSUserDefaults standardUserDefaults]];
_mockMessaging = OCMPartialMock(self.messaging);
@@ -63,6 +69,7 @@ extern NSString *const kFIRMessagingFCMTokenFetchAPNSOption;
- (void)tearDown {
[_mockMessaging stopMocking];
[_mockInstanceID stopMocking];
+ [_mockFirebaseApp stopMocking];
[super tearDown];
}
@@ -76,7 +83,7 @@ extern NSString *const kFIRMessagingFCMTokenFetchAPNSOption;
}
- (void)testAutoInitEnableFlagOverrideGlobalTrue {
- OCMStub([self.mockMessaging isGlobalAutomaticDataCollectionEnabled]).andReturn(YES);
+ OCMStub([_mockFirebaseApp isAutomaticDataCollectionEnabled]).andReturn(YES);
id bundleMock = OCMPartialMock([NSBundle mainBundle]);
OCMStub([bundleMock objectForInfoDictionaryKey:kFIRMessagingPlistAutoInitEnabled]).andReturn(nil);
XCTAssertTrue(self.messaging.isAutoInitEnabled);
@@ -87,7 +94,7 @@ extern NSString *const kFIRMessagingFCMTokenFetchAPNSOption;
}
- (void)testAutoInitEnableFlagOverrideGlobalFalse {
- OCMStub([self.mockMessaging isGlobalAutomaticDataCollectionEnabled]).andReturn(YES);
+ OCMStub([_mockFirebaseApp isAutomaticDataCollectionEnabled]).andReturn(YES);
id bundleMock = OCMPartialMock([NSBundle mainBundle]);
OCMStub([bundleMock objectForInfoDictionaryKey:kFIRMessagingPlistAutoInitEnabled]).andReturn(nil);
XCTAssertTrue(self.messaging.isAutoInitEnabled);
@@ -98,7 +105,7 @@ extern NSString *const kFIRMessagingFCMTokenFetchAPNSOption;
}
- (void)testAutoInitEnableGlobalDefaultTrue {
- OCMStub([self.mockMessaging isGlobalAutomaticDataCollectionEnabled]).andReturn(YES);
+ OCMStub([_mockFirebaseApp isAutomaticDataCollectionEnabled]).andReturn(YES);
id bundleMock = OCMPartialMock([NSBundle mainBundle]);
OCMStub([bundleMock objectForInfoDictionaryKey:kFIRMessagingPlistAutoInitEnabled]).andReturn(nil);
@@ -107,7 +114,7 @@ extern NSString *const kFIRMessagingFCMTokenFetchAPNSOption;
}
- (void)testAutoInitEnableGlobalDefaultFalse {
- OCMStub([self.mockMessaging isGlobalAutomaticDataCollectionEnabled]).andReturn(NO);
+ OCMStub([_mockFirebaseApp isAutomaticDataCollectionEnabled]).andReturn(NO);
id bundleMock = OCMPartialMock([NSBundle mainBundle]);
OCMStub([bundleMock objectForInfoDictionaryKey:kFIRMessagingPlistAutoInitEnabled]).andReturn(nil);
diff --git a/Firebase/Messaging/FIRMessaging+FIRApp.m b/Firebase/Messaging/FIRMessaging+FIRApp.m
index d48a3b4..dda360c 100644
--- a/Firebase/Messaging/FIRMessaging+FIRApp.m
+++ b/Firebase/Messaging/FIRMessaging+FIRApp.m
@@ -26,12 +26,6 @@
#import "FIRMessagingVersionUtilities.h"
#import "FIRMessaging_Private.h"
-@interface FIRMessaging ()
-
-@property(nonatomic, readwrite, strong) NSString *fcmSenderID;
-
-@end
-
@implementation FIRMessaging (FIRApp)
+ (void)load {
@@ -58,22 +52,6 @@
}
- (void)configureMessaging:(FIRApp *)app {
- FIROptions *options = app.options;
- NSError *error;
- if (!options.GCMSenderID.length) {
- error =
- [FIRApp errorForSubspecConfigurationFailureWithDomain:kFirebaseCloudMessagingErrorDomain
- errorCode:FIRErrorCodeCloudMessagingFailed
- service:kFIRServiceMessaging
- reason:@"Google Sender ID must not be nil"
- @" or empty."];
- [self exitApp:app withError:error];
- return;
- }
-
- self.fcmSenderID = [options.GCMSenderID copy];
- self.globalAutomaticDataCollectionEnabled = [app isAutomaticDataCollectionEnabled];
-
// Swizzle remote-notification-related methods (app delegate and UNUserNotificationCenter)
if ([FIRMessagingRemoteNotificationsProxy canSwizzleMethods]) {
NSString *docsURLString = @"https://firebase.google.com/docs/cloud-messaging/ios/client"
diff --git a/Firebase/Messaging/FIRMessaging.m b/Firebase/Messaging/FIRMessaging.m
index fa4bdbc..1152032 100644
--- a/Firebase/Messaging/FIRMessaging.m
+++ b/Firebase/Messaging/FIRMessaging.m
@@ -36,6 +36,7 @@
#import "FIRMessagingUtilities.h"
#import "FIRMessagingVersionUtilities.h"
+#import <FirebaseCore/FIRAppInternal.h>
#import <FirebaseCore/FIRReachabilityChecker.h>
#import <FirebaseInstanceID/FirebaseInstanceID.h>
@@ -127,7 +128,6 @@ NSString *const kFIRMessagingPlistAutoInitEnabled =
FIRReachabilityDelegate>
// FIRApp properties
-@property(nonatomic, readwrite, copy) NSString *fcmSenderID;
@property(nonatomic, readwrite, strong) NSData *apnsTokenData;
@property(nonatomic, readwrite, strong) NSString *defaultFcmToken;
@@ -173,10 +173,6 @@ NSString *const kFIRMessagingPlistAutoInitEnabled =
_loggedMessageIDs = [NSMutableSet set];
_instanceID = instanceID;
_messagingUserDefaults = defaults;
-
- // TODO: Remove this once the race condition with FIRApp configuring and InstanceID
- // is fixed. This must be fixed before Core's flag becomes public.
- _globalAutomaticDataCollectionEnabled = YES;
}
return self;
}
@@ -479,7 +475,7 @@ NSString *const kFIRMessagingPlistAutoInitEnabled =
}
// If none of above exists, we default to the global switch that comes from FIRApp.
- return self.isGlobalAutomaticDataCollectionEnabled;
+ return [[FIRApp defaultApp] isAutomaticDataCollectionEnabled];
}
- (void)setAutoInitEnabled:(BOOL)autoInitEnabled {
diff --git a/Firebase/Messaging/FIRMessaging_Private.h b/Firebase/Messaging/FIRMessaging_Private.h
index 6bac99d..143cc9f 100644
--- a/Firebase/Messaging/FIRMessaging_Private.h
+++ b/Firebase/Messaging/FIRMessaging_Private.h
@@ -38,9 +38,6 @@ FOUNDATION_EXPORT NSString *const kFIRMessagingUserDefaultsKeyAutoInitEnabled;
#pragma mark - Private API
-// The data collection flag from Core.
-@property(nonatomic, readwrite, getter=isGlobalAutomaticDataCollectionEnabled) BOOL globalAutomaticDataCollectionEnabled;
-
- (NSString *)defaultFcmToken;
- (FIRMessagingClient *)client;
- (FIRMessagingPubSub *)pubsub;