Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions GoogleSignIn/Sources/GIDSignIn.m
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,8 @@ @implementation GIDSignIn {
#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST
// The class used to manage presenting the loading screen for fetching app check tokens.
GIDTimedLoader *_timedLoader;
// Flag indicating developer's intent to use App Check.
BOOL _configureAppCheckCalled;
#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST
}

Expand Down Expand Up @@ -481,6 +483,7 @@ + (GIDSignIn *)sharedInstance {
#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST
- (void)configureWithCompletion:(nullable void (^)(NSError * _Nullable))completion {
@synchronized(self) {
_configureAppCheckCalled = YES;
[_appCheck prepareForAppCheckWithCompletion:^(NSError * _Nullable error) {
if (completion) {
completion(error);
Expand Down Expand Up @@ -538,6 +541,7 @@ - (instancetype)initWithKeychainStore:(GTMKeychainStore *)keychainStore
self = [self initWithKeychainStore:keychainStore];
if (self) {
_appCheck = appCheck;
_configureAppCheckCalled = NO;
}
return self;
}
Expand Down Expand Up @@ -632,15 +636,18 @@ - (void)authenticateInteractivelyWithOptions:(GIDSignInInternalOptions *)options

- (void)authorizationRequestWithOptions:(GIDSignInInternalOptions *)options completion:
(void (^)(OIDAuthorizationRequest *_Nullable request, NSError *_Nullable error))completion {
BOOL shouldCallCompletion = YES;
BOOL shouldCreateAuthRequest = YES;
NSMutableDictionary<NSString *, NSString *> *additionalParameters =
[self additionalParametersFromOptions:options];
#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST
if (@available(iOS 14.0, *)) {
// Only use `_appCheck` (created via singleton `+[GIDSignIn sharedInstance]` call) if
// `-[GIDAppCheck prepareForAppCheckWithCompletion:]` has been called
if ([_appCheck isPrepared]) {
shouldCallCompletion = NO;
// `GIDAppCheck` has been successfully prepared OR if the developer has attempted to configure.
// If former is false and the latter true, then preparation step failed for some reason; we
// still want to try to pass along the app check token (it just may take longer since the
// pre-warm step failed).
if ([_appCheck isPrepared] || _configureAppCheckCalled) {
shouldCreateAuthRequest = NO;
UIViewController *presentingVC = options.presentingViewController;
if (!_timedLoader) {
_timedLoader = [[GIDTimedLoader alloc] initWithPresentingViewController:presentingVC];
Expand All @@ -652,9 +659,14 @@ - (void)authorizationRequestWithOptions:(GIDSignInInternalOptions *)options comp
if (token) {
additionalParameters[kClientAssertionTypeParameter] = kClientAssertionTypeParameterValue;
additionalParameters[kClientAssertionParameter] = token.token;
request = [self authorizationRequestWithOptions:options
additionalParameters:additionalParameters];
}
#if DEBUG
if (error) {
NSLog(@"[Google Sign-In iOS]: Error retrieving App Check limited use token: %@", error);
}
#endif
request = [self authorizationRequestWithOptions:options
additionalParameters:additionalParameters];
if (self->_timedLoader.animationStatus == GIDTimedLoaderAnimationStatusAnimating) {
[self->_timedLoader stopTimingWithCompletion:^{
completion(request, error);
Expand All @@ -666,7 +678,7 @@ - (void)authorizationRequestWithOptions:(GIDSignInInternalOptions *)options comp
}
}
#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST
if (shouldCallCompletion) {
if (shouldCreateAuthRequest) {
OIDAuthorizationRequest *request = [self authorizationRequestWithOptions:options
additionalParameters:additionalParameters];
completion(request, nil);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,6 @@
ReferencedContainer = "container:AppAttestExample.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<EnvironmentVariables>
<EnvironmentVariable
key = "FIRAppCheckDebugToken"
value = "F40DF0E8-9CCC-46DF-AC01-43DE96FCEDD8"
isEnabled = "YES">
</EnvironmentVariable>
</EnvironmentVariables>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
Expand Down
5 changes: 4 additions & 1 deletion Samples/Swift/AppAttestExample/Podfile
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/firebase/SpecsDev.git'

pod 'GoogleSignIn', :path => '../../../', :testspecs => ['unit']
pod 'GoogleSignInSwiftSupport', :path => '../../../', :testspecs => ['unit']
project 'AppAttestExample.xcodeproj'

use_frameworks! :linkage => :static

target 'AppAttestExample' do
pod 'AppCheckCore', :git => 'https://github.com/google/app-check.git', :tag => 'CocoaPods-0.1.0-alpha.1'
pod 'AppCheckCore'
platform :ios, '14.0'
end