توضّح لك هذه الصفحة كيفية دمج ميزة "تسجيل الدخول باستخدام حساب Google" في تطبيق iOS أو macOS. قد تحتاج إلى تعديل هذه التعليمات لتناسب مراحل نشاط تطبيقك أو نموذج واجهة المستخدم.
قبل البدء
تنزيل العناصر التابعة وإعداد مشروع Xcode وتحديد معرّف العميل
جرِّب نموذج تطبيقنا على iOS وmacOS لمعرفة طريقة عمل ميزة "تسجيل الدخول باستخدام حساب Google".
1. التعامل مع عنوان URL لإعادة التوجيه الخاص بالمصادقة
iOS: UIApplicationDelegate
في طريقة application:openURL:options الخاصة بـ AppDelegate، استدعِ طريقة handleURL: الخاصة بـ 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
في AppDelegate الخاص بتطبيقك، سجِّل معالجًا لأحداث
kAEGetURLفي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]; }حدِّد معالجًا لهذه الأحداث يستدعي
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]; }
SwiftUI
في نافذة تطبيقك أو مشهده، سجِّل معالجًا لتلقّي عنوان URL واستدعاء GIDSignIns handleURL:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. محاولة استعادة حالة تسجيل الدخول للمستخدم
عند بدء تشغيل تطبيقك، استدعِ الدالة restorePreviousSignInWithCallback لمحاولة استعادة حالة تسجيل الدخول للمستخدمين الذين سجّلوا الدخول باستخدام Google من قبل. ويضمن ذلك ألا يضطر المستخدمون إلى تسجيل الدخول في كل مرة يفتحون فيها تطبيقك (إلا إذا سجّلوا الخروج).
تنفّذ تطبيقات iOS ذلك غالبًا في طريقة UIApplicationDelegate's
application:didFinishLaunchingWithOptions: وفي NSApplicationDelegate's 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
إذا كنت تستخدم 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'ssignIn(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 colorSchemekGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDarkstylekGIDSignInButtonStyleStandard
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 بالنيابة عن المستخدم