Skip to content

Commit 1a9a6a5

Browse files
Revert "Migrate from using IID SDK for Remote Config to the new FIS SDK (#5096)" (#5156) (#5159)
This reverts commit 887ff82.
1 parent 6919a35 commit 1a9a6a5

File tree

6 files changed

+144
-145
lines changed

6 files changed

+144
-145
lines changed

FirebaseRemoteConfig/Sources/Private/RCNConfigSettings.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@
3939
@property(nonatomic, copy) NSString *secretToken;
4040
/// Device data version of checkin information.
4141
@property(nonatomic, copy) NSString *deviceDataVersion;
42-
/// InstallationsID.
43-
@property(nonatomic, copy) NSString *configInstallationsIdentifier;
44-
/// Installations token.
45-
@property(nonatomic, copy) NSString *configInstallationsToken;
42+
/// InstanceID.
43+
@property(nonatomic, copy) NSString *configInstanceID;
44+
/// InstanceID token.
45+
@property(nonatomic, copy) NSString *configInstanceIDToken;
4646

4747
/// A list of successful fetch timestamps in milliseconds.
4848
/// TODO Not used anymore. Safe to remove.

FirebaseRemoteConfig/Sources/RCNConfigSettings.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,9 +334,9 @@ - (NSString *)nextRequestWithUserProperties:(NSDictionary *)userProperties {
334334
// Note: We only set user properties as mentioned in the new REST API Design doc
335335
NSString *ret = [NSString stringWithFormat:@"{"];
336336
ret = [ret stringByAppendingString:[NSString stringWithFormat:@"app_instance_id:'%@'",
337-
_configInstallationsIdentifier]];
337+
_configInstanceID]];
338338
ret = [ret stringByAppendingString:[NSString stringWithFormat:@", app_instance_id_token:'%@'",
339-
_configInstallationsToken]];
339+
_configInstanceIDToken]];
340340
ret = [ret stringByAppendingString:[NSString stringWithFormat:@", app_id:'%@'", _googleAppID]];
341341

342342
ret = [ret stringByAppendingString:[NSString stringWithFormat:@", country_code:'%@'",

FirebaseRemoteConfig/Sources/RCNFetch.m

Lines changed: 61 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616

1717
#import "FirebaseRemoteConfig/Sources/RCNConfigFetch.h"
1818

19-
#import <FirebaseCore/FIRApp.h>
2019
#import <FirebaseCore/FIRLogger.h>
2120
#import <FirebaseCore/FIROptions.h>
22-
#import <FirebaseInstallations/FirebaseInstallations.h>
21+
#import <FirebaseInstanceID/FIRInstanceID+Private.h>
22+
#import <FirebaseInstanceID/FIRInstanceIDCheckinPreferences.h>
2323
#import <GoogleUtilities/GULNSData+zlib.h>
2424
#import "FirebaseRemoteConfig/Sources/Private/RCNConfigSettings.h"
2525
#import "FirebaseRemoteConfig/Sources/RCNConfigConstants.h"
@@ -40,6 +40,7 @@
4040
static NSString *const kServerURLQuery = @":fetch?";
4141
static NSString *const kServerURLKey = @"key=";
4242
static NSString *const kRequestJSONKeyAppID = @"app_id";
43+
static NSString *const kRequestJSONKeyAppInstanceID = @"app_instance_id";
4344

4445
static NSString *const kHTTPMethodPost = @"POST"; ///< HTTP request method config fetch using
4546
static NSString *const kContentTypeHeaderName = @"Content-Type"; ///< HTTP Header Field Name
@@ -48,13 +49,13 @@
4849
static NSString *const kAcceptEncodingHeaderName = @"Accept-Encoding"; ///< HTTP Header Field Name
4950
static NSString *const kETagHeaderName = @"etag"; ///< HTTP Header Field Name
5051
static NSString *const kIfNoneMatchETagHeaderName = @"if-none-match"; ///< HTTP Header Field Name
51-
static NSString *const kInstallationsAuthTokenHeaderName = @"x-goog-firebase-installations-auth";
5252
// Sends the bundle ID. Refer to b/130301479 for details.
5353
static NSString *const kiOSBundleIdentifierHeaderName =
5454
@"X-Ios-Bundle-Identifier"; ///< HTTP Header Field Name
5555

5656
/// Config HTTP request content type proto buffer
5757
static NSString *const kContentTypeValueJSON = @"application/json";
58+
static NSString *const kInstanceIDScopeConfig = @"*"; /// InstanceID scope
5859

5960
/// HTTP status codes. Ref: https://cloud.google.com/apis/design/errors#error_retries
6061
static NSInteger const kRCNFetchResponseHTTPStatusCodeOK = 200;
@@ -191,22 +192,18 @@ - (void)fetchConfigWithExpirationDuration:(NSTimeInterval)expirationDuration
191192
withError:error];
192193
}
193194
strongSelf->_settings.isFetchInProgress = YES;
194-
[strongSelf refreshInstallationsTokenWithCompletionHandler:completionHandler];
195+
[strongSelf refreshInstanceIDTokenAndFetchCheckInInfoWithCompletionHandler:completionHandler];
195196
});
196197
}
197198

198199
#pragma mark - Fetch helpers
199200

200-
- (NSString *)FIRAppNameFromFullyQualifiedNamespace {
201-
return [[_FIRNamespace componentsSeparatedByString:@":"] lastObject];
202-
}
203-
/// Refresh installation ID token before fetching config. installation ID is now mandatory for fetch
201+
/// Refresh instance ID token before fetching config. Instance ID is now mandatory for fetch
204202
/// requests to work.(b/14751422).
205-
- (void)refreshInstallationsTokenWithCompletionHandler:
203+
- (void)refreshInstanceIDTokenAndFetchCheckInInfoWithCompletionHandler:
206204
(FIRRemoteConfigFetchCompletion)completionHandler {
207-
FIRInstallations *installations = [FIRInstallations
208-
installationsWithApp:[FIRApp appNamed:[self FIRAppNameFromFullyQualifiedNamespace]]];
209-
if (!installations || !_options.GCMSenderID) {
205+
FIRInstanceID *instanceID = [FIRInstanceID instanceID];
206+
if (!_options.GCMSenderID) {
210207
NSString *errorDescription = @"Failed to get GCMSenderID";
211208
FIRLogError(kFIRLoggerRemoteConfig, @"I-RCN000074", @"%@",
212209
[NSString stringWithFormat:@"%@", errorDescription]);
@@ -220,11 +217,10 @@ - (void)refreshInstallationsTokenWithCompletionHandler:
220217
NSLocalizedDescriptionKey : errorDescription
221218
}]];
222219
}
223-
FIRInstallationsTokenHandler installationsTokenHandler = ^(
224-
FIRInstallationsAuthTokenResult *tokenResult, NSError *error) {
225-
if (!tokenResult || !tokenResult.authToken || error) {
220+
FIRInstanceIDTokenHandler instanceIDHandler = ^(NSString *token, NSError *error) {
221+
if (!token || error) {
226222
NSString *errorDescription =
227-
[NSString stringWithFormat:@"Failed to get installations token. Error : %@.", error];
223+
[NSString stringWithFormat:@"Failed to get InstanceID token. Error : %@.", error];
228224
FIRLogError(kFIRLoggerRemoteConfig, @"I-RCN000073", @"%@",
229225
[NSString stringWithFormat:@"%@", errorDescription]);
230226
self->_settings.isFetchInProgress = NO;
@@ -238,21 +234,20 @@ - (void)refreshInstallationsTokenWithCompletionHandler:
238234
}]];
239235
}
240236

241-
// We have a valid token. Get the backing installationID.
237+
// If the token is available, try to get the instanceID.
242238
__weak RCNConfigFetch *weakSelf = self;
243-
[installations installationIDWithCompletion:^(NSString *_Nullable identifier,
244-
NSError *_Nullable error) {
239+
[instanceID getIDWithHandler:^(NSString *_Nullable identity, NSError *_Nullable error) {
245240
RCNConfigFetch *strongSelf = weakSelf;
246241

247242
// Dispatch to the RC serial queue to update settings on the queue.
248243
dispatch_async(strongSelf->_lockQueue, ^{
249244
RCNConfigFetch *strongSelfQueue = weakSelf;
250245

251246
// Update config settings with the IID and token.
252-
strongSelfQueue->_settings.configInstallationsToken = tokenResult.authToken;
253-
strongSelfQueue->_settings.configInstallationsIdentifier = identifier;
247+
strongSelfQueue->_settings.configInstanceIDToken = [token copy];
248+
strongSelfQueue->_settings.configInstanceID = identity;
254249

255-
if (!identifier || error) {
250+
if (!identity || error) {
256251
NSString *errorDescription =
257252
[NSString stringWithFormat:@"Error getting iid : %@.", error];
258253
FIRLogError(kFIRLoggerRemoteConfig, @"I-RCN000055", @"%@",
@@ -270,23 +265,56 @@ - (void)refreshInstallationsTokenWithCompletionHandler:
270265
}
271266

272267
FIRLogInfo(kFIRLoggerRemoteConfig, @"I-RCN000022", @"Success to get iid : %@.",
273-
strongSelfQueue->_settings.configInstallationsIdentifier);
274-
[strongSelf
275-
getAnalyticsUserPropertiesWithCompletionHandler:^(NSDictionary *userProperties) {
276-
dispatch_async(strongSelf->_lockQueue, ^{
277-
[strongSelf fetchWithUserProperties:userProperties
278-
completionHandler:completionHandler];
279-
});
280-
}];
268+
strongSelfQueue->_settings.configInstanceID);
269+
270+
// Continue the fetch regardless of whether fetch of instance ID succeeded.
271+
[strongSelfQueue fetchCheckinInfoWithCompletionHandler:completionHandler];
281272
});
282273
}];
283274
};
284-
285275
FIRLogDebug(kFIRLoggerRemoteConfig, @"I-RCN000039", @"Starting requesting token.");
286-
[installations authTokenWithCompletion:installationsTokenHandler];
276+
// Note: We expect the GCMSenderID to always be available by the time this request is made.
277+
[instanceID tokenWithAuthorizedEntity:_options.GCMSenderID
278+
scope:kInstanceIDScopeConfig
279+
options:nil
280+
handler:instanceIDHandler];
281+
}
282+
283+
/// Fetch checkin info before fetching config. Checkin info including device authentication ID,
284+
/// secret token and device data version are optional fields in config request.
285+
- (void)fetchCheckinInfoWithCompletionHandler:(FIRRemoteConfigFetchCompletion)completionHandler {
286+
FIRInstanceID *instanceID = [FIRInstanceID instanceID];
287+
__weak RCNConfigFetch *weakSelf = self;
288+
[instanceID fetchCheckinInfoWithHandler:^(FIRInstanceIDCheckinPreferences *preferences,
289+
NSError *error) {
290+
RCNConfigFetch *fetchCheckinInfoWithHandlerSelf = weakSelf;
291+
dispatch_async(fetchCheckinInfoWithHandlerSelf->_lockQueue, ^{
292+
RCNConfigFetch *strongSelf = fetchCheckinInfoWithHandlerSelf;
293+
if (error) {
294+
FIRLogError(kFIRLoggerRemoteConfig, @"I-RCN000023", @"Failed to fetch checkin info: %@.",
295+
error);
296+
} else {
297+
strongSelf->_settings.deviceAuthID = preferences.deviceID;
298+
strongSelf->_settings.secretToken = preferences.secretToken;
299+
strongSelf->_settings.deviceDataVersion = preferences.deviceDataVersion;
300+
if (strongSelf->_settings.deviceAuthID.length && strongSelf->_settings.secretToken.length) {
301+
FIRLogInfo(kFIRLoggerRemoteConfig, @"I-RCN000024",
302+
@"Success to get device authentication ID: %@, security token: %@.",
303+
self->_settings.deviceAuthID, self->_settings.secretToken);
304+
}
305+
}
306+
// Checkin info is optional, continue fetch config regardless fetch of checkin info
307+
// succeeded.
308+
[strongSelf fetchWithUserPropertiesCompletionHandler:^(NSDictionary *userProperties) {
309+
dispatch_async(strongSelf->_lockQueue, ^{
310+
[strongSelf fetchWithUserProperties:userProperties completionHandler:completionHandler];
311+
});
312+
}];
313+
});
314+
}];
287315
}
288316

289-
- (void)getAnalyticsUserPropertiesWithCompletionHandler:
317+
- (void)fetchWithUserPropertiesCompletionHandler:
290318
(FIRAInteropUserPropertiesCallback)completionHandler {
291319
FIRLogDebug(kFIRLoggerRemoteConfig, @"I-RCN000060", @"Fetch with user properties completed.");
292320
id<FIRAnalyticsInterop> analytics = self->_analytics;
@@ -562,8 +590,6 @@ - (NSURLSessionDataTask *)URLSessionDataTaskWithContent:(NSData *)content
562590
timeoutInterval:timeoutInterval];
563591
URLRequest.HTTPMethod = kHTTPMethodPost;
564592
[URLRequest setValue:kContentTypeValueJSON forHTTPHeaderField:kContentTypeHeaderName];
565-
[URLRequest setValue:_settings.configInstallationsToken
566-
forHTTPHeaderField:kInstallationsAuthTokenHeaderName];
567593
[URLRequest setValue:[[NSBundle mainBundle] bundleIdentifier]
568594
forHTTPHeaderField:kiOSBundleIdentifierHeaderName];
569595
[URLRequest setValue:@"gzip" forHTTPHeaderField:kContentEncodingHeaderName];

FirebaseRemoteConfig/Tests/Sample/Podfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ target 'RemoteConfigSampleApp' do
77
pod 'FirebaseAnalytics'
88
pod 'FirebaseCore', :path => '../../../'
99
pod 'FirebaseInstallations', :path => '../../../'
10+
pod 'FirebaseInstanceID', :path => '../../../'
1011
pod 'FirebaseRemoteConfig', :path => '../../../'
1112

1213
# Pods for RemoteConfigSampleApp

FirebaseRemoteConfig/Tests/Sample/RemoteConfigSampleApp/ViewController.m

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#import <FirebaseAnalytics/FirebaseAnalytics.h>
1818
#import <FirebaseCore/FIROptions.h>
1919
#import <FirebaseCore/FirebaseCore.h>
20-
#import <FirebaseInstallations/FirebaseInstallations.h>
20+
#import <FirebaseInstanceID/FIRInstanceID+Private.h>
2121
#import <FirebaseRemoteConfig/FIRRemoteConfig_Private.h>
2222
#import <FirebaseRemoteConfig/FirebaseRemoteConfig.h>
2323
#import "FRCLog.h"
@@ -355,19 +355,21 @@ - (void)printResult:(NSMutableString *)output {
355355
stringWithFormat:@"%@\n",
356356
[self statusString:currentRCInstance.lastFetchStatus]]];
357357

358-
FIRInstallations *installations = [FIRInstallations installations];
359-
[installations installationIDWithCompletion:^(NSString *_Nullable identifier,
360-
NSError *_Nullable error) {
361-
[output appendString:@"\n-----------Installation ID------------------\n"];
362-
[output appendString:[NSString stringWithFormat:@"%@\n", identifier]];
358+
FIRInstanceID *instanceID = [FIRInstanceID instanceID];
359+
[instanceID getIDWithHandler:^(NSString *_Nullable identity, NSError *_Nullable error) {
360+
[output appendString:@"\n-----------Instance ID------------------\n"];
361+
[output appendString:[NSString stringWithFormat:@"%@\n", identity]];
363362

364-
[output appendString:@"\n-----------Installation ID token------------\n"];
363+
[output appendString:@"\n-----------Instance ID token------------\n"];
364+
[output
365+
appendString:[NSString stringWithFormat:@"%@\n",
366+
currentRCInstance.settings.configInstanceIDToken]];
365367

366-
[installations authTokenWithCompletion:^(FIRInstallationsAuthTokenResult *_Nullable tokenResult,
367-
NSError *_Nullable error) {
368-
[output appendString:[NSString stringWithFormat:@"%@\n", tokenResult.authToken]];
369-
[[FRCLog sharedInstance] logToConsole:output];
370-
}];
368+
[output appendString:@"\n-----------Android ID------------\n"];
369+
[output
370+
appendString:[NSString stringWithFormat:@"%@\n", currentRCInstance.settings.deviceAuthID]];
371+
372+
[[FRCLog sharedInstance] logToConsole:output];
371373
}];
372374
}
373375

@@ -407,28 +409,27 @@ - (NSString *)errorString:(FIRRemoteConfigError)error {
407409
}
408410

409411
- (IBAction)fetchIIDButtonClicked:(id)sender {
410-
FIRInstallations *installations =
411-
[FIRInstallations installationsWithApp:[FIRApp appNamed:self.FIRAppName]];
412-
[installations installationIDWithCompletion:^(NSString *_Nullable identifier,
413-
NSError *_Nullable error) {
412+
FIRInstanceID *instanceID = [FIRInstanceID instanceID];
413+
FIRInstanceIDTokenHandler instanceIDHandler = ^(NSString *token, NSError *error) {
414414
if (error) {
415415
[[FRCLog sharedInstance] logToConsole:[NSString stringWithFormat:@"%@", error]];
416-
} else {
417-
[installations authTokenWithCompletion:^(
418-
FIRInstallationsAuthTokenResult *_Nullable tokenResult,
419-
NSError *_Nullable error) {
420-
if (tokenResult.authToken) {
421-
((FIRRemoteConfig *)self.RCInstances[self.currentNamespace][self.FIRAppName])
422-
.settings.configInstallationsToken = tokenResult.authToken;
423-
[[FRCLog sharedInstance]
424-
logToConsole:[NSString
425-
stringWithFormat:
426-
@"Successfully got installation ID : \n\n%@\n\nToken : \n\n%@\n",
427-
identifier, tokenResult.authToken]];
428-
}
416+
}
417+
if (token) {
418+
((FIRRemoteConfig *)self.RCInstances[self.currentNamespace][self.FIRAppName])
419+
.settings.configInstanceIDToken = token;
420+
[instanceID getIDWithHandler:^(NSString *_Nullable identity, NSError *_Nullable error) {
421+
[[FRCLog sharedInstance]
422+
logToConsole:[NSString
423+
stringWithFormat:
424+
@"Successfully getting InstanceID : \n\n%@\n\nToken : \n\n%@\n",
425+
identity, token]];
429426
}];
430427
}
431-
}];
428+
};
429+
[instanceID tokenWithAuthorizedEntity:[FIRApp appNamed:self.FIRAppName].options.GCMSenderID
430+
scope:@"*"
431+
options:nil
432+
handler:instanceIDHandler];
432433
}
433434

434435
- (IBAction)searchButtonClicked:(id)sender {

0 commit comments

Comments
 (0)