Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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

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

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

ก่อนที่คุณจะเริ่ม

  1. เพิ่ม Firebase ในโปรเจ็กต์ Android ของคุณ หากยังไม่ได้ ทำ

  2. เพิ่มการอ้างอิงสำหรับ FirebaseUI ในไฟล์ build.gradle ระดับแอป หากคุณต้องการรองรับการลงชื่อเข้าใช้ด้วย Facebook หรือ Twitter ให้ใส่ SDK ของ Facebook และ Twitter ด้วย:

    dependencies {
        // ...
    
        implementation 'com.firebaseui:firebase-ui-auth:6.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:4.x'
    
        // Required only if Twitter login support is required
        // Find the latest Twitter SDK releases here: https://goo.gl/E5wZvQ
        implementation 'com.twitter.sdk.android:twitter-core:3.x'
    }
    

    FirebaseUI Auth SDK มีการอ้างอิงแบบ Transitive บน 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>
      <!-- Twitter consumer key and secret -->
      <string name="twitter_consumer_key" translatable="false">YOUR_CONSUMER_KEY</string>
      <string name="twitter_consumer_secret" translatable="false">YOUR_CONSUMER_SECRET</string>
    </resources>
    

เข้าสู่ระบบ

หากต้องการเริ่มขั้นตอนการลงชื่อเข้าใช้ FirebaseUI ให้สร้างเจตนาในการลงชื่อเข้าใช้ด้วยวิธีการลงชื่อเข้าใช้ที่คุณต้องการ:

Java

52eddced 73

โคตรลิน + 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
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN)

เมื่อขั้นตอนการลงชื่อเข้าใช้เสร็จสมบูรณ์คุณจะได้รับผลลัพธ์ใน onActivityResult :

Java

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {
        IdpResponse response = IdpResponse.fromResultIntent(data);

        if (resultCode == 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

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == RC_SIGN_IN) {
        val response = IdpResponse.fromResultIntent(data)

        if (resultCode == Activity.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. ในส่วนเดียวกันให้เปิดใช้วิธีการลงชื่อเข้าใช้ ลิงก์อีเมล (การลงชื่อเข้าใช้แบบไม่ใช้รหัสผ่าน) แล้วคลิก บันทึก

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

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

    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();
    
    startActivityForResult(
            AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setAvailableProviders(Arrays.asList(
                            new AuthUI.IdpConfig.EmailBuilder().enableEmailLinkSignIn()
                            .setActionCodeSettings(actionCodeSettings).build())
                    .build(),
            RC_SIGN_IN);
    
    
  5. หากคุณต้องการจับลิงก์ในกิจกรรมเฉพาะโปรดทำตามขั้นตอนที่ระบุไว้ ที่นี่ มิฉะนั้นลิงก์จะเปลี่ยนเส้นทางไปยังกิจกรรมตัวเรียกใช้งานของคุณ

  6. เมื่อคุณได้รับลิงก์ในรายละเอียดคุณจะต้องโทรยืนยันว่าเราสามารถจัดการให้คุณได้ ถ้าทำได้คุณต้องส่งให้เราผ่าน setEmailLink

    if (AuthUI.canHandleIntent(getIntent())) {
        if (getIntent().getExtras() == null) {
                return;
            }
            String link = getIntent().getExtras().getString(ExtraConstants.EMAIL_LINK_SIGN_IN);
            if (link != null) {
                startActivityForResult(
                        AuthUI.getInstance()
                                .createSignInIntentBuilder()
                                .setEmailLink(link)
                                .setAvailableProviders(getAvailableProviders())
                                .build(),
                        RC_SIGN_IN);
            }
    }
    
  7. รองรับการ ลงชื่อเข้าใช้ลิงก์อีเมลข้ามอุปกรณ์ซึ่งหมายความว่าลิงก์ที่ส่งผ่านแอป Android ของคุณสามารถใช้เพื่อเข้าสู่ระบบบนเว็บหรือแอป iOS ของคุณได้ โดยค่าเริ่มต้นจะเปิดใช้งานการรองรับข้ามอุปกรณ์ คุณสามารถปิดใช้งานได้โดยเรียก 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) {
                // ...
            }
        });

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

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo)      // Set logo drawable
                .setTheme(R.style.MySuperAppTheme)      // Set theme
                .build(),
        RC_SIGN_IN);

โคตรลิน + KTX

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo) // Set logo drawable
                .setTheme(R.style.MySuperAppTheme) // Set theme
                .build(),
        RC_SIGN_IN)

คุณยังสามารถกำหนดนโยบายความเป็นส่วนตัวและเงื่อนไขการบริการที่กำหนดเองได้:

Java

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN);

โคตรลิน + KTX

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN)

ขั้นตอนถัดไป