Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

با FirebaseUI به راحتی ورود به سیستم را به برنامه Android خود اضافه کنید

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

FirebaseUI کتابخانه ای است که در بالای Firebase Authentication SDK ساخته شده است که جریان های رابط کاربری را برای استفاده در برنامه شما فراهم می کند. FirebaseUI مزایای زیر را ارائه می دهد:

  • چندین ارائه‌دهنده - جریان‌های ورود به سیستم برای ایمیل/گذرواژه، پیوند ایمیل، احراز هویت تلفن، ورود به سیستم Google، ورود به فیس‌بوک، ورود توییتر و ورود به GitHub.
  • مدیریت حساب - برای انجام وظایف مدیریت حساب، مانند ایجاد حساب و بازنشانی رمز عبور جریان دارد.
  • پیوند حساب - برای پیوند ایمن حساب های کاربری در بین ارائه دهندگان هویت جریان دارد.
  • ارتقاء کاربر ناشناس - برای ارتقای ایمن کاربران ناشناس جریان دارد.
  • تم های سفارشی - ظاهر FirebaseUI را مطابق با برنامه خود سفارشی کنید. همچنین، از آنجایی که FirebaseUI منبع باز است، می توانید پروژه را فورک کرده و آن را دقیقاً مطابق با نیاز خود سفارشی کنید.
  • Smart Lock for Passwords - ادغام خودکار با Smart Lock for Passwords برای ورود سریع از طریق دستگاه.

قبل از اینکه شروع کنی

  1. اگر قبلاً این کار را نکرده‌اید، Firebase را به پروژه Android خود اضافه کنید .

  2. وابستگی های FirebaseUI را به فایل build.gradle سطح برنامه خود اضافه کنید. اگر می خواهید از ورود به سیستم با فیس بوک یا توییتر پشتیبانی کنید، SDK های فیس بوک و توییتر را نیز وارد کنید:

    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 دارد.

  3. در کنسول Firebase ، بخش Authentication را باز کنید و روش‌های ورود به سیستمی را که می‌خواهید پشتیبانی کنید فعال کنید. برخی از روش‌های ورود به سیستم به اطلاعات بیشتری نیاز دارند که معمولاً در کنسول توسعه‌دهنده سرویس موجود است.

  4. اگر از Google Sign-in پشتیبانی می‌کنید و هنوز اثر انگشت SHA-1 برنامه خود را مشخص نکرده‌اید، این کار را از صفحه تنظیمات کنسول Firebase انجام دهید. برای جزئیات در مورد نحوه دریافت اثر انگشت SHA-1 برنامه خود به تأیید اعتبار مشتری خود مراجعه کنید.

  5. اگر از ورود با فیس بوک یا توییتر پشتیبانی می کنید، منابع رشته ای را به 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 Activity ثبت می کند:

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);
            }
        }
);

Kotlin+KTX

// See: https://developer.android.com/training/basics/intents/result
private val signInLauncher = registerForActivityResult(
        FirebaseAuthUIActivityResultContract()
) { res ->
    this.onSignInResult(res)
}

برای شروع جریان ورود به سیستم FirebaseUI، با روش‌های ورود به سیستم ترجیحی خود، قصد ورود ایجاد کنید:

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);

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)

هنگامی که جریان ورود به سیستم کامل شد، نتیجه را در onSignInResult دریافت خواهید کرد:

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.
        // ...
    }
}

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.
        // ...
    }
}

روش های ورود به سیستم را تنظیم کنید

  1. در کنسول Firebase ، بخش Authentication را باز کنید. در برگه روش ورود به سیستم، ارائه دهنده ایمیل/گذرواژه را فعال کنید. توجه داشته باشید که ورود ایمیل/رمز عبور برای استفاده از ورود به سیستم پیوند ایمیل باید فعال باشد.

  2. در همان بخش، روش ورود پیوند ایمیل (ورود بدون رمز عبور) را فعال کرده و روی ذخیره کلیک کنید.

  3. همچنین باید Firebase Dynamic Links را برای استفاده از ورود به ایمیل پیوند فعال کنید. در کنسول Firebase ، روی پیوندهای پویا در زیر Engage در نوار پیمایش کلیک کنید. روی Getting Start کلیک کنید و دامنه اضافه کنید. دامنه ای که در اینجا انتخاب می کنید در پیوندهای ایمیل ارسال شده به کاربران شما منعکس می شود.

  4. می‌توانید با فراخوانی enableEmailLinkSignIn در یک نمونه EmailBuilder ، ورود به پیوند ایمیل را در FirebaseUI فعال کنید. همچنین باید یک شی ActionCodeSettings معتبر با setHandleCodeInApp که روی true تنظیم شده است، ارائه دهید. علاوه بر این، باید URL را که به setUrl ارسال می‌کنید در لیست سفید قرار دهید، که می‌تواند در کنسول Firebase ، در قسمت Authentication -> Sign in Methods -> Authorized domains انجام شود.

    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);

    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)
  5. اگر می‌خواهید پیوند را در یک فعالیت خاص دریافت کنید، لطفاً مراحل ذکر شده در اینجا را دنبال کنید. در غیر این صورت، پیوند به فعالیت راه‌انداز شما هدایت می‌شود.

  6. هنگامی که پیوند عمیق را دریافت کردید، باید تماس بگیرید و تأیید کنید که ما می توانیم آن را برای شما انجام دهیم. اگر می توانیم، باید آن را از طریق setEmailLink به ما ارسال کنید.

    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);
        }
    }

    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)
        }
    }
  7. ورود به سیستم پیوند ایمیل اختیاری دستگاه متقاطع پشتیبانی می‌شود، به این معنی که پیوند ارسال شده از طریق برنامه Android شما می‌تواند برای ورود به وب یا برنامه‌های اپل استفاده شود. به طور پیش فرض، پشتیبانی از دستگاه های متقابل فعال است. می توانید با فراخوانی setForceSameDevice در نمونه EmailBuilder آن را غیرفعال کنید.

    برای اطلاعات بیشتر به FirebaseUI-Web و FirebaseUI-iOS مراجعه کنید.

خروج از سیستم

FirebaseUI روش‌های راحتی را برای خروج از Firebase Authentication و همچنین همه ارائه‌دهندگان هویت اجتماعی ارائه می‌کند:

Java

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener {
            // ...
        }

همچنین می توانید حساب کاربری کاربر را به طور کامل حذف کنید:

Java

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener {
            // ...
        }

سفارشی سازی

FirebaseUI به طور پیش‌فرض از AppCompat برای قالب‌بندی استفاده می‌کند، به این معنی که به طور طبیعی از طرح رنگ برنامه شما استفاده می‌کند. اگر به سفارشی‌سازی بیشتر نیاز دارید، می‌توانید یک طرح زمینه و یک نشان‌واره را به سازنده Intent وارد کنید:

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)
        .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)
        .setTosAndPrivacyPolicyUrls(
                "https://example.com/terms.html",
                "https://example.com/privacy.html")
        .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)

مراحل بعدی

  • برای اطلاعات بیشتر در مورد استفاده و سفارشی سازی FirebaseUI، فایل README را در GitHub ببینید.
  • اگر مشکلی در FirebaseUI پیدا کردید و می‌خواهید آن را گزارش کنید، از ردیاب مشکل GitHub استفاده کنید.