تعرض لك هذه الصفحة كيفية دمج ميزة "تسجيل الدخول بحساب Google" في أحد تطبيقات iOS أو macOS. قد تحتاج إلى تعديل هذه التعليمات لتناسب مراحل نشاط تطبيقك أو نموذج واجهة المستخدم.
قبل البدء
نزِّل التبعيات، واضبط مشروع Xcode واضبط معرّف العميل.
1- معالجة عنوان URL لإعادة توجيه المصادقة
iOS: UIApplicationpublisher
في طريقة application:openURL:options
في AppDelled، استدعِ طريقة 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: NSApplicationلوح
في عنصر AppDegree لتطبيقك، سجِّل معالجًا لأحداث
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 واستدعِ handleURL
GIDSignIn
:
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 ID الخاص بالمستخدم.
- الاتصال بواجهات Google APIs نيابةً عن المستخدم