Skip to content

Commit 21b4949

Browse files
Remove instanceID dependency from Messaging (#6103)
1 parent 54b137d commit 21b4949

File tree

60 files changed

+5019
-546
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+5019
-546
lines changed

FirebaseMessaging.podspec

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ device, and it is completely free.
3939
'GoogleUtilities/Reachability/Private/*.h',
4040
'GoogleUtilities/UserDefaults/Private/*.h',
4141
]
42-
s.requires_arc = base_dir + 'Sources/*.m'
42+
s.requires_arc = [
43+
base_dir + 'Sources/*.m',
44+
base_dir + 'Sources/Token/*.m'
45+
]
4346
s.public_header_files = base_dir + 'Sources/Public/*.h'
4447
s.library = 'sqlite3'
4548
s.pod_target_xcconfig = {
@@ -55,7 +58,7 @@ device, and it is completely free.
5558
s.osx.framework = 'SystemConfiguration'
5659
s.weak_framework = 'UserNotifications'
5760
s.dependency 'FirebaseCore', '~> 6.8'
58-
s.dependency 'FirebaseInstanceID', '~> 4.3'
61+
s.dependency 'FirebaseInstallations', '~> 1.5'
5962
s.dependency 'GoogleUtilities/AppDelegateSwizzler', '~> 6.7'
6063
s.dependency 'GoogleUtilities/Reachability', '~> 6.7'
6164
s.dependency 'GoogleUtilities/Environment', '~> 6.7'

FirebaseMessaging/Apps/Sample/Sample/SceneDelegate.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import Combine
1616
import UIKit
1717
import SwiftUI
18-
import FirebaseInstanceID
1918
import FirebaseMessaging
2019
import FirebaseInstallations
2120

@@ -67,8 +66,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate, MessagingDelegate {
6766
return
6867
}
6968
self.identity.instanceID = fid
70-
})
7169
})
70+
})
7271
.store(in: &cancellables)
7372
}
7473

FirebaseMessaging/Apps/Sample/iOS/NotificationsController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class NotificationsController: NSObject {
5454
completionHandler: { granted, error in
5555
NotificationCenter.default
5656
.post(name: UserNotificationsChangedNotification, object: nil)
57-
})
57+
})
5858
} else if #available(iOS 8.0, *) {
5959
let userNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound],
6060
categories: [])

FirebaseMessaging/Sources/FIRMessaging.m

Lines changed: 195 additions & 260 deletions
Large diffs are not rendered by default.

FirebaseMessaging/Sources/FIRMessagingClient.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
@class FIRMessagingConnection;
2323
@class FIRMessagingDataMessageManager;
2424
@class FIRMessagingRmqManager;
25+
@class FIRMessagingTokenManager;
2526

2627
/**
2728
* Callback to handle MCS connection requests.
@@ -45,11 +46,13 @@ typedef void (^FIRMessagingConnectCompletionHandler)(NSError *error);
4546

4647
@property(nonatomic, readonly, strong) FIRMessagingConnection *connection;
4748
@property(nonatomic, readwrite, weak) FIRMessagingDataMessageManager *dataMessageManager;
49+
@property(nonatomic, readonly, strong) FIRMessagingTokenManager *tokenManager;
4850

4951
// Designated initializer
5052
- (instancetype)initWithDelegate:(id<FIRMessagingClientDelegate>)delegate
5153
reachability:(GULReachabilityChecker *)reachability
52-
rmq2Manager:(FIRMessagingRmqManager *)rmq2Manager;
54+
rmq2Manager:(FIRMessagingRmqManager *)rmq2Manager
55+
tokenManager:(FIRMessagingTokenManager *)tokenManager;
5356

5457
- (void)teardown;
5558

FirebaseMessaging/Sources/FIRMessagingClient.m

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
#import "FirebaseMessaging/Sources/Protos/GtalkCore.pbobjc.h"
2020

21-
#import <FirebaseInstanceID/FIRInstanceID_Private.h>
2221
#import <FirebaseMessaging/FIRMessaging.h>
2322
#import "GoogleUtilities/Reachability/Private/GULReachabilityChecker.h"
2423

@@ -32,6 +31,7 @@
3231
#import "FirebaseMessaging/Sources/FIRMessagingTopicsCommon.h"
3332
#import "FirebaseMessaging/Sources/FIRMessagingUtilities.h"
3433
#import "FirebaseMessaging/Sources/NSError+FIRMessaging.h"
34+
#import "FirebaseMessaging/Sources/Token/FIRMessagingTokenManager.h"
3535

3636
static const NSTimeInterval kConnectTimeoutInterval = 40.0;
3737
static const NSTimeInterval kReconnectDelayInSeconds = 2 * 60; // 2 minutes
@@ -85,6 +85,7 @@ @interface FIRMessagingClient () <FIRMessagingConnectionDelegate>
8585
// FIRMessagingService owns these instances
8686
@property(nonatomic, readwrite, weak) FIRMessagingRmqManager *rmq2Manager;
8787
@property(nonatomic, readwrite, weak) GULReachabilityChecker *reachability;
88+
@property(nonatomic, readwrite, strong) FIRMessagingTokenManager *tokenManager;
8889

8990
@property(nonatomic, readwrite, assign) int64_t lastConnectedTimestamp;
9091
@property(nonatomic, readwrite, assign) int64_t lastDisconnectedTimestamp;
@@ -114,12 +115,14 @@ - (instancetype)init {
114115

115116
- (instancetype)initWithDelegate:(id<FIRMessagingClientDelegate>)delegate
116117
reachability:(GULReachabilityChecker *)reachability
117-
rmq2Manager:(FIRMessagingRmqManager *)rmq2Manager {
118+
rmq2Manager:(FIRMessagingRmqManager *)rmq2Manager
119+
tokenManager:(FIRMessagingTokenManager *)tokenManager {
118120
self = [super init];
119121
if (self) {
120122
_reachability = reachability;
121123
_clientDelegate = delegate;
122124
_rmq2Manager = rmq2Manager;
125+
_tokenManager = tokenManager;
123126
_registrar = [[FIRMessagingPubSubRegistrar alloc] init];
124127
_connectionTimeoutInterval = kConnectTimeoutInterval;
125128
// Listen for checkin fetch notifications, as connecting to MCS may have failed due to
@@ -188,9 +191,9 @@ - (void)updateSubscriptionWithToken:(NSString *)token
188191
}
189192
};
190193

191-
if ([[FIRInstanceID instanceID] tryToLoadValidCheckinInfo]) {
194+
if ([_tokenManager hasValidCheckinInfo]) {
192195
[self.registrar updateSubscriptionToTopic:topic
193-
withToken:token
196+
withTokenManager:_tokenManager
194197
options:options
195198
shouldDelete:shouldDelete
196199
handler:completion];
@@ -289,7 +292,7 @@ - (void)connect {
289292
}
290293

291294
self.stayConnected = YES;
292-
if (![[FIRInstanceID instanceID] tryToLoadValidCheckinInfo]) {
295+
if (![_tokenManager hasValidCheckinInfo]) {
293296
// Checkin info is not available. This may be due to the checkin still being fetched.
294297
NSString *failureReason = @"Failed to connect to MCS. No deviceID and secret found.";
295298
if (self.connectHandler) {
@@ -378,8 +381,8 @@ - (void)didLoginWithConnection:(FIRMessagingConnection *)fcmConnection {
378381
self.connectRetryCount = 0;
379382
self.lastConnectedTimestamp = FIRMessagingCurrentTimestampInMilliseconds();
380383

381-
[self.dataMessageManager setDeviceAuthID:[FIRInstanceID instanceID].deviceAuthID
382-
secretToken:[FIRInstanceID instanceID].secretToken];
384+
[self.dataMessageManager setDeviceAuthID:_tokenManager.deviceAuthID
385+
secretToken:_tokenManager.secretToken];
383386
if (self.connectHandler) {
384387
self.connectHandler(nil);
385388
// notified the third party app with the registrationId.
@@ -429,14 +432,13 @@ - (void)setupConnection {
429432
[self.connection signOut];
430433
self.connection.delegate = nil;
431434
}
432-
self.connection =
433-
[[FIRMessagingConnection alloc] initWithAuthID:[FIRInstanceID instanceID].deviceAuthID
434-
token:[FIRInstanceID instanceID].secretToken
435-
host:host
436-
port:port
437-
runLoop:[NSRunLoop mainRunLoop]
438-
rmq2Manager:self.rmq2Manager
439-
fcmManager:self.dataMessageManager];
435+
self.connection = [[FIRMessagingConnection alloc] initWithAuthID:_tokenManager.deviceAuthID
436+
token:_tokenManager.secretToken
437+
host:host
438+
port:port
439+
runLoop:[NSRunLoop mainRunLoop]
440+
rmq2Manager:self.rmq2Manager
441+
fcmManager:self.dataMessageManager];
440442
self.connection.delegate = self;
441443
}
442444

@@ -449,8 +451,8 @@ - (void)tryToConnect {
449451
[NSObject cancelPreviousPerformRequestsWithTarget:self
450452
selector:@selector(tryToConnect)
451453
object:nil];
452-
NSString *deviceAuthID = [FIRInstanceID instanceID].deviceAuthID;
453-
NSString *secretToken = [FIRInstanceID instanceID].secretToken;
454+
NSString *deviceAuthID = _tokenManager.deviceAuthID;
455+
NSString *secretToken = _tokenManager.secretToken;
454456
if (deviceAuthID.length == 0 || secretToken.length == 0 || !self.connection) {
455457
FIRMessagingLoggerWarn(
456458
kFIRMessagingMessageCodeClientInvalidState,

FirebaseMessaging/Sources/FIRMMessageCode.h renamed to FirebaseMessaging/Sources/FIRMessagingCode.h

Lines changed: 121 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ typedef NS_ENUM(NSInteger, FIRMessagingMessageCode) {
3636
kFIRMessagingMessageCodeMessaging012 = 2012, // I-FCM002012
3737
kFIRMessagingMessageCodeMessaging013 = 2013, // I-FCM002013
3838
kFIRMessagingMessageCodeMessaging014 = 2014, // I-FCM002014
39-
kFIRMessagingMessageCodeMessaging015 = 2015, // I-FCM002015
40-
kFIRMessagingMessageCodeMessaging016 = 2016, // I-FCM002016 - no longer used
41-
kFIRMessagingMessageCodeMessaging017 = 2017, // I-FCM002017
42-
kFIRMessagingMessageCodeMessaging018 = 2018, // I-FCM002018
39+
kFIRMessagingMessageCodeMessaging015 = 2015,
40+
kFIRMessagingMessageCodeMessaging016 = 2016, // I-FCM002016 - no longer used
41+
kFIRMessagingMessageCodeMessaging017 = 2017, // I-FCM002017
42+
kFIRMessagingMessageCodeMessaging018 = 2018, // I-FCM002018
4343
kFIRMessagingMessageCodeRemoteMessageDelegateMethodNotImplemented = 2019, // I-FCM002019
4444
kFIRMessagingMessageCodeSenderIDNotSuppliedForTokenFetch = 2020, // I-FCM002020
4545
kFIRMessagingMessageCodeSenderIDNotSuppliedForTokenDelete = 2021, // I-FCM002021
@@ -206,4 +206,121 @@ typedef NS_ENUM(NSInteger, FIRMessagingMessageCode) {
206206
// FIRMessagingCodedInputStream.m
207207
kFIRMessagingCodeInputStreamInvalidParameters = 21000,
208208

209+
kFIRMessagingMessageCodeFIRApp002 = 22002,
210+
kFIRMessagingMessageCodeInternal001 = 22001,
211+
kFIRMessagingMessageCodeInternal002 = 22002,
212+
// FIRMessaging.m
213+
// DO NOT USE 4000.
214+
kFIRMessagingMessageCodeInstanceID000 = 23000,
215+
kFIRMessagingMessageCodeInstanceID001 = 23001,
216+
kFIRMessagingMessageCodeInstanceID002 = 23002,
217+
kFIRMessagingMessageCodeInstanceID003 = 23003,
218+
kFIRMessagingMessageCodeInstanceID004 = 23004,
219+
kFIRMessagingMessageCodeInstanceID005 = 23005,
220+
kFIRMessagingMessageCodeInstanceID006 = 23006,
221+
kFIRMessagingMessageCodeInstanceID007 = 23007,
222+
kFIRMessagingMessageCodeInstanceID008 = 23008,
223+
kFIRMessagingMessageCodeInstanceID009 = 23009,
224+
kFIRMessagingMessageCodeInstanceID010 = 23010,
225+
kFIRMessagingMessageCodeInstanceID011 = 23011,
226+
kFIRMessagingMessageCodeInstanceID012 = 23012,
227+
kFIRMessagingMessageCodeInstanceID013 = 23013,
228+
kFIRMessagingMessageCodeInstanceID014 = 23014,
229+
kFIRMessagingMessageCodeInstanceID015 = 23015,
230+
kFIRMessagingMessageCodeRefetchingTokenForAPNS = 23016,
231+
kFIRMessagingMessageCodeInstanceID017 = 23017,
232+
kFIRMessagingMessageCodeInstanceID018 = 23018,
233+
// FIRMessagingAuthService.m
234+
kFIRMessagingMessageCodeAuthService000 = 25000,
235+
kFIRMessagingMessageCodeAuthService001 = 25001,
236+
kFIRMessagingMessageCodeAuthService002 = 25002,
237+
kFIRMessagingMessageCodeAuthService003 = 25003,
238+
kFIRMessagingMessageCodeAuthService004 = 25004,
239+
kFIRMessagingMessageCodeAuthServiceCheckinInProgress = 25004,
240+
241+
// FIRMessagingBackupExcludedPlist.m
242+
// Do NOT USE 6003
243+
kFIRMessagingMessageCodeBackupExcludedPlist000 = 26000,
244+
kFIRMessagingMessageCodeBackupExcludedPlist001 = 26001,
245+
kFIRMessagingMessageCodeBackupExcludedPlist002 = 26002,
246+
// FIRMessagingCheckinService.m
247+
kFIRMessagingMessageCodeService000 = 27000,
248+
kFIRMessagingMessageCodeService001 = 27001,
249+
kFIRMessagingMessageCodeService002 = 27002,
250+
kFIRMessagingMessageCodeService003 = 27003,
251+
kFIRMessagingMessageCodeService004 = 27004,
252+
kFIRMessagingMessageCodeService005 = 27005,
253+
kFIRMessagingMessageCodeService006 = 27006,
254+
kFIRMessagingInvalidSettingResponse = 27008,
255+
// FIRMessagingCheckinStore.m
256+
// DO NOT USE 8002, 8004 - 8008
257+
kFIRMessagingMessageCodeCheckinStore000 = 28000,
258+
kFIRMessagingMessageCodeCheckinStore001 = 28001,
259+
kFIRMessagingMessageCodeCheckinStore003 = 28003,
260+
kFIRMessagingMessageCodeCheckinStoreCheckinPlistDeleted = 28009,
261+
kFIRMessagingMessageCodeCheckinStoreCheckinPlistSaved = 28010,
262+
263+
// DO NOT USE 9000 - 9006
264+
265+
// DO NOT USE 10000 - 10009
266+
267+
// DO NOT USE 11000 - 11002
268+
269+
// DO NOT USE 12000 - 12014
270+
271+
// DO NOT USE 13004, 13005, 13007, 13008, 13010, 13011, 13013, 13014
272+
kFIRMessagingMessageCodeStore000 = 33000,
273+
kFIRMessagingMessageCodeStore002 = 33002,
274+
kFIRMessagingMessageCodeStore003 = 33003,
275+
kFIRMessagingMessageCodeStore006 = 33006,
276+
kFIRMessagingMessageCodeStore009 = 33009,
277+
kFIRMessagingMessageCodeStore012 = 33012,
278+
// FIRMessagingTokenManager.m
279+
// DO NOT USE 14002, 14005
280+
kFIRMessagingMessageCodeTokenManager000 = 34000,
281+
kFIRMessagingMessageCodeTokenManager001 = 34001,
282+
kFIRMessagingMessageCodeTokenManager003 = 34003,
283+
kFIRMessagingMessageCodeTokenManager004 = 34004,
284+
kFIRMessagingMessageCodeTokenManagerErrorDeletingFCMTokensOnAppReset = 34006,
285+
kFIRMessagingMessageCodeTokenManagerDeletedFCMTokensOnAppReset = 34007,
286+
kFIRMessagingMessageCodeTokenManagerSavedAppVersion = 34008,
287+
kFIRMessagingMessageCodeTokenManagerErrorInvalidatingAllTokens = 34009,
288+
kFIRMessagingMessageCodeTokenManagerAPNSChanged = 34010,
289+
kFIRMessagingMessageCodeTokenManagerAPNSChangedTokenInvalidated = 34011,
290+
kFIRMessagingMessageCodeTokenManagerInvalidateStaleToken = 34012,
291+
// FIRMessagingTokenStore.m
292+
// DO NOT USE 15002 - 15013
293+
kFIRMessagingMessageCodeTokenStore000 = 35000,
294+
kFIRMessagingMessageCodeTokenStore001 = 35001,
295+
kFIRMessagingMessageCodeTokenStoreExceptionUnarchivingTokenInfo = 35015,
296+
297+
// DO NOT USE 16000, 18004
298+
299+
// FIRMessagingUtilities.m
300+
kFIRMessagingMessageCodeUtilitiesMissingBundleIdentifier = 38000,
301+
kFIRMessagingMessageCodeUtilitiesAppEnvironmentUtilNotAvailable = 38001,
302+
kFIRMessagingMessageCodeUtilitiesCannotGetHardwareModel = 38002,
303+
kFIRMessagingMessageCodeUtilitiesCannotGetSystemVersion = 38003,
304+
// FIRMessagingTokenOperation.m
305+
kFIRMessagingMessageCodeTokenOperationFailedToSignParams = 39000,
306+
// FIRMessagingTokenFetchOperation.m
307+
// DO NOT USE 40004, 40005
308+
kFIRMessagingMessageCodeTokenFetchOperationFetchRequest = 40000,
309+
kFIRMessagingMessageCodeTokenFetchOperationRequestError = 40001,
310+
kFIRMessagingMessageCodeTokenFetchOperationBadResponse = 40002,
311+
kFIRMessagingMessageCodeTokenFetchOperationBadTokenStructure = 40003,
312+
// FIRMessagingTokenDeleteOperation.m
313+
kFIRMessagingMessageCodeTokenDeleteOperationFetchRequest = 41000,
314+
kFIRMessagingMessageCodeTokenDeleteOperationRequestError = 41001,
315+
kFIRMessagingMessageCodeTokenDeleteOperationBadResponse = 41002,
316+
// FIRMessagingTokenInfo.m
317+
kFIRMessagingMessageCodeTokenInfoBadAPNSInfo = 42000,
318+
kFIRMessagingMessageCodeTokenInfoFirebaseAppIDChanged = 42001,
319+
kFIRMessagingMessageCodeTokenInfoLocaleChanged = 42002,
320+
// FIRMessagingKeychain.m
321+
kFIRMessagingKeychainReadItemError = 43000,
322+
kFIRMessagingKeychainAddItemError = 43001,
323+
kFIRMessagingKeychainDeleteItemError = 43002,
324+
kFIRMessagingKeychainCreateKeyPairError = 43003,
325+
kFIRMessagingKeychainUpdateItemError = 43004,
209326
};

FirebaseMessaging/Sources/FIRMessagingCodedInputStream.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
#import "FirebaseMessaging/Sources/FIRMessagingCodedInputStream.h"
1818

19-
#import "FirebaseMessaging/Sources/FIRMMessageCode.h"
19+
#import "FirebaseMessaging/Sources/FIRMessagingCode.h"
2020
#import "FirebaseMessaging/Sources/FIRMessagingLogger.h"
2121

2222
typedef struct {

FirebaseMessaging/Sources/FIRMessagingConstants.h

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,52 @@ FOUNDATION_EXPORT NSString *const kFIRMessagingRemoteNotificationsProxyEnabledIn
4646

4747
FOUNDATION_EXPORT NSString *const kFIRMessagingSubDirectoryName;
4848

49-
// Notifications
49+
#pragma mark - Notifications
50+
5051
FOUNDATION_EXPORT NSString *const kFIRMessagingCheckinFetchedNotification;
5152
FOUNDATION_EXPORT NSString *const kFIRMessagingAPNSTokenNotification;
53+
FOUNDATION_EXPORT NSString *const kFIRMessagingDefaultGCMTokenFailNotification;
5254
FOUNDATION_EXPORT NSString *const kFIRMessagingRegistrationTokenRefreshNotification;
5355

5456
FOUNDATION_EXPORT const int kFIRMessagingSendTtlDefault; // 24 hours
5557

58+
/**
59+
* Value included in a structured response or GCM message from IID, indicating
60+
* an identity reset.
61+
*/
62+
FOUNDATION_EXPORT NSString *const kFIRMessaging_CMD_RST;
63+
64+
#pragma mark - Miscellaneous
65+
66+
/// The scope used to save the IID "*" scope token. This is used for saving the
67+
/// IID auth token that we receive from the server. This feature was never
68+
/// implemented on the server side.
69+
FOUNDATION_EXPORT NSString *const kFIRMessagingAllScopeIdentifier;
70+
/// The scope used to save the IID "*" scope token.
71+
FOUNDATION_EXPORT NSString *const kFIRMessagingDefaultTokenScope;
72+
73+
/// Subdirectory in search path directory to store InstanceID preferences.
74+
FOUNDATION_EXPORT NSString *const kFIRMessagingInstanceIDSubDirectoryName;
75+
76+
/// The key for APNS token in options dictionary.
77+
FOUNDATION_EXPORT NSString *const kFIRMessagingTokenOptionsAPNSKey;
78+
79+
/// The key for APNS token environment type in options dictionary.
80+
FOUNDATION_EXPORT NSString *const kFIRMessagingTokenOptionsAPNSIsSandboxKey;
81+
82+
/// The key for GMP AppID sent in registration requests.
83+
FOUNDATION_EXPORT NSString *const kFIRMessagingTokenOptionsFirebaseAppIDKey;
84+
85+
FOUNDATION_EXPORT NSString *const kFIRMessagingAPNSTokenType;
86+
87+
/// The key to enable auto-register by swizzling AppDelegate's methods.
88+
FOUNDATION_EXPORT NSString *const kFIRMessagingAppDelegateProxyEnabledInfoPlistKey;
89+
90+
/// Error code for missing entitlements in Keychain. iOS Keychain error
91+
/// https://forums.developer.apple.com/thread/4743
92+
FOUNDATION_EXPORT const int kFIRMessagingSecMissingEntitlementErrorCode;
93+
94+
/// The key for InstallationID or InstanceID in token request.
95+
FOUNDATION_EXPORT NSString *const kFIRMessagingParamInstanceID;
96+
5697
#endif

0 commit comments

Comments
 (0)