این صفحه به شما نشان میدهد که چگونه ورود به سیستم گوگل را در یک برنامه iOS یا macOS ادغام کنید. ممکن است لازم باشد این دستورالعملها را با چرخه عمر برنامه یا مدل رابط کاربری خود تطبیق دهید.
قبل از اینکه شروع کنی
وابستگیها را دانلود کنید، پروژه Xcode خود را پیکربندی کنید و شناسه کلاینت خود را تنظیم کنید .
برای مشاهده نحوه عملکرد ورود به سیستم، برنامه نمونه iOS و macOS ما را امتحان کنید .
۱. مدیریت URL تغییر مسیر احراز هویت
iOS: نماینده برنامه UIApplicationDelegate
در application:openURL:options از AppDelegate، متد handleURL: از GIDSignIn را فراخوانی کنید:
سویفت
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
}
هدف-سی
- (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
در AppDelegate برنامه خود، یک هندلر برای رویدادهای
kAEGetURLدرapplicationDidFinishLaunchingثبت کنید:سویفت
func applicationDidFinishLaunching(_ notification: Notification) { // Register for GetURL events. let appleEventManager = NSAppleEventManager.shared() appleEventManager.setEventHandler( self, andSelector: "handleGetURLEvent:replyEvent:", forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL) ) }هدف-سی
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Register for GetURL events. NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager]; [appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; }برای این رویدادها، هندلری تعریف کنید که
handleURLمربوط بهGIDSignInرا فراخوانی کند:سویفت
func handleGetURLEvent(event: NSAppleEventDescriptor?, replyEvent: NSAppleEventDescriptor?) { if let urlString = event?.paramDescriptor(forKeyword: AEKeyword(keyDirectObject))?.stringValue{ let url = NSURL(string: urlString) GIDSignIn.sharedInstance.handle(url) } }هدف-سی
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { NSString *URLString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; NSURL *URL = [NSURL URLWithString:URLString]; [GIDSignIn.sharedInstance handleURL:url]; }
سویفتیوآی
در پنجره یا صحنه برنامه خود، یک هندلر برای دریافت URL ثبت کنید و handleURL مربوط به GIDSignIn را فراخوانی کنید:
سویفت
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
۲. تلاش برای بازیابی وضعیت ورود کاربر
وقتی برنامه شما شروع به کار میکند، تابع restorePreviousSignInWithCallback را فراخوانی کنید تا وضعیت ورود کاربرانی که قبلاً با استفاده از گوگل وارد سیستم شدهاند را بازیابی کنید. انجام این کار تضمین میکند که کاربران هر بار که برنامه شما را باز میکنند، مجبور به ورود به سیستم نباشند (مگر اینکه از سیستم خارج شده باشند).
برنامههای iOS اغلب این کار را در application:didFinishLaunchingWithOptions: از کلاس UIApplicationDelegate و در برنامههای macOS در applicationDidFinishLaunching: از کلاس NSApplicationDelegate انجام میدهند. از نتیجه برای تعیین اینکه کدام view را به کاربر ارائه دهد استفاده کنید. برای مثال:
سویفت
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
}
هدف-سی
- (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 استفاده میکنید، برای نمای اولیه خود، فراخوانی restorePreviousSignIn in onAppear را اضافه کنید:
سویفت
@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`
}
}
}
}
}
۳. دکمه ورود به سیستم گوگل را اضافه کنید
یک دکمه «ورود با گوگل» به نمای ورود خود اضافه کنید. کامپوننتهایی برای SwiftUI و UIKit در دسترس هستند که به طور خودکار دکمهای با برند گوگل ایجاد میکنند و استفاده از آنها توصیه میشود.
استفاده از SwiftUI
مطمئن شوید که وابستگی مربوط به دکمه «ورود با گوگل» در SwiftUI را به پروژه خود اضافه کردهاید.
در فایلی که میخواهید دکمه SwiftUI را به آن اضافه کنید، دستور import مورد نیاز را به بالای فایل اضافه کنید:
import GoogleSignInSwiftیک دکمهی «ورود با گوگل» به View خود اضافه کنید و عملی را که هنگام فشردن دکمه فراخوانی میشود، مشخص کنید:
GoogleSignInButton(action: handleSignInButton)با اضافه کردن فراخوانی
signIn(presentingViewController:completion:)ازGIDSignInدر اکشن خود، فرآیند ورود به سیستم را هنگامی که دکمه فشرده میشود، فعال کنید: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. } ) }
این از مدل نمای پیشفرض استفاده میکند که اطلاعات استایلبندی استاندارد را برای دکمه ارائه میدهد. برای کنترل ظاهر دکمه، باید یک GoogleSignInButtonViewModel سفارشی ایجاد کنید و آن را به عنوان viewModel در مقداردهی اولیه دکمه با استفاده از GoogleSignInButton(viewModel: yourViewModel, action: yourAction) تنظیم کنید. برای اطلاعات بیشتر به کد منبع GoogleSignInButtonViewModel مراجعه کنید.
استفاده از UIKit
یک دکمه "ورود با گوگل" به نمای ورود خود اضافه کنید. میتوانید از کلاس
GIDSignInButtonبرای تولید خودکار دکمهای با برند گوگل (توصیه میشود) استفاده کنید یا دکمه خودتان را با استایل سفارشی ایجاد کنید.برای افزودن یک
GIDSignInButtonبه یک استوریبورد یا فایل XIB، یک View اضافه کنید و کلاس سفارشی آن را رویGIDSignInButtonتنظیم کنید. توجه داشته باشید که وقتی یک View از نوعGIDSignInButtonرا به استوریبورد خود اضافه میکنید، دکمه ورود در سازنده رابط نمایش داده نمیشود. برنامه را اجرا کنید تا دکمه ورود را ببینید.شما میتوانید ظاهر یک
GIDSignInButtonرا با تنظیم ویژگیهایcolorSchemeوstyleآن سفارشی کنید:ویژگیهای استایل دکمهی GIDSignInButton colorSchemekGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDarkstylekGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnlyدکمه را به متدی در ViewController خود که
signIn:فراخوانی میکند، متصل کنید. برای مثال، از یکIBActionاستفاده کنید:سویفت
@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. } }هدف-سی
- (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. }]; }
۴. دکمه خروج را اضافه کنید
یک دکمه خروج به برنامه خود اضافه کنید که برای کاربران وارد شده قابل مشاهده باشد.
دکمه را به متدی در ViewController خود که
signOut:متصل کنید. برای مثال، از یکIBActionاستفاده کنید:سویفت
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }هدف-سی
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
مراحل بعدی
اکنون که کاربران میتوانند با استفاده از حسابهای گوگل خود وارد برنامه شما شوند، یاد بگیرید چگونه:
- اطلاعات پروفایل حساب گوگل کاربران را دریافت کنید .
- با استفاده از توکن شناسه گوگل کاربر ، با پشتیبان خود احراز هویت کنید .
- از طرف کاربر، APIهای گوگل را فراخوانی کنید .