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

ตรวจสอบสิทธิ์โดยใช้การเข้าสู่ระบบ Facebook บน Android

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

ก่อนจะเริ่ม

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

  2. บน Facebook สำหรับนักพัฒนา เว็บไซต์ได้รับรหัสแอปและ App ลับของแอป
  3. เปิดใช้งานการเข้าสู่ระบบ Facebook:
    1. ใน Firebase คอนโซล , เปิดส่วนการตรวจสอบสิทธิ์
    2. ที่ลงในแท็บวิธีการเปิดใช้งาน Facebook ลงชื่อเข้าใช้วิธีการและระบุ App ID และ App ลับที่คุณได้รับจาก Facebook
    3. จากนั้นให้แน่ใจว่าคุณ OAuth เปลี่ยนเส้นทาง URI (เช่น my-app-12345.firebaseapp.com/__/auth/handler ) ถูกระบุว่าเป็นหนึ่งในยูริเปลี่ยนเส้นทาง OAuth ของคุณในหน้าการตั้งค่าของคุณ Facebook ของแอปบน Facebook สำหรับนักพัฒนา เว็บไซต์ในผลิตภัณฑ์ การตั้งค่า> Facebook เข้าสู่ระบบการตั้งค่า
  4. ใช้ Firebase Android BoM ประกาศพึ่งพาสำหรับห้องสมุด Firebase รับรองความถูกต้องของ Android ในโมดูลของคุณ (app ระดับ) ไฟล์ Gradle (ปกติ app/build.gradle )

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.0')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    }
    

    โดยใช้ Firebase Android BoM แอปของคุณมักจะใช้รุ่นที่รองรับการห้องสมุด Firebase Android

    (ทางเลือก) ประกาศ Firebase อ้างอิงห้องสมุดโดยไม่ต้องใช้ BoM

    หากคุณเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดการพึ่งพา

    โปรดทราบว่าถ้าคุณใช้ห้องสมุด Firebase หลายรายการในแอปของคุณเราขอแนะนำให้ใช้ BoM การจัดการเวอร์ชันห้องสมุดซึ่งทำให้มั่นใจได้ว่าทุกรุ่นที่เข้ากันได้

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:21.0.1'
    }
    

    คอตลิน+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.0')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
    

    โดยใช้ Firebase Android BoM แอปของคุณมักจะใช้รุ่นที่รองรับการห้องสมุด Firebase Android

    (ทางเลือก) ประกาศ Firebase อ้างอิงห้องสมุดโดยไม่ต้องใช้ BoM

    หากคุณเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดการพึ่งพา

    โปรดทราบว่าถ้าคุณใช้ห้องสมุด Firebase หลายรายการในแอปของคุณเราขอแนะนำให้ใช้ BoM การจัดการเวอร์ชันห้องสมุดซึ่งทำให้มั่นใจได้ว่าทุกรุ่นที่เข้ากันได้

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:21.0.1'
    }
    

ตรวจสอบสิทธิ์ด้วย Firebase

  1. บูรณาการเข้าสู่ระบบของ Facebook ใน app ของคุณโดยทำตาม เอกสารของนักพัฒนา เมื่อคุณกำหนดค่า LoginButton หรือ LoginManager วัตถุขอ public_profile และ email สิทธิ์ หากคุณรวม Facebook เข้าสู่ระบบโดยใช้ LoginButton , ลงชื่อเข้าใช้ในกิจกรรมของคุณมีรหัสคล้ายกับต่อไปนี้:

    Java

    // Initialize Facebook Login button
    mCallbackManager = CallbackManager.Factory.create();
    LoginButton loginButton = findViewById(R.id.button_sign_in);
    loginButton.setReadPermissions("email", "public_profile");
    loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Log.d(TAG, "facebook:onSuccess:" + loginResult);
            handleFacebookAccessToken(loginResult.getAccessToken());
        }
    
        @Override
        public void onCancel() {
            Log.d(TAG, "facebook:onCancel");
        }
    
        @Override
        public void onError(FacebookException error) {
            Log.d(TAG, "facebook:onError", error);
        }
    });
    // ...
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // Pass the activity result back to the Facebook SDK
        mCallbackManager.onActivityResult(requestCode, resultCode, data);
    }

    คอตลิน+KTX

    // Initialize Facebook Login button
    callbackManager = CallbackManager.Factory.create()
    
    buttonFacebookLogin.setReadPermissions("email", "public_profile")
    buttonFacebookLogin.registerCallback(callbackManager, object : FacebookCallback<LoginResult> {
        override fun onSuccess(loginResult: LoginResult) {
            Log.d(TAG, "facebook:onSuccess:$loginResult")
            handleFacebookAccessToken(loginResult.accessToken)
        }
    
        override fun onCancel() {
            Log.d(TAG, "facebook:onCancel")
        }
    
        override fun onError(error: FacebookException) {
            Log.d(TAG, "facebook:onError", error)
        }
    })
    // ...
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
    
        // Pass the activity result back to the Facebook SDK
        callbackManager.onActivityResult(requestCode, resultCode, data)
    }
  2. ในการลงชื่อเข้าใช้ในกิจกรรมของคุณ onCreate วิธีการรับอินสแตนซ์ที่ใช้ร่วมกันของ FirebaseAuth วัตถุ:

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    คอตลิน+KTX

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth
  3. เมื่อเริ่มต้นกิจกรรมของคุณ ให้ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้อยู่หรือไม่:

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }

    คอตลิน+KTX

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }
  4. หลังจากที่ผู้ใช้ประสบความสำเร็จในสัญญาณใน LoginButton 's onSuccess วิธีการโทรกลับได้รับการเข้าถึง token สำหรับลงชื่อเข้าใช้แลกเปลี่ยนเป็นข้อมูลประจำตัว Firebase และตรวจสอบกับ Firebase ใช้ข้อมูลประจำตัว Firebase:

    Java

    private void handleFacebookAccessToken(AccessToken token) {
        Log.d(TAG, "handleFacebookAccessToken:" + token);
    
        AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            Log.d(TAG, "signInWithCredential:success");
                            FirebaseUser user = mAuth.getCurrentUser();
                            updateUI(user);
                        } else {
                            // If sign in fails, display a message to the user.
                            Log.w(TAG, "signInWithCredential:failure", task.getException());
                            Toast.makeText(FacebookLoginActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                            updateUI(null);
                        }
                    }
                });
    }

    คอตลิน+KTX

    private fun handleFacebookAccessToken(token: AccessToken) {
        Log.d(TAG, "handleFacebookAccessToken:$token")
    
        val credential = FacebookAuthProvider.getCredential(token.token)
        auth.signInWithCredential(credential)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success")
                        val user = auth.currentUser
                        updateUI(user)
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.exception)
                        Toast.makeText(baseContext, "Authentication failed.",
                                Toast.LENGTH_SHORT).show()
                        updateUI(null)
                    }
                }
    }
    หากการเรียกร้องให้ signInWithCredential ประสบความสำเร็จคุณสามารถใช้ getCurrentUser วิธีการเพื่อให้ได้ข้อมูลบัญชีของผู้ใช้

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

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

  • ในปพลิเคชันของคุณคุณจะได้รับข้อมูลรายละเอียดของผู้ใช้พื้นฐานจาก FirebaseUser วัตถุ ดู การจัดการผู้ใช้

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

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

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

Java

FirebaseAuth.getInstance().signOut();

คอตลิน+KTX

Firebase.auth.signOut()