تعرض لك هذه الصفحة كيفية دمج تسجيل الدخول بحساب 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
في Appتفويض تطبيقك، سجِّل معالجًا لأحداث
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]; }
سويفت
في نافذة تطبيقك أو المشهد، سجِّل معالجًا لتلقّي عنوان 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
اربط الزر بطريقة في وحدة تحكّم المشاهدة تستدعي
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. إضافة زر تسجيل الخروج
أضف زرًا للخروج إلى تطبيقك، مرئيًا للمستخدمين الذين سجّلوا الدخول.
اربط الزر بطريقة في وحدة تحكّم المشاهدة تستدعي
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 بالنيابة عن المستخدم.