Na tej stronie dowiesz się, jak zintegrować Logowanie przez Google z aplikacją na iOS lub macOS. Konieczne może być 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
usługi AppDelegate wywołaj GIDSignIn
Metoda 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 aplikacji AppDelegate zarejestruj moduł obsługi zdarzeń
kAEGetURL
wapplicationDidFinishLaunching
: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óry wywołuje funkcję
handleURL
interfejsuGIDSignIn
: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, aby otrzymać adres URL i wywołać
handleURL
(GIDSignIn
):
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
Po uruchomieniu aplikacji zadzwoń pod numer restorePreviousSignInWithCallback
, aby spróbować:
przywrócenie stanu logowania użytkowników, którzy zalogowali się już przez Google. Robię to
aby użytkownicy nie musieli logować się za każdym razem, gdy otwierają aplikację (chyba że
się wylogowało).
Aplikacje na iOS często robią to na: UIApplicationDelegate
application:didFinishLaunchingWithOptions:
i
applicationDidFinishLaunching:
dla systemu NSApplicationDelegate
dla aplikacji na macOS. Używaj
wynik w celu określenia, 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
Twój początkowy widok:
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 opcję „Zaloguj się przez Google” do widoku logowania. Dla SwiftUI i UIKit dostępne są komponenty, które automatycznie generują z logo Google i zalecamy ich użycie.
Korzystanie z SwiftUI
Upewnij się, że masz dodaną zależność w interfejsie SwiftUI „Zaloguj się przez Google”. do swojego projektu.
W pliku, do którego chcesz dodać przycisk SwiftUI, dodaj na początku pliku wymagany element importu:
import GoogleSignInSwift
Dodaj opcję „Zaloguj się przez Google” do widoku danych i określ działanie, który zostanie wywołany po naciśnięciu przycisku:
GoogleSignInButton(action: handleSignInButton)
Wywołuj proces logowania po naciśnięciu przycisku, dodając wywołanie do funkcji
GIDSignIn
– MetodasignIn(presentingViewController:completion:)
w Twoje działanie: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. } ) }
Wykorzystuje domyślny model widoku, który podaje standardowe informacje o stylu dla:
kliknij przycisk. Aby sterować wyglądem przycisku, musisz utworzyć własny
GoogleSignInButtonViewModel
i ustaw ją jako viewModel
w przycisku
inicjator za pomocą metody GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
. Zobacz
kod źródłowy GoogleSignInButtonViewModel
.
Korzystanie z UIKit
Dodaj opcję „Zaloguj się przez Google” do widoku logowania. Za pomocą
GIDSignInButton
klasa, aby automatycznie wygenerować przycisk przy użyciu Google oznaczenia marki (zalecane) lub utworzyć własny przycisk z własnym stylem.Aby dodać element
GIDSignInButton
do scenorysu lub pliku XIB, dodaj opcję Widok i zestaw swoją klasę niestandardową naGIDSignInButton
. Pamiętaj, że dodanieGIDSignInButton
Wyświetlenie scenorysu – przycisk logowania się nie renderuje w kreatorze interfejsów. Uruchom aplikację, aby zobaczyć przycisk logowania.Możesz dostosować wygląd
GIDSignInButton
, ustawiając jego UsługicolorScheme
istyle
:Właściwości stylu GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Połącz przycisk z metodą w elemencie ViewController, która wywołuje metodę
signIn:
Możesz na przykład użyć 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 aplikacji przycisk wylogowania widoczny dla zalogowanych użytkowników.
Połącz przycisk z metodą w elemencie ViewController, która wywołuje metodę
signOut:
Możesz na przykład użyć atrybutuIBAction
:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Dalsze kroki
Teraz użytkownicy mogą logować się w Twojej aplikacji za pomocą swoich kont Google. Dowiedz się, jak to zrobić. do:
- Pobierz dane użytkowników Informacje profilowe na koncie Google.
- Uwierzytelnij się za pomocą backendu, korzystając z identyfikatora Google użytkownika. token.
- Wywoływać interfejsy API Google w imieniu użytkownika.