
FirebaseUI کتابخانهای است که بر پایهی SDK احراز هویت فایربیس ساخته شده و جریانهای رابط کاربری drop-in را برای استفاده در برنامهی شما فراهم میکند. FirebaseUI مزایای زیر را ارائه میدهد:
- ارائه دهندگان متعدد - جریانهای ورود به سیستم برای ایمیل/رمز عبور، لینک ایمیل، احراز هویت تلفنی، ورود به سیستم با گوگل، ورود به سیستم با فیسبوک، ورود به سیستم با توییتر و ورود به سیستم با گیتهاب.
- مدیریت حساب - جریانهایی برای انجام وظایف مدیریت حساب، مانند ایجاد حساب و تنظیم مجدد رمز عبور.
- پیوند حساب - جریانها برای پیوند ایمن حسابهای کاربری در بین ارائهدهندگان هویت.
- ارتقاء کاربر ناشناس - برای ارتقاء ایمن کاربران ناشناس، جریان دارد.
- تمهای سفارشی - ظاهر FirebaseUI را متناسب با برنامه خود سفارشی کنید. همچنین، از آنجا که FirebaseUI متنباز است، میتوانید پروژه را تغییر داده و دقیقاً مطابق با نیازهای خود سفارشی کنید.
- مدیریت اعتبارنامه - ادغام خودکار با مدیریت اعتبارنامه برای ورود سریع بین دستگاههای مختلف.
قبل از اینکه شروع کنی
اگر هنوز Firebase را به پروژه اندروید خود اضافه نکردهاید، آن را اضافه کنید.
وابستگیهای FirebaseUI را به فایل
build.gradle(.kts)در سطح برنامه خود اضافه کنید. اگر میخواهید از ورود با فیسبوک یا توییتر پشتیبانی کنید، SDK های فیسبوک و توییتر را نیز اضافه کنید:dependencies { // ... implementation("com.firebaseui:firebase-ui-auth:9.0.0") // Required only if Facebook login support is required // Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94 implementation("com.facebook.android:facebook-android-sdk:8.x") }کیت توسعه نرمافزار FirebaseUI Auth وابستگیهای انتقالی به کیت توسعه نرمافزار Firebase و کیت توسعه نرمافزار سرویسهای Google Play دارد.
در کنسول Firebase ، به بخش امنیت > احراز هویت بروید.
در تب روش ورود ، ارائهدهندگان ورود به سیستمی را که میخواهید پشتیبانی کنند، فعال کنید. برخی از ارائهدهندگان ورود به سیستم به اطلاعات بیشتری نیاز دارند که معمولاً در کنسول توسعهدهندگان سرویس موجود است.
اگر ورود به سیستم گوگل را فعال کردهاید:
فایل پیکربندی Firebase خود را بهروزرسانی کنید.
وقتی در کنسول Firebase از شما خواسته شد، فایل پیکربندی Firebase بهروزرسانیشده (
google-services.json) را دانلود کنید، که اکنون شامل اطلاعات کلاینت OAuth مورد نیاز برای ورود به سیستم گوگل است.این فایل پیکربندی بهروزرسانیشده را به پروژه اندروید استودیو خود منتقل کنید و آن را جایگزین فایل پیکربندی مربوطه که اکنون منسوخ شده است، کنید. (به بخش افزودن فایربیس به پروژه اندروید خود مراجعه کنید.)
اگر قبلاً اثر انگشت SHA-1 برنامه خود را مشخص نکردهاید، آن را مشخص کنید.
در کنسول Firebase ، به مسیر زیر بروید:
> برگه عمومی . به پایین صفحه و قسمت «برنامههای شما» بروید، برنامه اندروید خود را انتخاب کنید و اثر انگشت SHA-1 خود را در قسمت «اثر انگشت گواهی SHA» اضافه کنید.
برای جزئیات بیشتر در مورد نحوه دریافت اثر انگشت SHA برنامه خود، به بخش احراز هویت کلاینت خود مراجعه کنید.
اگر از ورود با فیسبوک یا توییتر پشتیبانی میکنید، منابع رشتهای را به
strings.xmlاضافه کنید که اطلاعات شناسایی مورد نیاز هر ارائهدهنده را مشخص کند:<resources> <!-- Facebook application ID and custom URL scheme (app ID prefixed by 'fb'). --> <string name="facebook_application_id" translatable="false">YOUR_APP_ID</string> <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_APP_ID</string> </resources>
ورود
یک ActivityResultLauncher ایجاد کنید که یک callback برای قرارداد نتیجه FirebaseUI Activity ثبت کند:
Kotlin
// See: https://developer.android.com/training/basics/intents/result private val signInLauncher = registerForActivityResult( FirebaseAuthUIActivityResultContract(), ) { res -> this.onSignInResult(res) }
Java
// See: https://developer.android.com/training/basics/intents/result private final ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult( new FirebaseAuthUIActivityResultContract(), new ActivityResultCallback<FirebaseAuthUIAuthenticationResult>() { @Override public void onActivityResult(FirebaseAuthUIAuthenticationResult result) { onSignInResult(result); } } );
برای شروع جریان ورود به سیستم FirebaseUI، یک هدف ورود به سیستم با متدهای ورود به سیستم دلخواه خود ایجاد کنید:
Kotlin
// Choose authentication providers val providers = arrayListOf( AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.PhoneBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build(), AuthUI.IdpConfig.FacebookBuilder().build(), AuthUI.IdpConfig.TwitterBuilder().build(), ) // Create and launch sign-in intent val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
// Choose authentication providers List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder().build(), new AuthUI.IdpConfig.PhoneBuilder().build(), new AuthUI.IdpConfig.GoogleBuilder().build(), new AuthUI.IdpConfig.FacebookBuilder().build(), new AuthUI.IdpConfig.TwitterBuilder().build()); // Create and launch sign-in intent Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
وقتی جریان ورود به سیستم کامل شد، نتیجه را در onSignInResult دریافت خواهید کرد:
Kotlin
private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) { val response = result.idpResponse if (result.resultCode == RESULT_OK) { // Successfully signed in val user = FirebaseAuth.getInstance().currentUser // ... } else { // Sign in failed. If response is null the user canceled the // sign-in flow using the back button. Otherwise check // response.getError().getErrorCode() and handle the error. // ... } }
Java
private void onSignInResult(FirebaseAuthUIAuthenticationResult result) { IdpResponse response = result.getIdpResponse(); if (result.getResultCode() == RESULT_OK) { // Successfully signed in FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); // ... } else { // Sign in failed. If response is null the user canceled the // sign-in flow using the back button. Otherwise check // response.getError().getErrorCode() and handle the error. // ... } }
روشهای ورود به سیستم را تنظیم کنید
احراز هویت لینک ایمیل
در کنسول Firebase ، به مسیر Security > Authentication بروید.
در تب روش ورود ، روش ورود با ایمیل/رمز عبور را فعال کنید. توجه داشته باشید که برای استفاده از ورود با لینک ایمیل، باید ورود با ایمیل/رمز عبور فعال باشد.
در همان بخش، روش ورود به سیستم از طریق لینک ایمیل (ورود بدون رمز عبور) را فعال کنید و روی ذخیره کلیک کنید.
همچنین برای استفاده از ورود با ایمیل-لینک، باید Firebase Dynamic Links فعال کنید:
در کنسول Firebase ، به DevOps & Engagement > Dynamic Links بروید.
روی شروع کلیک کنید و سپس یک دامنه اضافه کنید. دامنهای که اینجا انتخاب میکنید در لینکهای ایمیل ارسالی به کاربران شما نمایش داده خواهد شد.
شما میتوانید با فراخوانی
enableEmailLinkSignInدر یک نمونهEmailBuilderورود از طریق لینک ایمیل را در FirebaseUI فعال کنید. همچنین باید یک شیءActionCodeSettingsمعتبر باsetHandleCodeInAppکه روی true تنظیم شده است، ارائه دهید.علاوه بر این، باید URL ای که به
setUrlارسال میکنید را در لیست سفید قرار دهید:در کنسول Firebase ، به تب Security > Authentication > Settings بروید.
در بخش دامنههای مجاز ، روی افزودن دامنه کلیک کنید و دامنه خود را اضافه کنید.
Kotlin
val actionCodeSettings = ActionCodeSettings.newBuilder() .setAndroidPackageName( // yourPackageName= "...", // installIfNotAvailable= true, // minimumVersion= null, ) .setHandleCodeInApp(true) // This must be set to true .setUrl("https://google.com") // This URL needs to be whitelisted .build() val providers = listOf( EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build(), ) val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder() .setAndroidPackageName( /* yourPackageName= */ "...", /* installIfNotAvailable= */ true, /* minimumVersion= */ null) .setHandleCodeInApp(true) // This must be set to true .setUrl("https://google.com") // This URL needs to be whitelisted .build(); List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build() ); Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
اگر میخواهید لینک را در یک اکتیویتی خاص دریافت کنید، لطفاً مراحل ذکر شده در اینجا را دنبال کنید. در غیر این صورت، لینک به اکتیویتی لانچر شما هدایت میشود.
وقتی لینک عمیق را گرفتید، باید تأیید کنید که ما میتوانیم آن را برای شما مدیریت کنیم. اگر بتوانیم، باید آن را از طریق
setEmailLinkبه ما ارسال کنید.Kotlin
if (AuthUI.canHandleIntent(intent)) { val extras = intent.extras ?: return val link = extras.getString("email_link_sign_in") if (link != null) { val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent) } }
Java
if (AuthUI.canHandleIntent(getIntent())) { if (getIntent().getExtras() == null) { return; } String link = getIntent().getExtras().getString("email_link_sign_in"); if (link != null) { Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent); } }
ورود از طریق لینک ایمیل بین دستگاههای مختلف (اختیاری) پشتیبانی میشود، به این معنی که لینک ارسال شده از طریق برنامه اندروید شما میتواند برای ورود به سیستم در برنامههای وب یا اپل شما استفاده شود. به طور پیشفرض، پشتیبانی بین دستگاههای مختلف فعال است. میتوانید با فراخوانی
setForceSameDeviceدر نمونهEmailBuilder، آن را غیرفعال کنید.برای اطلاعات بیشتر به FirebaseUI-Web و FirebaseUI-iOS مراجعه کنید.
خروج
FirebaseUI روشهای راحتی برای خروج از سیستم احراز هویت Firebase و همچنین همه ارائه دهندگان هویت اجتماعی ارائه میدهد:
Kotlin
AuthUI.getInstance() .signOut(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .signOut(this) .addOnCompleteListener(new OnCompleteListener<Void>() { public void onComplete(@NonNull Task<Void> task) { // ... } });
همچنین میتوانید حساب کاربری را به طور کامل حذف کنید:
Kotlin
AuthUI.getInstance() .delete(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .delete(this) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // ... } });
سفارشیسازی
به طور پیشفرض FirebaseUI از AppCompat برای قالببندی استفاده میکند، به این معنی که به طور طبیعی طرح رنگی برنامه شما را اتخاذ میکند. اگر به سفارشیسازی بیشتری نیاز دارید، میتوانید یک قالب و یک لوگو را به سازندهی Intent ورود ارسال کنید:
Kotlin
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build(); signInLauncher.launch(signInIntent);
همچنین میتوانید یک سیاست حفظ حریم خصوصی و شرایط خدمات سفارشی تنظیم کنید:
Kotlin
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html", ) .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html") .build(); signInLauncher.launch(signInIntent);
مراحل بعدی
- برای اطلاعات بیشتر در مورد استفاده و سفارشیسازی FirebaseUI، به فایل README در GitHub مراجعه کنید.
- اگر در FirebaseUI مشکلی پیدا کردید و میخواهید آن را گزارش دهید، از ردیاب مشکل GitHub استفاده کنید.