GIDSignIn_Private.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * Copyright 2021 Google LLC
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import <TargetConditionals.h>
  17. #import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h"
  18. #if __has_include(<UIKit/UIKit.h>)
  19. #import <UIKit/UIKit.h>
  20. #elif __has_include(<AppKit/AppKit.h>)
  21. #import <AppKit/AppKit.h>
  22. #endif
  23. NS_ASSUME_NONNULL_BEGIN
  24. @class GIDGoogleUser;
  25. @class GIDSignInInternalOptions;
  26. @class GTMKeychainStore;
  27. @class GIDAppCheck;
  28. @class GIDAuthStateMigration;
  29. /// Represents a completion block that takes a `GIDSignInResult` on success or an error if the
  30. /// operation was unsuccessful.
  31. typedef void (^GIDSignInCompletion)(GIDSignInResult *_Nullable signInResult,
  32. NSError *_Nullable error);
  33. /// Represents a completion block that takes an error if the operation was unsuccessful.
  34. typedef void (^GIDDisconnectCompletion)(NSError *_Nullable error);
  35. // Private |GIDSignIn| methods that are used internally in this SDK and other Google SDKs.
  36. @interface GIDSignIn ()
  37. /// Redeclare |currentUser| as readwrite for internal use.
  38. @property(nonatomic, readwrite, nullable) GIDGoogleUser *currentUser;
  39. /// Private initializer taking a `GTMKeychainStore`.
  40. - (instancetype)initWithKeychainStore:(GTMKeychainStore *)keychainStore
  41. authStateMigrationService:(GIDAuthStateMigration *)authStateMigrationService;
  42. #if TARGET_OS_IOS && !TARGET_OS_MACCATALYST
  43. /// Private initializer taking a `GTMKeychainStore` and `GIDAppCheckProvider`.
  44. - (instancetype)initWithKeychainStore:(GTMKeychainStore *)keychainStore
  45. authStateMigrationService:(GIDAuthStateMigration *)authStateMigrationService
  46. appCheck:(GIDAppCheck *)appCheck
  47. API_AVAILABLE(ios(14));
  48. #endif // TARGET_OS_IOS || !TARGET_OS_MACCATALYST
  49. /// Authenticates with extra options.
  50. - (void)signInWithOptions:(GIDSignInInternalOptions *)options;
  51. /// Restores a previously authenticated user from the keychain synchronously without refreshing
  52. /// the access token or making a userinfo request.
  53. ///
  54. /// The currentUser.profile will be nil unless the profile data can be extracted from the ID token.
  55. ///
  56. /// @return NO if there is no user restored from the keychain.
  57. - (BOOL)restorePreviousSignInNoRefresh;
  58. #if TARGET_OS_IOS || TARGET_OS_MACCATALYST
  59. /// Starts an interactive consent flow on iOS to add scopes to the current user's grants.
  60. ///
  61. /// The completion will be called at the end of this process. If successful, a `GIDSignInResult`
  62. /// instance will be returned reflecting the new scopes and saved sign-in state will be updated.
  63. ///
  64. /// @param scopes The scopes to ask the user to consent to.
  65. /// @param presentingViewController The view controller used to present `SFSafariViewController` on
  66. /// iOS 9 and 10 and to supply `presentationContextProvider` for `ASWebAuthenticationSession` on
  67. /// iOS 13+.
  68. /// @param completion The block that is called on completion. This block will be called asynchronously
  69. /// on the main queue.
  70. - (void)addScopes:(NSArray<NSString *> *)scopes
  71. presentingViewController:(UIViewController *)presentingViewController
  72. completion:(nullable GIDSignInCompletion)completion
  73. NS_EXTENSION_UNAVAILABLE("The add scopes flow is not supported in App Extensions.");
  74. #elif TARGET_OS_OSX
  75. /// Starts an interactive consent flow on macOS to add scopes to the current user's grants.
  76. ///
  77. /// The completion will be called at the end of this process. If successful, a `GIDSignInResult`
  78. /// instance will be returned reflecting the new scopes and saved sign-in state will be updated.
  79. ///
  80. /// @param scopes An array of scopes to ask the user to consent to.
  81. /// @param presentingWindow The window used to supply `presentationContextProvider` for
  82. /// `ASWebAuthenticationSession`.
  83. /// @param completion The block that is called on completion. This block will be called asynchronously
  84. /// on the main queue.
  85. - (void)addScopes:(NSArray<NSString *> *)scopes
  86. presentingWindow:(NSWindow *)presentingWindow
  87. completion:(nullable GIDSignInCompletion)completion;
  88. #endif
  89. @end
  90. NS_ASSUME_NONNULL_END