Z tej strony dowiesz się, jak zintegrować Logowanie przez Google z aplikacją na iOS lub macOS. Może być konieczne dostosowanie tych instrukcji do cyklu życia aplikacji lub jej modelu interfejsu użytkownika.
Zanim zaczniesz
Pobierz zależności, skonfiguruj projekt Xcode i ustaw identyfikator klienta.
1. Obsługa adresu URL przekierowania uwierzytelniania
iOS: UIApplicationDelegate
W metodzie application:openURL:options
AppDelegate wywołaj metodę handleURL:
GIDSignIn
:
Swift
func application(
_ app: UIApplication,
open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
var handled: Bool
handled = GIDSignIn.sharedInstance.handle(url)
if handled {
return true
}
// Handle other custom URL types.
// If not handled by this app, return false.
return false
}
Objective-C
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
BOOL handled;
handled = [GIDSignIn.sharedInstance handleURL:url];
if (handled) {
return YES;
}
// Handle other custom URL types.
// If not handled by this app, return NO.
return NO;
}
macOS: NSApplicationDelegate
W funkcji AppDelegate zarejestruj moduł obsługi zdarzeń
kAEGetURL
w:applicationDidFinishLaunching
:Swift
func applicationDidFinishLaunching(_ notification: Notification) { // Register for GetURL events. let appleEventManager = NSAppleEventManager.shared() appleEventManager.setEventHandler( self, andSelector: "handleGetURLEvent:replyEvent:", forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL) ) }
Objective-C
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Register for GetURL events. NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager]; [appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; }
Określ moduł obsługi tych zdarzeń wywołujących metodę
handleURL
w systemieGIDSignIn
:Swift
func handleGetURLEvent(event: NSAppleEventDescriptor?, replyEvent: NSAppleEventDescriptor?) { if let urlString = event?.paramDescriptor(forKeyword: AEKeyword(keyDirectObject))?.stringValue{ let url = NSURL(string: urlString) GIDSignIn.sharedInstance.handle(url) } }
Objective-C
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { NSString *URLString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; NSURL *URL = [NSURL URLWithString:URLString]; [GIDSignIn.sharedInstance handleURL:url]; }
SwiftUI.
W oknie lub punkcie widokowym aplikacji zarejestruj moduł obsługi, który będzie otrzymywać URL i wywołał GIDSignIn
s handleURL
:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. Próba przywrócenia stanu logowania użytkownika
Gdy aplikacja się uruchomi, wywołaj funkcję restorePreviousSignInWithCallback
, aby spróbować przywrócić stan logowania użytkowników, którzy zalogowali się już przez Google. Dzięki temu użytkownicy nie będą musieli logować się za każdym razem, gdy otworzą aplikację (chyba że się wylogują).
Aplikacje na iOS często robią to w metodzie application:didFinishLaunchingWithOptions:
systemu UIApplicationDelegate
, a applicationDidFinishLaunching:
w przypadku aplikacji na macOS – NSApplicationDelegate
. Na podstawie tego wyniku możesz określić, który widok chcesz pokazać użytkownikowi. Przykład:
Swift
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in
if error != nil || user == nil {
// Show the app's signed-out state.
} else {
// Show the app's signed-in state.
}
}
return true
}
Objective-C
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GIDSignIn.sharedInstance restorePreviousSignInWithCompletion:^(GIDGoogleUser * _Nullable user,
NSError * _Nullable error) {
if (error) {
// Show the app's signed-out state.
} else {
// Show the app's signed-in state.
}
}];
return YES;
}
SwiftUI.
Jeśli używasz SwiftUI, dodaj połączenie do restorePreviousSignIn
w onAppear
dla początkowego widoku:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onAppear {
GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in
// Check if `user` exists; otherwise, do something with `error`
}
}
}
}
}
3. Dodaj przycisk Logowania przez Google
Dodaj przycisk „Zaloguj się przez Google” do widoku logowania. Komponenty są dostępne dla SwiftUI i UIKit, które automatycznie generują przycisk z marką Google i są zalecane.
Korzystanie z SwiftUI
Sprawdź, czy w projekcie dodano zależność od przycisku „Zaloguj się przez Google” w SwiftUI.
W pliku, w którym chcesz dodać przycisk SwiftUI, dodaj wymagany import na początku pliku:
import GoogleSignInSwift
Dodaj do widoku przycisk „Zaloguj się przez Google” i określ działanie, które będzie wywoływane po jego naciśnięciu:
GoogleSignInButton(action: handleSignInButton)
Aktywuj proces logowania po naciśnięciu przycisku, dodając do metody wywołanie
GIDSignIn
metodysignIn(presentingViewController:completion:)
:func handleSignInButton() { GIDSignIn.sharedInstance.signIn( withPresenting: rootViewController) { signInResult, error in guard let result = signInResult else { // Inspect error return } // If sign in succeeded, display the app's main content View. } ) }
Korzysta z domyślnego modelu widoku, który zawiera standardowe informacje o stylu przycisku. Aby kontrolować wygląd przycisku, musisz utworzyć niestandardowy GoogleSignInButtonViewModel
i ustawić go jako viewModel
w inicjatorze przycisku, używając GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
. Więcej informacji znajdziesz w kodzie źródłowym GoogleSignInButtonViewModel
.
Korzystanie z UIKit
Dodaj przycisk „Zaloguj się przez Google” do widoku logowania. Możesz użyć klasy
GIDSignInButton
, aby automatycznie wygenerować przycisk z logo Google (zalecane) lub utworzyć własny przycisk ze stylem niestandardowym.Aby dodać
GIDSignInButton
do scenorysu lub pliku XIB, dodaj widok i ustaw jego klasę niestandardową naGIDSignInButton
. Pamiętaj, że gdy dodasz widokGIDSignInButton
do scenorysu, przycisk logowania nie wyświetli się w kreatorze interfejsu. Uruchom aplikację, aby zobaczyć przycisk logowania.Możesz dostosować wygląd elementu
GIDSignInButton
, ustawiając jego właściwościcolorScheme
istyle
:Właściwości stylu GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Połącz przycisk z metodą w kontrolerze ViewView, która wywołuje obiekt
signIn:
. Na przykład użyjIBAction
:Swift
@IBAction func signIn(sender: Any) { GIDSignIn.sharedInstance.signIn(withPresenting: self) { signInResult, error in guard error == nil else { return } // If sign in succeeded, display the app's main content View. } }
Objective-C
- (IBAction)signIn:(id)sender { [GIDSignIn.sharedInstance signInWithPresentingViewController:self completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { if (error) { return; } // If sign in succeeded, display the app's main content View. }]; }
4. Dodaj przycisk wylogowania
Dodaj do aplikacji przycisk wylogowania widoczny dla zalogowanych użytkowników.
Połącz przycisk z metodą w kontrolerze ViewView, która wywołuje obiekt
signOut:
. Na przykład użyjIBAction
:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Dalsze kroki
Teraz gdy użytkownicy mogą logować się w Twojej aplikacji za pomocą swoich kont Google, dowiedz się, jak:
- Uzyskiwanie informacji o profilu konta Google użytkownika
- Uwierzytelnij się za pomocą backendu, używając tokena Google użytkownika.
- Wywoływać interfejsy API Google w imieniu użytkownika.