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