diff --git a/GoogleSignIn/Sources/GIDSignIn.m b/GoogleSignIn/Sources/GIDSignIn.m index a8e94ff8..c5505ed0 100644 --- a/GoogleSignIn/Sources/GIDSignIn.m +++ b/GoogleSignIn/Sources/GIDSignIn.m @@ -217,6 +217,21 @@ - (void)signInWithConfiguration:(GIDConfiguration *)configuration [self signInWithOptions:options]; } +- (void)signInWithConfiguration:(GIDConfiguration *)configuration + presentingViewController:(UIViewController *)presentingViewController + hint:(nullable NSString *)hint + scopes:(nullable NSArray *)scopes + callback:(nullable GIDSignInCallback)callback { + GIDSignInInternalOptions *options = + [GIDSignInInternalOptions defaultOptionsWithConfiguration:configuration + presentingViewController:presentingViewController + loginHint:hint + addScopesFlow:NO + scopes:scopes + callback:callback]; + [self signInWithOptions:options]; +} + - (void)signInWithConfiguration:(GIDConfiguration *)configuration presentingViewController:(UIViewController *)presentingViewController callback:(nullable GIDSignInCallback)callback { diff --git a/GoogleSignIn/Sources/GIDSignInInternalOptions.h b/GoogleSignIn/Sources/GIDSignInInternalOptions.h index 97d04460..b01110a4 100644 --- a/GoogleSignIn/Sources/GIDSignInInternalOptions.h +++ b/GoogleSignIn/Sources/GIDSignInInternalOptions.h @@ -60,6 +60,13 @@ NS_ASSUME_NONNULL_BEGIN addScopesFlow:(BOOL)addScopesFlow callback:(nullable GIDSignInCallback)callback; ++ (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)configuration + presentingViewController:(nullable UIViewController *)presentingViewController + loginHint:(nullable NSString *)loginHint + addScopesFlow:(BOOL)addScopesFlow + scopes:(nullable NSArray *)scopes + callback:(nullable GIDSignInCallback)callback; + /// Creates the options to sign in silently. + (instancetype)silentOptionsWithCallback:(GIDSignInCallback)callback; diff --git a/GoogleSignIn/Sources/GIDSignInInternalOptions.m b/GoogleSignIn/Sources/GIDSignInInternalOptions.m index 2c0658db..35e56a28 100644 --- a/GoogleSignIn/Sources/GIDSignInInternalOptions.m +++ b/GoogleSignIn/Sources/GIDSignInInternalOptions.m @@ -25,6 +25,7 @@ + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)con (nullable UIViewController *)presentingViewController loginHint:(nullable NSString *)loginHint addScopesFlow:(BOOL)addScopesFlow + scopes:(nullable NSArray *)scopes callback:(nullable GIDSignInCallback)callback { GIDSignInInternalOptions *options = [[GIDSignInInternalOptions alloc] init]; if (options) { @@ -35,11 +36,25 @@ + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)con options->_presentingViewController = presentingViewController; options->_loginHint = loginHint; options->_callback = callback; - options->_scopes = [GIDScopes scopesWithBasicProfile:@[]]; + options->_scopes = [GIDScopes scopesWithBasicProfile:scopes]; } return options; } ++ (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)configuration + presentingViewController:(nullable UIViewController *)presentingViewController + loginHint:(nullable NSString *)loginHint + addScopesFlow:(BOOL)addScopesFlow + callback:(nullable GIDSignInCallback)callback { + GIDSignInInternalOptions *options = [self defaultOptionsWithConfiguration:configuration + presentingViewController:presentingViewController + loginHint:loginHint + addScopesFlow:addScopesFlow + scopes:@[] + callback:callback]; + return options; +} + + (instancetype)silentOptionsWithCallback:(GIDSignInCallback)callback { GIDSignInInternalOptions *options = [self defaultOptionsWithConfiguration:nil presentingViewController:nil diff --git a/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h b/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h index c1aa4165..494a7a16 100644 --- a/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h +++ b/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h @@ -128,6 +128,28 @@ typedef void (^GIDDisconnectCallback)(NSError *_Nullable error); callback:(nullable GIDSignInCallback)callback NS_EXTENSION_UNAVAILABLE("The sign-in flow is not supported in App Extensions."); +/// Starts an interactive sign-in flow using the provided configuration and a login hint. +/// +/// The callback will be called at the end of this process. Any saved sign-in state will be +/// replaced by the result of this flow. Note that this method should not be called when the app is +/// starting up, (e.g in `application:didFinishLaunchingWithOptions:`); instead use the +/// `restorePreviousSignInWithCallback:` method to restore a previous sign-in. +/// +/// @param configuration The configuration properties to be used for this flow. +/// @param presentingViewController The view controller used to present `SFSafariViewContoller` on +/// iOS 9 and 10. +/// @param hint An optional hint for the authorization server, for example the user's ID or email +/// address, to be prefilled if possible. +/// @param scopes a list of initial scopes +/// @param callback The `GIDSignInCallback` block that is called on completion. This block will be +/// called asynchronously on the main queue. + +- (void)signInWithConfiguration:(GIDConfiguration *)configuration + presentingViewController:(UIViewController *)presentingViewController + hint:(nullable NSString *)hint + scopes:(nullable NSArray *)scopes + callback:(nullable GIDSignInCallback)callback; + /// Starts an interactive consent flow to add scopes to the current user's grants. /// /// The callback will be called at the end of this process. If successful, a new `GIDGoogleUser`