FirebaseUI کتابخانه ای است که در بالای Firebase Authentication SDK ساخته شده است که جریان های رابط کاربری را برای استفاده در برنامه شما فراهم می کند. FirebaseUI مزایای زیر را ارائه می دهد:
- چندین ارائهدهنده - جریانهای ورود به سیستم برای ایمیل/گذرواژه، پیوند ایمیل، احراز هویت تلفن، ورود به سیستم Google، ورود به فیسبوک، ورود به سیستم توییتر و ورود به گیت هاب.
- مدیریت حساب - برای انجام وظایف مدیریت حساب، مانند ایجاد حساب و بازنشانی رمز عبور جریان دارد.
- پیوند حساب - برای پیوند ایمن حسابهای کاربری در بین ارائهدهندگان هویت جریان دارد.
- ارتقاء کاربر ناشناس - برای ارتقای ایمن کاربران ناشناس جریان دارد.
- تم های سفارشی - ظاهر FirebaseUI را مطابق با برنامه خود سفارشی کنید. همچنین، از آنجایی که FirebaseUI منبع باز است، می توانید پروژه را فورک کرده و آن را دقیقاً مطابق با نیازهای خود سفارشی کنید.
- Smart Lock for Passwords - ادغام خودکار با Smart Lock for Passwords برای ورود سریع از طریق دستگاه.
قبل از شروع
اگر قبلاً این کار را نکردهاید، Firebase را به پروژه Android خود اضافه کنید .
وابستگی های FirebaseUI را به فایل
build.gradle
سطح برنامه خود اضافه کنید. اگر میخواهید از ورود به سیستم با فیسبوک یا توییتر پشتیبانی کنید، SDKهای Facebook و Twitter را نیز وارد کنید:dependencies { // ... implementation 'com.firebaseui:firebase-ui-auth:7.2.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 SDK وابستگی های انتقالی به Firebase SDK و Google Play Services SDK دارد.
در کنسول Firebase ، بخش Authentication را باز کنید و روشهای ورود به سیستمی را که میخواهید پشتیبانی کنید، فعال کنید. برخی از روشهای ورود به سیستم به اطلاعات بیشتری نیاز دارند که معمولاً در کنسول توسعهدهنده سرویس موجود است.
اگر Google Sign-in را فعال کرده باشید:
هنگامی که در کنسول از شما خواسته شد، فایل پیکربندی Firebase به روز شده (
google-services.json
) را دانلود کنید، که اکنون حاوی اطلاعات سرویس گیرنده OAuth مورد نیاز برای ورود به سیستم Google است.این فایل پیکربندی به روز شده را به پروژه Android Studio خود منتقل کنید و جایگزین فایل پیکربندی متناظر منسوخ شده است. ( به افزودن Firebase به پروژه Android خود مراجعه کنید.)
اگر هنوز اثر انگشت SHA برنامه خود را مشخص نکردهاید، این کار را از صفحه تنظیمات کنسول Firebase انجام دهید. برای جزئیات نحوه دریافت اثر انگشت 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
ایجاد کنید که یک تماس پاسخ برای قرارداد نتیجه فعالیت FirebaseUI ثبت می کند:
Kotlin+KTX
// 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+KTX
// 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+KTX
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 ، بخش Authentication را باز کنید. در برگه روش ورود به سیستم ، ارائه دهنده ایمیل/گذرواژه را فعال کنید. توجه داشته باشید که ورود ایمیل/رمز عبور برای استفاده از ورود به سیستم پیوند ایمیل باید فعال باشد.
در همان بخش، روش ورود پیوند ایمیل (ورود بدون رمز عبور) را فعال کنید و روی ذخیره کلیک کنید.
همچنین باید Firebase Dynamic Links را فعال کنید تا از ورود به ایمیل لینک استفاده کنید. در کنسول Firebase ، روی پیوندهای پویا در زیر Engage در نوار پیمایش کلیک کنید. روی Getting Start کلیک کنید و دامنه اضافه کنید. دامنه ای که در اینجا انتخاب می کنید در پیوندهای ایمیل ارسال شده به کاربران شما منعکس می شود.
میتوانید با فراخوانی
enableEmailLinkSignIn
در یک نمونهEmailBuilder
، ورود پیوند ایمیل را در FirebaseUI فعال کنید. همچنین باید یک شیActionCodeSettings
معتبر باsetHandleCodeInApp
که روی true تنظیم شده است، ارائه دهید. علاوه بر این، باید URL را که بهsetUrl
ارسال میکنید در لیست سفید قرار دهید، که میتواند در کنسول Firebase ، در قسمت Authentication -> Sign in Methods -> Authorized domains انجام شود.Kotlin+KTX
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+KTX
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); } }
ورود به سیستم پیوند ایمیل اختیاری دستگاه متقاطع پشتیبانی میشود، به این معنی که پیوند ارسال شده از طریق برنامه Android شما میتواند برای ورود به وب یا برنامههای اپل استفاده شود. به طور پیش فرض، پشتیبانی از دستگاه های متقابل فعال است. می توانید با فراخوانی
setForceSameDevice
در نمونهEmailBuilder
آن را غیرفعال کنید.برای اطلاعات بیشتر به FirebaseUI-Web و FirebaseUI-iOS مراجعه کنید.
از سیستم خارج شوید
FirebaseUI روشهای راحتی را برای خروج از احراز هویت Firebase و همچنین همه ارائهدهندگان هویت اجتماعی ارائه میکند:
Kotlin+KTX
AuthUI.getInstance() .signOut(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .signOut(this) .addOnCompleteListener(new OnCompleteListener<Void>() { public void onComplete(@NonNull Task<Void> task) { // ... } });
همچنین می توانید حساب کاربری کاربر را به طور کامل حذف کنید:
Kotlin+KTX
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+KTX
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+KTX
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 استفاده کنید.