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

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

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

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

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

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

  2. ใน คอนโซล Firebase เปิดส่วน Auth
  3. บนแท็บ วิธีการลงชื่อเข้า ใช้ให้เปิดใช้งานผู้ให้บริการ GitHub
  4. เพิ่ม รหัสไคลเอ็นต์ และ รหัส ลับไคลเอ็นต์ จากคอนโซลนักพัฒนาของผู้ให้บริการไปยังการกำหนดค่าผู้ให้บริการ:
    1. ลงทะเบียนแอปของคุณ เป็น แอปพลิเคชัน สำหรับนักพัฒนาซอฟต์แวร์บน GitHub และรับ รหัสไคลเอ็นต์ OAuth 2.0 และ รหัส ลับไคลเอ็นต์ ของแอป
    2. ตรวจสอบให้แน่ใจว่า URI ของการเปลี่ยนเส้นทาง OAuth ของ Firebase (เช่น my-app-12345.firebaseapp.com/__/auth/handler ) เป็น URL เรียกกลับการให้สิทธิ์ ในหน้าการตั้งค่าของแอปในการกำหนดค่าของ แอป GitHub
  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 โดยใช้บัญชี GitHub คือจัดการขั้นตอนการลงชื่อเข้าใช้ทั้งหมดด้วย Firebase Android SDK

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

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

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

    // Target specific email with login hint.
    provider.addCustomParameter("login", "your-email@gmail.com");
    

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

  3. ทางเลือก : ระบุขอบเขต OAuth 2.0 เพิ่มเติมนอกเหนือจากโปรไฟล์พื้นฐานที่คุณต้องการขอจากผู้ให้บริการการตรวจสอบสิทธิ์ หากแอปพลิเคชันของคุณต้องการเข้าถึงข้อมูลผู้ใช้ส่วนตัวจาก GitHub API คุณจะต้องขอสิทธิ์ในการเข้าถึง GitHub API ภายใต้ สิทธิ์ API ในคอนโซลนักพัฒนา GitHub ขอบเขต OAuth ที่ขอต้องตรงกับขอบเขตที่กำหนดไว้ล่วงหน้าในสิทธิ์ API ของแอป

    // Request read access to a user's email addresses.
    // This must be preconfigured in the app's API permissions.
    List<String> scopes =
        new ArrayList<String>() {
          {
            add("user:email");
          }
        };
    provider.setScopes(scopes);
    
  4. ตรวจสอบสิทธิ์กับ 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().
                }
              })
          .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().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

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

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

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

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

    ค่าธรรมเนียม
  6. สามารถใช้รูปแบบเดียวกันกับ 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()