با ادغام «ورود به سیستم با Google» در برنامهتان، میتوانید به کاربران اجازه دهید بااستفاده از «حسابهای Google» خودشان با Firebase اصالتسنجی کنند.
پیامواره هوشوارهای برای کمک هوشوارهای
برای کمک هوشوارهای، پیامواره زیر را در عامل کدنویسی هوش مصنوعی (مانند Gemini در Android Studio، 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.
قبل از شروع
اگر قبلاً این کار را نکردهاید، Firebase را به پروژه Android خود اضافه کنید.
در فایل Gradle واحد (سطح برنامه) (معمولاً
<project>/<app-module>/build.gradle.ktsیا<project>/<app-module>/build.gradle)، وابستگی کتابخانه Firebase Authentication را برای Android اضافه کنید. توصیه میکنیم از Firebase Android BoM برای کنترل نسخهبندی کتابخانه استفاده کنید.همچنین، بهعنوان بخشی از راهاندازی Firebase Authentication، باید کیت توسعه نرمافزار «مدیر اطلاعات اعتباری» را به برنامهتان اضافه کنید.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.0.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth")
// Also add the dependencies for the Credential Manager libraries and specify their versions implementation("androidx.credentials:credentials:1.3.0") implementation("androidx.credentials:credentials-play-services-auth:1.3.0") implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1") }بااستفاده از Firebase Android BoM، برنامه شما همیشه از نسخههای سازگار کتابخانههای Firebase Android استفاده خواهد کرد.
(جایگزین) افزودن وابستگیهای کتابخانه Firebase بدون استفاده از BoM
اگر انتخاب کنید که از Firebase BoM استفاده نکنید، باید نسخه هر کتابخانه Firebase را در خط وابستگی آن مشخص کنید.
توجه داشته باشید که اگر از چند کتابخانه Firebase در برنامهتان استفاده میکنید، قویاً توصیه میکنیم از BoM برای مدیریت نسخههای کتابخانه استفاده کنید، که تضمین میکند همه نسخهها سازگار باشند.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:25.0.0")
// Also add the dependencies for the Credential Manager libraries and specify their versions implementation("androidx.credentials:credentials:1.3.0") implementation("androidx.credentials:credentials-play-services-auth:1.3.0") implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1") }اگر قبلاً اثر انگشت SHA-1 برنامهتان را مشخص نکردهاید، آن را مشخص کنید.
در کنسول Firebase، به
تنظیمات > زبانه کلی بروید.به کارت برنامههای شما پیمایش کنید، برنامه Android خود را انتخاب کنید، و اثر انگشت SHA-1 خود را در فیلد اثر انگشتهای گواهینامه SHA اضافه کنید.
برای جزئیات مربوط به نحوه دریافت اثر انگشت SHA برنامه، به اصالتسنجی مشتری مراجعه کنید.
- Google را بهعنوان ارائهدهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
- در کنسول Firebase، به امنیت > اصالتسنجی بروید.
- در برگه روش ورود به سیستم، ارائهدهنده ورود به سیستم Google را فعال کنید.
- روی ذخیره کردن کلیک کنید.
فایل پیکربندی Firebase خود را بهروز کنید.
وقتی در کنسول Firebase درخواست شد، فایل پیکربندی Firebase بهروزشده (
google-services.json) را بارگیری کنید که اکنون حاوی اطلاعات کارخواه OAuth موردنیاز برای ورود به سیستم Google است.این فایل پیکربندی بهروزشده را به پروژه «استودیو Android» خود منتقل کنید و فایل پیکربندی مربوطه را که اکنون قدیمی شده است جایگزین کنید. (به افزودن Firebase به پروژه Android مراجعه کنید.)
اصالتسنجی با Firebase
- با دنبال کردن مراحل موجود در
مستندات «مدیر اعتبارنامه»، «ورود به سیستم با Google» را در برنامهتان ادغام کنید. در اینجا دستورالعملهای
سطح بالا آمده است:
- درخواست ورود به سیستم Google را بااستفاده از
GetGoogleIdOptionنمونهسازی کنید. سپس، درخواست «مدیر اطلاعات اعتباری» را بااستفاده ازGetCredentialRequestایجاد کنید:Kotlin
// Instantiate a Google sign-in request val googleIdOption = GetGoogleIdOption.Builder() // Your server's client ID, not your Android client ID. .setServerClientId(getString(R.string.default_web_client_id)) // Only show accounts previously used to sign in. .setFilterByAuthorizedAccounts(true) .build() // Create the Credential Manager request val request = GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build()
Java
// Instantiate a Google sign-in request GetGoogleIdOption googleIdOption = new GetGoogleIdOption.Builder() .setFilterByAuthorizedAccounts(true) .setServerClientId(getString(R.string.default_web_client_id)) .build(); // Create the Credential Manager request GetCredentialRequest request = new GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build();
در درخواست بالا، باید شناسه کارخواه «سرور» خود را به متد
setServerClientIdارسال کنید. برای پیدا کردن شناسه کارخواه OAuth 2.0:- صفحه اطلاعات اعتباری را در کنسول Google Cloud باز کنید.
- شناسه کارخواه نوع برنامه وب شناسه کارخواه OAuth 2.0 سرور پشتیبان شما است.
- بررسی کنید که پساز ادغام «ورود به سیستم با Google»، فعالیت ورود به سیستم شما کد مشابه زیر داشته باشد:
Kotlin
private fun handleSignIn(credential: Credential) { // Check if credential is of type Google ID if (credential is CustomCredential && credential.type == TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) { // Create Google ID Token val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data) // Sign in to Firebase with using the token firebaseAuthWithGoogle(googleIdTokenCredential.idToken) } else { Log.w(TAG, "Credential is not of type Google ID!") } }
Java
private void handleSignIn(Credential credential) { // Check if credential is of type Google ID if (credential instanceof CustomCredential customCredential && credential.getType().equals(TYPE_GOOGLE_ID_TOKEN_CREDENTIAL)) { // Create Google ID Token Bundle credentialData = customCredential.getData(); GoogleIdTokenCredential googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credentialData); // Sign in to Firebase with using the token firebaseAuthWithGoogle(googleIdTokenCredential.getIdToken()); } else { Log.w(TAG, "Credential is not of type Google ID!"); } }
- درخواست ورود به سیستم Google را بااستفاده از
- در روش
onCreateفعالیت ورود به سیستم، نمونه همرسانیشده شیءFirebaseAuthرا دریافت کنید:Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- هنگام مقداردهی اولیه «فعالیت»، بررسی کنید که آیا کاربر درحالحاضر به سیستم وارد شده است یا نه:
Kotlin
override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
- اکنون نشان شناسایی Google کاربر را که در مرحله ۱ ایجاد شده است دریافت کنید، آن را با اطلاعات اعتباری Firebase مبادله کنید،
و بااستفاده از اطلاعات اعتباری Firebase در Firebase اصالتسنجی کنید:
اگر تماس با
Kotlin
private fun firebaseAuthWithGoogle(idToken: String) { val credential = GoogleAuthProvider.getCredential(idToken, null) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user Log.w(TAG, "signInWithCredential:failure", task.exception) updateUI(null) } } }
Java
private void firebaseAuthWithGoogle(String idToken) { AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, task -> { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user Log.w(TAG, "signInWithCredential:failure", task.getException()); updateUI(null); } }); }
signInWithCredentialموفقیتآمیز باشد، میتوانید از روشgetCurrentUserبرای دریافت دادههای حساب کاربر استفاده کنید.
مراحل بعدی
پساز اینکه کاربر برای اولینبار به سیستم وارد شد، حساب کاربری جدیدی ایجاد میشود و به اطلاعات اعتباری—یعنی نام کاربری و گذرواژه، شماره تلفن، یا اطلاعات ارائهدهنده اصالتسنجی—که کاربر با آن به سیستم وارد شده است پیوند داده میشود. این حساب جدید بهعنوان بخشی از پروژه Firebase شما ذخیره میشود و میتوان از آن برای شناسایی کاربر در همه برنامههای پروژه شما، صرفنظر از نحوه ورود کاربر به سیستم، استفاده کرد.
در برنامههایتان، میتوانید اطلاعات نمایه پایه کاربر را از
FirebaseUserشیء دریافت کنید. به مدیریت کاربران مراجعه کنید.در Firebase Realtime Database و Cloud Storage قوانین امنیتی، میتوانید شناسه کاربر یکتای کاربر واردشده به سیستم را از متغیر
authدریافت کنید و از آن برای کنترل دادههایی که کاربر میتواند به آنها دسترسی داشته باشد استفاده کنید.
میتوانید به کاربران اجازه دهید با پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربری موجود بااستفاده از چندین ارائهدهنده اصالتسنجی به سیستم برنامهتان وارد شوند.
برای خارج کردن کاربر از سیستم،
signOut را فراخوانی کنید. همچنین باید وضعیت اطلاعات اعتباری کاربر فعلی را از همه ارائهدهندگان اطلاعات اعتباری پاک کنید، همانطور که در مستندات Credential Manager توصیه شده است:
Kotlin
private fun signOut() { // Firebase sign out auth.signOut() // When a user signs out, clear the current user credential state from all credential providers. lifecycleScope.launch { try { val clearRequest = ClearCredentialStateRequest() credentialManager.clearCredentialState(clearRequest) updateUI(null) } catch (e: ClearCredentialException) { Log.e(TAG, "Couldn't clear user credentials: ${e.localizedMessage}") } } }
Java
private void signOut() { // Firebase sign out mAuth.signOut(); // When a user signs out, clear the current user credential state from all credential providers. ClearCredentialStateRequest clearRequest = new ClearCredentialStateRequest(); credentialManager.clearCredentialStateAsync( clearRequest, new CancellationSignal(), Executors.newSingleThreadExecutor(), new CredentialManagerCallback<>() { @Override public void onResult(@NonNull Void result) { updateUI(null); } @Override public void onError(@NonNull ClearCredentialException e) { Log.e(TAG, "Couldn't clear user credentials: " + e.getLocalizedMessage()); } }); }