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 interfejsu.
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 w pliku AppDelegate wywołaj metodę GIDSignIn:handleURL:
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 pliku AppDelegate aplikacji zarejestruj moduł obsługi zdarzeń
kAEGetURLw sekcjiapplicationDidFinishLaunching: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]; }Zdefiniuj moduł obsługi tych zdarzeń, który wywołuje
GIDSignInhandleURL: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 scenie aplikacji zarejestruj moduł obsługi, który będzie odbierać adres URL i wywoływać GIDSignIns handleURL:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. Spróbuj przywrócić stan logowania użytkownika.
Gdy aplikacja się uruchamia, wywołaj funkcję restorePreviousSignInWithCallback, aby spróbować przywrócić stan logowania użytkowników, którzy zalogowali się już za pomocą 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 UIApplicationDelegateapplication:didFinishLaunchingWithOptions:, a aplikacje na macOS – w metodzie NSApplicationDelegateapplicationDidFinishLaunching:. Na podstawie wyniku określ, który widok ma być wyświetlany 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 funkcji 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. Dodawanie przycisku logowania przez Google
Dodaj przycisk „Zaloguj się przez Google” do widoku logowania. Dostępne są komponenty dla SwiftUI i UIKit, które automatycznie generują przycisk z logo Google. Zalecamy ich używanie.
Korzystanie z SwiftUI
Upewnij się, że do projektu dodano zależność przycisku „Zaloguj się przez Google” w SwiftUI.
W pliku, w którym chcesz dodać przycisk SwiftUI, dodaj na jego początku wymagany import:
import GoogleSignInSwiftDodaj do widoku przycisk „Zaloguj się przez Google” i określ działanie, które zostanie wywołane po jego naciśnięciu:
GoogleSignInButton(action: handleSignInButton)Aby uruchomić proces logowania po naciśnięciu przycisku, dodaj wywołanie metody
GIDSignInssignIn(presentingViewController:completion:)w działaniu: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żywa 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 za pomocą GoogleSignInButton(viewModel: yourViewModel, action:
yourAction). Więcej informacji znajdziesz w GoogleSignInButtonViewModelkodzie źródłowym.
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ć element
GIDSignInButtondo scenorysu lub pliku XIB, dodaj widok i ustaw jego klasę niestandardową naGIDSignInButton. Pamiętaj, że gdy dodasz widok do scenorysu, przycisk logowania nie będzie renderowany w edytorze interfejsu.GIDSignInButtonUruchom aplikację, aby zobaczyć przycisk logowania.Wygląd elementu
GIDSignInButtonmożesz dostosować, ustawiając jego właściwościcolorSchemeistyle:Właściwości stylu GIDSignInButton colorSchemekGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDarkstylekGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnlyPołącz przycisk z metodą w kontrolerze widoku, która wywołuje
signIn:. Użyj na przykład elementuIBAction: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 aplikacji przycisk wylogowania widoczny dla zalogowanych użytkowników.
Połącz przycisk z metodą w kontrolerze widoku, która wywołuje
signOut:. Użyj na przykład elementuIBAction:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Dalsze kroki
Użytkownicy mogą teraz logować się w Twojej aplikacji za pomocą kont Google. Dowiedz się, jak:
- Pobieranie informacji z profilu na koncie Google użytkowników
- Uwierzytelnij się na backendzie za pomocą tokena identyfikatora Google użytkownika.
- Wywoływać interfejsy API Google w imieniu użytkownika.