Catch up on everthing we announced at this year's Firebase Summit. Learn more

เพิ่มการลงชื่อเข้าใช้แอป Android ของคุณอย่างง่ายดายด้วย FirebaseUI

FirebaseUI เป็นห้องสมุดที่สร้างขึ้นบนด้านบนของ Firebase รับรองความถูกต้อง SDK ที่ให้หล่นใน UI ไหลสำหรับการใช้งานในแอป FirebaseUI ให้ประโยชน์ดังต่อไปนี้:

  • หลายผู้ให้บริการ - การลงชื่อเข้าใช้กระแสอีเมล์ / รหัสผ่านที่เชื่อมโยงอีเมล์, การตรวจสอบโทรศัพท์ลงชื่อเข้าใช้ Google, Facebook เข้าสู่ระบบเข้าสู่ระบบทวิตเตอร์และ GitHub เข้าสู่ระบบ
  • การจัดการบัญชี - ไหลไปจัดการงานการจัดการบัญชีเช่นการสร้างบัญชีและตั้งค่ารหัสผ่าน
  • บัญชีเชื่อมโยง - กระแสบัญชีให้กับผู้ใช้เชื่อมโยงได้อย่างปลอดภัยทั่วทั้งผู้ให้บริการตัวตน
  • ไม่ประสงค์ออกนามอัพเกรดผู้ใช้ - ไหลไปได้อย่างปลอดภัยอัพเกรดผู้ใช้ที่ไม่ระบุชื่อ
  • ธีมที่กำหนดเอง - ปรับแต่งรูปลักษณ์ของ FirebaseUI เพื่อให้ตรงกับแอปของคุณ นอกจากนี้ เนื่องจาก FirebaseUI เป็นโอเพ่นซอร์ส คุณจึงสามารถแยกโปรเจ็กต์และปรับแต่งให้ตรงตามความต้องการของคุณได้
  • Smart Lock สำหรับรหัส - บูรณาการโดยอัตโนมัติด้วย สมาร์ท Lock สำหรับรหัสผ่าน ได้อย่างรวดเร็วข้ามอุปกรณ์การลงชื่อเข้าใช้

ก่อนจะเริ่ม

  1. หากคุณยังไม่ได้ เพิ่ม Firebase กับโครงการ Android ของคุณ

  2. เพิ่มการอ้างอิงสำหรับ FirebaseUI เพื่อ app ระดับ build.gradle ไฟล์ หากคุณต้องการสนับสนุนการลงชื่อเข้าใช้ด้วย Facebook หรือ Twitter ให้รวม Facebook และ Twitter 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 และ SDK บริการ Google Play

  3. ใน คอนโซล Firebase เปิดส่วนตรวจสอบและเปิดใช้งานการลงชื่อเข้าใช้ในวิธีการที่คุณต้องการที่จะสนับสนุน วิธีการลงชื่อเข้าใช้บางวิธีต้องการข้อมูลเพิ่มเติม ซึ่งมักมีอยู่ในคอนโซลนักพัฒนาซอฟต์แวร์ของบริการ

  4. หากคุณสนับสนุน Google เข้าสู่ระบบและยังไม่ได้ระบุของแอป SHA-1 ลายนิ้วมือทำจาก หน้าการตั้งค่า ของคอนโซล Firebase ดู ตรวจสอบสิทธิ์ลูกค้าของ สำหรับรายละเอียดเกี่ยวกับวิธีการที่จะได้รับของแอป SHA-1 ลายนิ้วมือ

  5. ถ้าคุณสนับสนุนการลงชื่อเข้าใช้ Facebook หรือ Twitter เพิ่มทรัพยากรสตริง 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 กิจกรรม:

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

คอตลิน+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);

คอตลิน+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.
        // ...
    }
}

คอตลิน+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 เปิดการตรวจสอบสิทธิ์ ที่ลงในแท็บวิธีการที่ช่วยให้ผู้ให้บริการอีเมล์ / รหัสผ่าน โปรดทราบว่าต้องเปิดใช้งานการลงชื่อเข้าใช้อีเมล/รหัสผ่านเพื่อใช้การลงชื่อเข้าใช้ลิงก์อีเมล

  2. ในส่วนเดียวกันช่วยให้การเชื่อมโยงอีเมล์ (passwordless ลงชื่อเข้าใช้) เข้าสู่ระบบในวิธีการและคลิกบันทึก

  3. นอกจากนี้คุณยังจะมีการเปิดใช้งาน Firebase แบบไดนามิกลิงค์ไปยังการใช้งานเข้าสู่ระบบอีเมลในการเชื่อมโยง. ใน Firebase คอนโซล คลิกบนลิงก์แบบไดนามิกภายใต้การมีส่วนร่วมในแถบนำทาง คลิกที่เริ่มต้นและเพิ่มโดเมน โดเมนที่คุณเลือกที่นี่จะปรากฏในลิงก์อีเมลที่ส่งถึงผู้ใช้ของคุณ

  4. คุณสามารถเปิดใช้สัญญาณเชื่อมโยงอีเมลใน FirebaseUI โดยการเรียก enableEmailLinkSignIn บน EmailBuilder อินสแตนซ์ นอกจากนี้คุณยังจะต้องให้ถูกต้อง ActionCodeSettings วัตถุที่มี setHandleCodeInApp ชุดจริง นอกจากนี้คุณต้องรายการที่อนุญาต URL ที่คุณส่งผ่านไปยัง setUrl ซึ่งสามารถทำได้ใน Firebase คอนโซล ภายใต้การตรวจสอบ -> เข้าสู่ระบบวิธีการ -> โดเมนที่ได้รับอนุญาต

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

    คอตลิน+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(ExtraConstants.EMAIL_LINK_SIGN_IN);
        if (link != null) {
            Intent signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build();
            signInLauncher.launch(signInIntent);
        }
    }

    คอตลิน+KTX

    if (AuthUI.canHandleIntent(intent)) {
        val extras = intent.extras ?: return
        val link = extras.getString(ExtraConstants.EMAIL_LINK_SIGN_IN)
        if (link != null) {
            val signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build()
            signInLauncher.launch(signInIntent)
        }
    }
  7. ตัวเลือกครอสเข้าสู่ระบบเชื่อมโยงอีเมลอุปกรณ์ในการได้รับการสนับสนุนซึ่งหมายความว่าการเชื่อมโยงที่ส่งผ่านทาง app Android ของคุณสามารถใช้ในการเข้าสู่ระบบในเว็บหรือแอปแอปเปิ้ลของคุณ โดยค่าเริ่มต้น การสนับสนุนข้ามอุปกรณ์จะเปิดใช้งาน คุณสามารถปิดการใช้งานโดยการเรียก setForceSameDevice บน EmailBuilder อินสแตนซ์

    ดู FirebaseUI เว็บ และ FirebaseUI-iOS ของคุณ สำหรับข้อมูลเพิ่มเติม

ออกจากระบบ

FirebaseUI มีวิธีอำนวยความสะดวกในการออกจากระบบตรวจสอบสิทธิ์ Firebase เช่นเดียวกับผู้ให้บริการข้อมูลประจำตัวทางสังคมทั้งหมด:

Java

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

คอตลิน+KTX

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

คุณยังสามารถลบบัญชีผู้ใช้ได้อย่างสมบูรณ์:

Java

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

คอตลิน+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);

คอตลิน+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);

คอตลิน+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