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

รับรองความถูกต้องโดยใช้ Twitter บน Android

คุณสามารถให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase โดยใช้บัญชี Twitter ของตนได้โดยผสานรวมการเข้าสู่ระบบ OAuth ทั่วไปบนเว็บเข้ากับแอปของคุณโดยใช้ Firebase SDK เพื่อดำเนินการตั้งแต่ต้นจนจบขั้นตอนการลงชื่อเข้าใช้

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

ในการลงชื่อเข้าใช้ผู้ใช้โดยใช้บัญชี Twitter ก่อนอื่นคุณต้องเปิดใช้งาน Twitter เป็นผู้ให้บริการลงชื่อเข้าใช้สำหรับโครงการ Firebase ของคุณ:

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

  2. ใน คอนโซล Firebase ให้เปิดส่วนการ ตรวจสอบสิทธิ์
  3. บนแท็บ วิธีการลงชื่อเข้า ใช้ให้เปิดใช้งานผู้ให้บริการ Twitter
  4. เพิ่ม คีย์ API และข้อมูล ลับ API จากคอนโซลนักพัฒนาของผู้ให้บริการไปยังการกำหนดค่าผู้ให้บริการ:
    1. ลงทะเบียนแอปของคุณ เป็น แอปพลิเคชัน สำหรับนักพัฒนาบน Twitter และรับ คีย์ OAuth API และข้อมูล ลับ API ของแอป
    2. ตรวจสอบให้แน่ใจว่า URI ของ Firebase OAuth เปลี่ยนเส้นทาง (เช่น my-app-12345.firebaseapp.com/__/auth/handler ) เป็น URL เรียกกลับการให้สิทธิ์ ในหน้าการตั้งค่าของแอปในการกำหนดค่า แอป Twitter
  5. คลิก บันทึก
  6. ในโครงการระดับ build.gradle ไฟล์ให้แน่ใจว่าจะรวมถึงพื้นที่เก็บข้อมูล Maven ของ Google ในทั้งสองของคุณ buildscript และ allprojects ส่วน

  7. เพิ่มการอ้างอิงสำหรับไลบรารี Android ของ Firebase Authentication ไปยังโมดูลของคุณ (ระดับแอป) ไฟล์ Gradle (โดยปกติคือ app/build.gradle ):

    implementation 'com.google.firebase:firebase-auth:19.4.0'
    
  8. หากคุณยังไม่ได้ระบุลายนิ้วมือ SHA-1 ของแอปให้ทำได้จาก หน้าการตั้งค่า ของคอนโซล Firebase อ้างอิงถึงการ พิสูจน์ตัวตนลูกค้าของคุณ สำหรับรายละเอียดเกี่ยวกับวิธีรับลายนิ้วมือ SHA-1 ของแอป

จัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK

หากคุณกำลังสร้างแอป Android วิธีที่ง่ายที่สุดในการตรวจสอบสิทธิ์ผู้ใช้ด้วย Firebase โดยใช้บัญชี Twitter คือจัดการขั้นตอนการลงชื่อเข้าใช้ทั้งหมดด้วย Firebase Android SDK

ในการจัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase Android SDK ให้ทำตามขั้นตอนเหล่านี้:

  1. สร้างอินสแตนซ์ของ OAuthProvider โดยใช้ Builder ด้วย ID ผู้ให้บริการ Twitter.com

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.com");
    
  2. ทางเลือก : ระบุพารามิเตอร์ OAuth ที่กำหนดเองเพิ่มเติมที่คุณต้องการส่งพร้อมกับคำขอ OAuth

    // Target specific email with login hint.
    provider.addCustomParameter("lang", "fr");
    

    สำหรับพารามิเตอร์ที่ Twitter รองรับโปรดดู เอกสาร ของ Twitter OAuth โปรดทราบว่าคุณไม่สามารถส่งผ่านพารามิเตอร์ที่จำเป็นของ Firebase ด้วย setCustomParameters() พารามิเตอร์เหล่านี้ ได้แก่ client_id , response_type , redirect_uri , state , scope และ response_mode

  3. ตรวจสอบสิทธิ์กับ Firebase โดยใช้ออบเจ็กต์ผู้ให้บริการ OAuth โปรดทราบว่าการดำเนินการนี้จะเข้าควบคุม UI ของคุณโดยการเปิด แท็บ Chrome ที่กำหนดเอง ดังนั้นอย่าอ้างอิงกิจกรรมของคุณใน OnSuccessListener และ OnFailureListener ที่คุณแนบเนื่องจากจะแยกออกทันทีเมื่อการดำเนินการเริ่มต้น UI

    คุณควรตรวจสอบก่อนว่าคุณได้รับคำตอบแล้วหรือยัง การลงชื่อเข้าใช้ด้วยวิธีนี้จะทำให้กิจกรรมของคุณอยู่เบื้องหลังซึ่งหมายความว่าระบบจะเรียกคืนได้ในระหว่างขั้นตอนการลงชื่อเข้าใช้ เพื่อให้แน่ใจว่าคุณจะไม่ทำให้ผู้ใช้ลองอีกครั้งหากเกิดเหตุการณ์นี้ขึ้นคุณควรตรวจสอบว่ามีผลลัพธ์อยู่แล้วหรือไม่

    ในการตรวจสอบว่ามีผลลัพธ์ที่รอดำเนินการอยู่หรือไม่ให้เรียก getPendingAuthResult :

    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can also be retrieved:
                  // authResult.getCredential().getAccessToken().
                  // The OAuth secret can be retrieved by calling:
                  // authResult.getCredential().getSecret().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
    

    ในการเริ่มขั้นตอนการลงชื่อเข้าใช้ให้เรียก startActivityForSignInWithProvider :

    firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
                // The OAuth secret can be retrieved by calling:
                // authResult.getCredential().getSecret().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    เมื่อดำเนินการสำเร็จโทเค็นการเข้าถึง OAuth ที่เชื่อมโยงกับผู้ให้บริการสามารถเรียกคืนจากอ็อบเจ็กต์ OAuthCredential ส่งคืน

    เมื่อใช้โทเค็นการเข้าถึง OAuth คุณสามารถเรียกใช้ Twitter API

    ตัวอย่างเช่นหากต้องการรับข้อมูลโปรไฟล์พื้นฐานคุณสามารถเรียก REST API โดยส่งโทเค็นการเข้าถึงในส่วนหัวการ Authorization :

  4. แม้ว่าตัวอย่างข้างต้นจะเน้นไปที่ขั้นตอนการลงชื่อเข้าใช้ แต่คุณยังสามารถเชื่อมโยงผู้ให้บริการ Twitter กับผู้ใช้ที่มีอยู่โดยใช้ startActivityForLinkWithProvider ตัวอย่างเช่นคุณสามารถเชื่อมโยงผู้ให้บริการหลายรายกับผู้ใช้รายเดียวกันเพื่อให้สามารถลงชื่อเข้าใช้ได้

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // Twitter credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
                // The OAuth secret can be retrieved by calling:
                // authResult.getCredential().getSecret().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
    
  5. สามารถใช้รูปแบบเดียวกันกับ startActivityForReauthenticateWithProvider ซึ่งสามารถใช้เพื่อดึงข้อมูลประจำตัวใหม่สำหรับการดำเนินการที่ละเอียดอ่อนที่ต้องมีการล็อกอินล่าสุด

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

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

หลังจากผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรกบัญชีผู้ใช้ใหม่จะถูกสร้างขึ้นและเชื่อมโยงกับข้อมูลรับรองนั่นคือชื่อผู้ใช้และรหัสผ่านหมายเลขโทรศัพท์หรือข้อมูลผู้ให้บริการรับรองความถูกต้อง - ผู้ใช้ลงชื่อเข้าใช้ด้วย บัญชีใหม่นี้จัดเก็บเป็นส่วนหนึ่งของโปรเจ็กต์ Firebase ของคุณและสามารถใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ของคุณได้ไม่ว่าผู้ใช้จะลงชื่อเข้าใช้อย่างไร

  • ในแอปของคุณคุณสามารถรับข้อมูลโปรไฟล์พื้นฐานของผู้ใช้จากออบเจ็กต์ FirebaseUser ดู จัดการผู้ใช้

  • ในฐานข้อมูลเรียลไทม์ Firebase และ กฎความปลอดภัยของที่ เก็บข้อมูลบนคลาวด์คุณสามารถรับ ID ผู้ใช้เฉพาะของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้

คุณสามารถอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปของคุณโดยใช้ผู้ให้บริการการตรวจสอบสิทธิ์หลายรายโดยการ เชื่อมโยงข้อมูล รับรองของผู้ให้บริการตรวจสอบสิทธิ์ กับบัญชีผู้ใช้ที่มีอยู่

ในการออกจากระบบผู้ใช้โทร signOut :

Java

FirebaseAuth.getInstance().signOut();

โคตรลิน + KTX

Firebase.auth.signOut()