تعرض لك هذه الصفحة كيفية دمج تسجيل الدخول بحساب Google في تطبيق iOS أو macOS. قد تحتاج إلى تعديل هذه التعليمات لتناسب مراحل نشاط تطبيقك أو نموذج واجهة المستخدم الخاص به.
قبل البدء
نزِّل الاعتماديات واضبط مشروع Xcode واضبط معرِّف العميل.
1. معالجة عنوان URL لإعادة توجيه المصادقة
iOS: UIApplicationDelegate
في طريقة application:openURL:options
الخاصة بـ AppDelegate، يمكنك طلب 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
سجِّل المعالِج الخاص بأحداث
kAEGetURL
في تطبيقك ضمن AppDelegateapplicationDidFinishLaunching
: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]; }
حدِّد المعالِج لهذه الأحداث التي تستدعي
handleURL
فيGIDSignIn
: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]; }
واجهة المستخدم
في نافذة التطبيق أو المشهد، سجِّل معالجًا لتلقّي عنوان URL ثم الاتصال
handleURL
GIDSignIn
:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. محاولة استعادة حالة تسجيل دخول المستخدم
عند تشغيل تطبيقك، اتصل بالرقم restorePreviousSignInWithCallback
لتجربة
استعادة حالة تسجيل الدخول للمستخدمين الذين سجّلوا الدخول من قبل باستخدام Google. إجراء ذلك
تضمن عدم اضطرار المستخدمين إلى تسجيل الدخول في كل مرة يفتحون فيها التطبيق (ما لم
سجّل خروجه).
غالبًا ما تُجري تطبيقات iOS هذا في UIApplicationDelegate
.
طريقة application:didFinishLaunchingWithOptions:
NSApplicationDelegate
لـ applicationDidFinishLaunching:
لتطبيقات macOS. استخدام
النتيجة لتحديد الملف الشخصي الذي سيتم عرضه للمستخدم. على سبيل المثال:
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، أضِف مكالمة إلى restorePreviousSignIn
باللغة onAppear
للحصول على
العرض الأولي:
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- إضافة زر لتسجيل الدخول بحساب Google
إضافة "تسجيل الدخول باستخدام حساب Google" إلى عرض تسجيل الدخول. تتوفر المكونات لكل من SwiftUI وUIKit التي تنشئ تلقائيًا يحمل علامة Google التجارية ويوصى باستخدامه.
استخدام واجهة SwiftUI
تأكَّد من إضافة تبعية "تسجيل الدخول باستخدام حساب Google" في واجهة SwiftUI. زرّ لمشروعك.
في الملف الذي تريد إضافة زر SwiftUI فيه، أضِف الاستيراد المطلوب إلى أعلى الملف:
import GoogleSignInSwift
إضافة "تسجيل الدخول باستخدام حساب Google" إلى "طريقة العرض" وتحديد الإجراء سيتم استدعاؤه عند الضغط على الزر:
GoogleSignInButton(action: handleSignInButton)
يتم تشغيل عملية تسجيل الدخول عند الضغط على الزر من خلال إضافة مكالمة إلى
GIDSignIn
تم إدخالsignIn(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. } ) }
يستخدم هذا النموذج نموذج العرض التلقائي الذي يوفّر معلومات النمط العادية
الزر. للتحكم في مظهر الزر، تحتاج إلى إنشاء زر
GoogleSignInButtonViewModel
وضبطه كـ viewModel
في قسم
برنامج التهيئة باستخدام GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
. عرض
رمز المصدر GoogleSignInButtonViewModel
لمزيد من المعلومات.
استخدام UIKit
إضافة "تسجيل الدخول باستخدام حساب Google" إلى عرض تسجيل الدخول. يمكنك استخدام صفحة صف واحد (
GIDSignInButton
) لإنشاء زر تلقائيًا باستخدام Google الهوية البصرية للعلامة التجارية (يُنصح به) أو إنشاء الزر الخاص بك بنمط مخصّص.لإضافة
GIDSignInButton
إلى لوحة ترتيب الصور أو ملف XIB، يجب إضافة طريقة عرض وضبط فئتها المخصصة علىGIDSignInButton
. لاحظ أنه عند إضافةGIDSignInButton
يمكنك عرض لوحة العمل، لا يظهر زر تسجيل الدخول. في أداة إنشاء الواجهات شغِّل التطبيق لرؤية زر تسجيل الدخول.يمكنك تخصيص مظهر "
GIDSignInButton
" من خلال ضبط السمتانcolorScheme
وstyle
:خصائص نمط GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
توصيل الزر بطريقة في ViewController والتي تستدعي
signIn:
على سبيل المثال، يمكنك استخدامIBAction
: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. إضافة زر لتسجيل الخروج
أضِف زرًا لتسجيل الخروج إلى تطبيقك، ويظهر للمستخدمين الذين سجّلوا الدخول.
توصيل الزر بطريقة في ViewController والتي تستدعي
signOut:
على سبيل المثال، يمكنك استخدامIBAction
:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
الخطوات التالية
والآن بعد أن أصبح بإمكان المستخدمين تسجيل الدخول إلى تطبيقك باستخدام حساباتهم على Google، يمكنك التعرّف على كيفية إلى:
- جذب مستخدمين معلومات الملف الشخصي لحساب Google.
- المصادقة مع الخلفية باستخدام معرّف Google للمستخدم الرمز المميز.
- استدعاء Google APIs نيابةً عن المستخدم