Skip to content

Commit

Permalink
FBSDK token fixes
Browse files Browse the repository at this point in the history
Summary: Adding optional optimizations (default is YES) when fetching access token and authentication token.

Reviewed By: joesus

Differential Revision: D27856662

fbshipit-source-id: dce247bb338a245cb3283fbd8c58e1cb2e3c3345
  • Loading branch information
Brian Clouser authored and facebook-github-bot committed Apr 20, 2021
1 parent 8138f8c commit 13fabd2
Show file tree
Hide file tree
Showing 8 changed files with 74 additions and 13 deletions.
2 changes: 1 addition & 1 deletion FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,7 @@ - (void)configureDependencies
requestProvider:graphRequestProvider
connectionProvider:connectionProvider
store:store];
FBSDKTokenCache *tokenCache = [FBSDKTokenCache new];
FBSDKTokenCache *tokenCache = [[FBSDKTokenCache alloc] initWithSettings:FBSDKSettings.sharedSettings];
[FBSDKAccessToken setTokenCache:tokenCache];
[FBSDKAccessToken setConnectionFactory:connectionProvider];
[FBSDKAuthenticationToken setTokenCache:tokenCache];
Expand Down
15 changes: 15 additions & 0 deletions FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ - (void)SETTER:(TYPE *)value { \
static NSString *const FBSDKSettingsInstallTimestamp = @"com.facebook.sdk:FBSDKSettingsInstallTimestamp";
static NSString *const FBSDKSettingsSetAdvertiserTrackingEnabledTimestamp = @"com.facebook.sdk:FBSDKSettingsSetAdvertiserTrackingEnabledTimestamp";
static NSString *const FBSDKSettingsUseCachedValuesForExpensiveMetadata = @"com.facebook.sdk:FBSDKSettingsUseCachedValuesForExpensiveMetadata";
static NSString *const FBSDKSettingsUseTokenOptimizations = @"com.facebook.sdk.FBSDKSettingsUseTokenOptimizations";
static BOOL g_disableErrorRecovery;
static NSString *g_userAgentSuffix;
static NSString *g_defaultGraphAPIVersion;
Expand Down Expand Up @@ -410,6 +411,20 @@ + (void)setShouldUseCachedValuesForExpensiveMetadata:(BOOL)shouldUseCachedValues
[self.store setObject:@(shouldUseCachedValuesForExpensiveMetadata) forKey:FBSDKSettingsUseCachedValuesForExpensiveMetadata];
}

- (BOOL)shouldUseTokenOptimizations
{
NSNumber *storedValue = [self.store objectForKey:FBSDKSettingsUseTokenOptimizations];
if (storedValue == nil) {
return YES;
}
return storedValue.boolValue;
}

- (void)setShouldUseTokenOptimizations:(BOOL)shouldUseTokenOptimizations
{
[self.store setObject:@(shouldUseTokenOptimizations) forKey:FBSDKSettingsUseTokenOptimizations];
}

+ (NSSet<FBSDKLoggingBehavior> *)loggingBehaviors
{
if (!g_loggingBehaviors) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
@property (class, nullable, nonatomic, copy) NSString *userAgentSuffix;

@property (class, nonnull, readonly) FBSDKSettings *sharedSettings;
@property (nonatomic) BOOL shoudUseTokenOptimizations;

+ (void)configureWithStore:(nonnull id<FBSDKDataPersisting>)store
appEventsConfigurationProvider:(nonnull Class<FBSDKAppEventsConfigurationProviding>)provider
Expand Down
1 change: 1 addition & 0 deletions FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettingsProtocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,6 @@ NS_SWIFT_NAME(SettingsProtocol)
@property (nonatomic, readonly, nullable) NSDate* installTimestamp;
@property (nonatomic, readonly, nullable) NSDate* advertiserTrackingEnabledTimestamp;
@property (nonatomic, readonly) BOOL shouldLimitEventAndDataUsage;
@property (nonatomic) BOOL shouldUseTokenOptimizations;

@end
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,11 @@

#import "FBSDKTokenCaching.h"

@protocol FBSDKSettings;

NS_SWIFT_NAME(TokenCache)
@interface FBSDKTokenCache : NSObject<FBSDKTokenCaching>

- (instancetype)initWithSettings:(id<FBSDKSettings>)settings;

@end
45 changes: 33 additions & 12 deletions FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKTokenCache.m
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#import "FBSDKAuthenticationToken+Internal.h"
#import "FBSDKDynamicFrameworkLoader.h"
#import "FBSDKKeychainStore.h"
#import "FBSDKSettingsProtocol.h"
#import "FBSDKUnarchiverProvider.h"

static NSString *const kFBSDKAccessTokenUserDefaultsKey = @"com.facebook.sdk.v4.FBSDKAccessTokenInformationKey";
Expand All @@ -35,13 +36,15 @@
@implementation FBSDKTokenCache
{
FBSDKKeychainStore *_keychainStore;
id<FBSDKSettings> _settings;
}

- (instancetype)init
- (instancetype)initWithSettings:(id<FBSDKSettings>)settings
{
if ((self = [super init])) {
NSString *keyChainServiceIdentifier = [NSString stringWithFormat:@"com.facebook.sdk.tokencache.%@", [NSBundle mainBundle].bundleIdentifier];
_keychainStore = [[FBSDKKeychainStore alloc] initWithService:keyChainServiceIdentifier accessGroup:nil];
_settings = settings;
}
return self;
}
Expand All @@ -55,18 +58,20 @@ - (FBSDKAccessToken *)accessToken
NSString *uuid = [defaults objectForKey:kFBSDKAccessTokenUserDefaultsKey];
NSDictionary<NSString *, id> *dict = [_keychainStore dictionaryForKey:kFBSDKAccessTokenKeychainKey];

if (!uuid && !dict) {
return nil;
}
if (_settings.shouldUseTokenOptimizations) {
if (!uuid && !dict) {
return nil;
}

if (!uuid) {
[self clearAccessTokenCache];
return nil;
}
if (!uuid) {
[self clearAccessTokenCache];
return nil;
}

if (!dict) {
[defaults setObject:nil forKey:kFBSDKAccessTokenUserDefaultsKey];
return nil;
if (!dict) {
[defaults setObject:nil forKey:kFBSDKAccessTokenUserDefaultsKey];
return nil;
}
}

if ([dict[kFBSDKTokenUUIDKey] isKindOfClass:[NSString class]]) {
Expand Down Expand Up @@ -120,8 +125,24 @@ - (FBSDKAuthenticationToken *)authenticationToken
{
NSUserDefaults *defaults = NSUserDefaults.standardUserDefaults;
NSString *uuid = [defaults objectForKey:kFBSDKAuthenticationTokenUserDefaultsKey];

NSDictionary<NSString *, id> *dict = [_keychainStore dictionaryForKey:kFBSDKAuthenticationTokenKeychainKey];

if (_settings.shouldUseTokenOptimizations) {
if (!uuid && !dict) {
return nil;
}

if (!uuid) {
[self clearAuthenticationTokenCache];
return nil;
}

if (!dict) {
[defaults setObject:nil forKey:kFBSDKAuthenticationTokenKeychainKey];
return nil;
}
}

if ([dict[kFBSDKTokenUUIDKey] isKindOfClass:[NSString class]]) {
// there is a bug while running on simulator that the uuid stored in dict can be NSData,
// do a type check to make sure it is NSString
Expand Down
16 changes: 16 additions & 0 deletions FBSDKCoreKit/FBSDKCoreKitTests/Internal/FBSDKSettingsTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#import "FBSDKCoreKitTests-Swift.h"
#import "FBSDKSettings.h"
#import "FBSDKSettings+Internal.h"
#import "FBSDKSettingsProtocol.h"
#import "FBSDKTestCase.h"
#import "NSUserDefaults+FBSDKDataPersisting.h"
#import "UserDefaultsSpy.h"
Expand Down Expand Up @@ -1309,6 +1310,21 @@ - (void)testSetUseCachedValuesForExpensiveMetadata
);
}

- (void)testSetUseTokenOptimizations
{
FBSDKSettings.sharedSettings.shouldUseTokenOptimizations = NO;

XCTAssertEqualObjects(
userDefaultsSpy.capturedValues[@"com.facebook.sdk.FBSDKSettingsUseTokenOptimizations"],
@NO,
"Should store whether or not to use token optimizations"
);
XCTAssertFalse(
FBSDKSettings.sharedSettings.shouldUseTokenOptimizations,
"Should use token optimizations"
);
}

- (void)testSetLimitEventAndDataUsageWithEmptyCache
{
FBSDKSettings.limitEventAndDataUsage = YES;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

@objcMembers
class TestSettings: NSObject, SettingsProtocol, SettingsLogging {


static var appID: String?
static var clientToken: String?
static var userAgentSuffix: String?
Expand All @@ -38,6 +40,7 @@ class TestSettings: NSObject, SettingsProtocol, SettingsLogging {
var stubbedIsSetATETimeExceedsInstallTime = false
var stubbedIsSKAdNetworkReportEnabled = false
var stubbedLimitEventAndDataUsage = false
var shouldUseTokenOptimizations = true

var isDataProcessingRestricted: Bool {
return stubbedIsDataProcessingRestricted
Expand Down

0 comments on commit 13fabd2

Please sign in to comment.