Na tej stronie 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 modelu UI.
Zanim zaczniesz
Pobierz zależności, skonfiguruj projekt Xcode i ustaw identyfikator klienta.
Wypróbuj naszą przykładową aplikację na iOS i macOS, aby zobaczyć, jak działa logowanie
1. Obsługa adresu URL przekierowania uwierzytelniania
iOS: UIApplicationDelegate
W metodzie application:openURL:options
AppDelegate wywołaj metodę handleURL:
metody 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 sekcji AppDelegate w Twojej aplikacji 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ń, które będą wywoływać typ
handleURL
obiektuGIDSignIn
: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
Zarejestruj moduł obsługi w oknie lub scenie aplikacji, aby otrzymać adres URL i wywołać interfejs GIDSignIn
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 zalogowania użytkownika
Po uruchomieniu aplikacji wywołaj 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 otwierają Twoją aplikację (chyba że się wylogują).
W aplikacjach na iOS często robią to za pomocą metody application:didFinishLaunchingWithOptions:
UIApplicationDelegate
i applicationDidFinishLaunching:
NSApplicationDelegate
w przypadku aplikacji na macOS. Na jego podstawie określ, który widok wyświetlić użytkownikowi. Na 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 wywołanie 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. W SwiftUI i UIKit dostępne są komponenty, które automatycznie generują przycisk z logo Google i są zalecane do użycia.
Używanie SwiftUI
Pamiętaj, aby dodać do projektu zależność do przycisku SwiftUI „Zaloguj się przez Google”.
Na początku pliku, do którego chcesz dodać przycisk SwiftUI, dodaj wymagany import:
import GoogleSignInSwift
Dodaj do widoku przycisk „Zaloguj się przez Google” i określ działanie, które ma być wywoływane po naciśnięciu tego przycisku:
GoogleSignInButton(action: handleSignInButton)
Aktywuj proces logowania po naciśnięciu przycisku, dodając w działaniu wywołanie do metody
signIn(presentingViewController:completion:)
użytkownikaGIDSignIn
: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. } ) }
Używany jest domyślny model widoku, który udostępnia standardowe informacje o stylu przycisku. Aby kontrolować wygląd przycisku, musisz utworzyć niestandardowy GoogleSignInButtonViewModel
i ustawić go jako viewModel
w inicjatorze przycisku za pomocą 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 elementami marki Google (zalecane), lub utworzyć własny przycisk z niestandardowym stylem.Aby dodać obiekt
GIDSignInButton
do pliku scenorysu lub XIB, dodaj widok danych i ustaw jego klasę niestandardową naGIDSignInButton
. Pamiętaj, że po dodaniu widokuGIDSignInButton
do scenorysu przycisk logowania nie jest renderowany w kreatorze interfejsów. Uruchom aplikację, aby zobaczyć przycisk logowania.Wygląd elementu
GIDSignInButton
możesz dostosować, 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 ViewController, która wywołuje
signIn:
. Użyj na przykład atrybutuIBAction
: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. Dodawanie przycisku wylogowania
Dodaj do swojej aplikacji przycisk wylogowania, który będzie widoczny dla zalogowanych użytkowników.
Połącz przycisk z metodą w kontrolerze ViewController, która wywołuje
signOut:
. Użyj na przykład atrybutuIBAction
:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Dalsze kroki
Użytkownicy mogą już logować się w aplikacji za pomocą kont Google. Dowiedz się, jak:
- Pobieranie informacji o profilach kont Google użytkowników
- Uwierzytelnij się w backendzie przy użyciu tokena identyfikatora Google użytkownika.
- Wywoływanie interfejsów API Google w imieniu użytkownika.