با ادغام «ورود به سیستم با Google» در برنامهتان، میتوانید به کاربران اجازه دهید بااستفاده از «حسابهای Google» خودشان با Firebase اصالتسنجی کنند.
پیامواره هوشوارهای برای کمک هوشوارهای
برای دریافت کمک از هوش مصنوعی، پیامواره زیر را در عامل کدنویسی هوش مصنوعی خود (مثل Antigravity، Claude Code، Codex، و Cursor) کپی کنید. میتوانید پیامواره را سفارشیسازی کنید و با نمایندهتان تکرار کنید. برای اطلاعات دقیق نصب، به مهارتهای عامل Firebase مراجعه کنید.
Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me set up and use Firebase Authentication with Google Sign-In in my app.
قبل از شروع
از «مدیر بسته Swift» برای نصب و مدیریت وابستگیهای Firebase استفاده کنید.
- در Xcode، با باز بودن پروژه برنامه، به File > Add Packages (فایل > افزودن بستهها) پیمایش کنید.
- وقتی درخواست شد، مخزن کیت توسعه نرمافزار پلاتفرمهای Firebase Apple را اضافه کنید:
- کتابخانه Firebase Authentication را انتخاب کنید.
- پرچم
-ObjCرا به بخش پرچمهای پیونددهنده دیگر در تنظیمات ساخت هدف اضافه کنید. - پساز اتمام، Xcode بهطور خودکار شروع به حل و بارگیری وابستگیهای شما در پسزمینه میکند.
https://github.com/firebase/firebase-ios-sdk.git
افزودن «کیت توسعه نرمافزار ورود به سیستم با Google» به پروژه
در Xcode، با باز بودن پروژه برنامه، به File > Add Packages (فایل > افزودن بستهها) پیمایش کنید.
وقتی خواسته شد، مخزن «کیت توسعه نرمافزار ورود به سیستم با Google» را اضافه کنید:
https://github.com/google/GoogleSignIn-iOSپساز اتمام، Xcode بهطور خودکار شروع به حل و بارگیری وابستگیهای شما در پسزمینه میکند.
«ورود به سیستم با Google» را برای پروژه Firebase خود فعال کنید
برای اینکه به کاربران اجازه دهید بااستفاده از «ورود به سیستم با Google» به سیستم وارد شوند، ابتدا باید ارائهدهنده «ورود به سیستم با Google» را برای پروژه Firebase خود فعال کنید:
در کنسول Firebase، به امنیت > اصالتسنجی بروید.
در برگه روش ورود به سیستم، ارائهدهنده Google را فعال کنید.
روی ذخیره کردن کلیک کنید.
نسخه جدیدی از فایل
GoogleService-Info.plistپروژه خود را بارگیری کنید و آن را در پروژه Xcode خود کپی کنید. هر نسخه موجود را با نسخه جدید رونویسی کنید. (به افزودن Firebase به پروژه iOS مراجعه کنید.)
فایلهای سرایند موردنیاز را وارد کنید
ابتدا باید فایلهای سرصفحه «کیت توسعه نرمافزار Firebase» و «کیت توسعه نرمافزار ورود به سیستم با Google» را به برنامهتان وارد کنید.
Swift
import FirebaseAuth import GoogleSignIn
Objective-C
@import FirebaseCore; @import GoogleSignIn;
پیادهسازی «ورود به سیستم با Google»
با دنبال کردن این مراحل، «ورود به سیستم با Google» را پیادهسازی کنید. برای جزئیات استفاده از «ورود به سیستم با Google» در iOS، به مستندات توسعهدهنده «ورود به سیستم با Google» مراجعه کنید.
- طرحهای نشانی وب سفارشی را به پروژه Xcode خود اضافه کنید:
- پیکربندی پروژه را باز کنید: روی نام پروژه در نمای درختی سمت راست کلیک کنید. برنامهتان را از بخش هدفها انتخاب کنید، سپس برگه اطلاعات را انتخاب کنید و بخش انواع نشانی وب را ازهم باز کنید.
- روی دکمه + کلیک کنید و طرح نشانی وب را برای شناسه
کارخواه معکوس خود اضافه کنید. برای پیدا کردن این مقدار،
فایل پیکربندی
را باز کنید و کلیدGoogleService-Info.plist REVERSED_CLIENT_IDرا پیدا کنید. مقدار آن کلید را کپی کنید، و آن را در چارگوش طرحهای نشانی وب در صفحه پیکربندی جایگذاری کنید. فیلدهای دیگر را دست نزنید.وقتی تکمیل شد، پیکربندی شما باید چیزی شبیه به موارد زیر باشد (اما با مقادیر ویژه برنامه شما):
- در روش
application:didFinishLaunchingWithOptions:نماینده برنامه، شیءFirebaseAppرا پیکربندی کنید.Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- روش
application:openURL:options:نماینده برنامهتان را پیادهسازی کنید. این روش باید روشhandleURLنمونهGIDSignInرا فراخوانی کند که نشانی اینترنتی دریافتی برنامه شما در پایان فرایند اصالتسنجی را بهدرستی مدیریت میکند.Swift
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { // ... } return GIDSignIn.sharedInstance.handle(url) }
Objective-C
- (BOOL)application:(nonnull UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<NSString *, id> *)options { return [[GIDSignIn sharedInstance] handleURL:url]; }
- کنترلکننده نمای ارائهدهنده و شناسه مشتری برنامه خود را به روش
signInارائهدهنده «ورود به سیستم با Google» ارسال کنید و از نشانه اصالتسنجی Google حاصل، گواه اصالتسنجی Firebase ایجاد کنید:Swift
guard let clientID = FirebaseApp.app()?.options.clientID else { return } // Create Google Sign In configuration object. let config = GIDConfiguration(clientID: clientID) GIDSignIn.sharedInstance.configuration = config // Start the sign in flow! GIDSignIn.sharedInstance.signIn(withPresenting: viewController) { result, error in guard error == nil else { // ... return } guard let user = result?.user, let idToken = user.idToken?.tokenString else { // ... return } let credential = GoogleAuthProvider.credential(withIDToken: idToken, accessToken: user.accessToken.tokenString) self.signIn(with: credential) }
Objective-C
GIDConfiguration *config = [[GIDConfiguration alloc] initWithClientID:[FIRApp defaultApp].options.clientID]; [GIDSignIn.sharedInstance setConfiguration:config]; __weak __auto_type weakSelf = self; [GIDSignIn.sharedInstance signInWithPresentingViewController:self completion:^(GIDSignInResult * _Nullable result, NSError * _Nullable error) { __auto_type strongSelf = weakSelf; if (strongSelf == nil) { return; } if (error == nil) { FIRAuthCredential *credential = [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString accessToken:result.user.accessToken.tokenString]; // ... } else { // ... } }];
GIDSignInButtonرا به فیلمنامه، فایل XIB، یا نمونهسازی برنامهنویسی اضافه کنید. برای افزودن دکمه به فایل XIB یا تابلوی داستان، «نمایی» اضافه کنید و کلاس سفارشی آن را رویGIDSignInButtonتنظیم کنید.- اختیاری: اگر میخواهید دکمه را سفارشیسازی کنید،
کارهای زیر را انجام دهید:
Swift
- در کنترلکننده نمای خود، دکمه ورود به سیستم را بهعنوان یک دارایی اعلام کنید.
@IBOutlet weak var signInButton: GIDSignInButton!
- دکمه را به دارایی
signInButtonکه بهتازگی اعلام کردهاید متصل کنید. - با تنظیم ویژگیهای GIDSignInButton شیء، دکمه را سفارشیسازی کنید.
Objective-C
- در فایل سرصفحه کنترلکننده نمای خود، دکمه ورود به سیستم را بهعنوان یک
دارایی تعریف کنید.
@property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
- دکمه را به دارایی
signInButtonکه بهتازگی اعلام کردهاید متصل کنید. - با تنظیم ویژگیهای GIDSignInButton شیء، دکمه را سفارشیسازی کنید.
- در کنترلکننده نمای خود، دکمه ورود به سیستم را بهعنوان یک دارایی اعلام کنید.
اصالتسنجی با Firebase
درنهایت، فرایند ورود به سیستم Firebase را با اطلاعات اعتباری اصالتسنجی که در مرحله قبلی ایجاد شده است تکمیل کنید.
Swift
Auth.auth().signIn(with: credential) { result, error in guard error == nil else { // ... return } // At this point, our user is signed in }
Objective-C
[[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) { FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey]; NSMutableString *displayNameString = [NSMutableString string]; for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) { [displayNameString appendString:tmpFactorInfo.displayName]; [displayNameString appendString:@" "]; } [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString] completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) { FIRPhoneMultiFactorInfo* selectedHint; for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) { if ([displayName isEqualToString:tmpFactorInfo.displayName]) { selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo; } } [FIRPhoneAuthProvider.provider verifyPhoneNumberWithMultiFactorInfo:selectedHint UIDelegate:nil multiFactorSession:resolver.session completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) { if (error) { [self showMessagePrompt:error.localizedDescription]; } else { [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName] completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) { FIRPhoneAuthCredential *credential = [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID verificationCode:verificationCode]; FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { [self showMessagePrompt:error.localizedDescription]; } else { NSLog(@"Multi factor finanlize sign in succeeded."); } }]; }]; } }]; }]; } else if (error) { // ... return; } // User successfully signed in. Get user data from the FIRUser object if (authResult == nil) { return; } FIRUser *user = authResult.user; // ... }];
مراحل بعدی
پساز اینکه کاربر برای اولینبار به سیستم وارد شد، حساب کاربری جدیدی ایجاد میشود و به اطلاعات اعتباری—یعنی نام کاربری و گذرواژه، شماره تلفن، یا اطلاعات ارائهدهنده اصالتسنجی—که کاربر با آن به سیستم وارد شده است پیوند داده میشود. این حساب جدید بهعنوان بخشی از پروژه Firebase شما ذخیره میشود و میتوان از آن برای شناسایی کاربر در همه برنامههای پروژه شما، صرفنظر از نحوه ورود کاربر به سیستم، استفاده کرد.
-
در برنامههایتان، میتوانید اطلاعات نمایه پایه کاربر را از
Userشیء دریافت کنید. به مدیریت کاربران مراجعه کنید. در Firebase Realtime Database و Cloud Storage قوانین امنیتی، میتوانید شناسه کاربر یکتای کاربر واردشده به سیستم را از متغیر
authدریافت کنید و از آن برای کنترل دادههایی که کاربر میتواند به آنها دسترسی داشته باشد استفاده کنید.
میتوانید به کاربران اجازه دهید با پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربری موجود بااستفاده از چندین ارائهدهنده اصالتسنجی به سیستم برنامهتان وارد شوند.
برای خارج کردن کاربر از سیستم،
signOut: را فراخوانی کنید.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
همچنین ممکن است بخواهید کد مدیریت خطا را برای طیف کامل خطاهای اصالتسنجی اضافه کنید. مدیریت خطاها را ببینید.