āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§ Facebook āϞāĻāĻāύ āϏāĻāĻšāϤ āĻāϰ⧠āĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āϤāĻžāĻĻā§āϰ Facebook āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Firebase-āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻāϰāϤ⧠āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻĒāύāĻŋ āĻļā§āϰ⧠āĻāϰāĻžāϰ āĻāĻā§
āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ āύāĻž āĻāϰ⧠āĻĨāĻžāĻā§āύ āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻžāϰ Android āĻĒā§āϰāĻāϞā§āĻĒā§ Firebase āϝā§āĻ āĻāϰā§āύ āĨ¤
- Facebook for Developers āϏāĻžāĻāĻā§, āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ āĻāύā§āϝ āĻ ā§āϝāĻžāĻĒ āĻāĻāĻĄāĻŋ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāĻĒ āϏāĻŋāĻā§āϰā§āĻ āĻĒāĻžāύāĨ¤
- āĻĢā§āϏāĻŦā§āĻ āϞāĻāĻāύ āϏāĻā§āώāĻŽ āĻāϰā§āύ:
- Firebase āĻāύāϏā§āϞ⧠, Auth āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻā§āϞā§āύāĨ¤
- āϏāĻžāĻāύ āĻāύ āĻĒāĻĻā§āϧāϤāĻŋ āĻā§āϝāĻžāĻŦā§, Facebook āϏāĻžāĻāύ-āĻāύ āĻĒāĻĻā§āϧāϤāĻŋ āϏāĻā§āώāĻŽ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻĒāύāĻŋ Facebook āĻĨā§āĻā§ āϝ⧠āĻ ā§āϝāĻžāĻĒ āĻāĻāĻĄāĻŋ āĻāĻŦāĻ āĻ ā§āϝāĻžāĻĒ āϏāĻŋāĻā§āϰā§āĻ āĻĒā§āϝāĻŧā§āĻā§āύ āϤāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§āύāĨ¤
- āϤāĻžāϰāĻĒāϰ, āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āϝ⧠āĻāĻĒāύāĻžāϰ OAuth āĻĒā§āύāĻāύāĻŋāϰā§āĻĻā§āĻļ URI (āϝā§āĻŽāύ
my-app-12345.firebaseapp.com/__/auth/handler
) āĻĒā§āϰā§āĻĄāĻžāĻā§āĻ āϏā§āĻāĻŋāĻāϏ > Facebook āϞāĻāĻāύ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ⧠Facebook for Developers āϏāĻžāĻāĻā§ āĻāĻĒāύāĻžāϰ Facebook āĻ ā§āϝāĻžāĻĒā§āϰ āϏā§āĻāĻŋāĻāϏ āĻĒā§āώā§āĻ āĻžāϝāĻŧ āĻāĻĒāύāĻžāϰ OAuth āϰāĻŋāĻĄāĻžāĻāϰā§āĻā§āĻ URIāĻā§āϞāĻŋāϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āĻšāĻŋāϏāĻžāĻŦā§ āϤāĻžāϞāĻŋāĻāĻžāĻā§āĻā§āϤ āϰāϝāĻŧā§āĻā§ā§ˇ
āĻāĻĒāύāĻžāϰ āĻŽāĻĄāĻŋāĻāϞ⧠(āĻ ā§āϝāĻžāĻĒ-āϞā§āĻā§āϞ) āĻā§āϰā§āĻĄāϞ āĻĢāĻžāĻāϞ⧠(āϏāĻžāϧāĻžāϰāĻŖāϤ
<project>/<app-module>/build.gradle.kts
āĻŦāĻž<project>/<app-module>/build.gradle
), Android āĻāϰ āĻāύā§āϝ Firebase Authentication āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāϰ āĻāύā§āϝ āύāĻŋāϰā§āĻāϰāϤāĻž āϝā§āĻ āĻāϰā§āύāĨ¤ āĻāĻŽāϰāĻž āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āϏāĻāϏā§āĻāϰāĻŖ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰāϤ⧠Firebase Android BoM āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻāĻŋāĻāĨ¤dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.2.0")) // Add 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 āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāϰ āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖ āϏāĻāϏā§āĻāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āĨ¤
(āĻŦāĻŋāĻāϞā§āĻĒ) BoM āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻāϰ⧠Firebase āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āύāĻŋāϰā§āĻāϰāϤāĻž āϝā§āĻ āĻāϰā§āύ
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ Firebase BoM āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻāϰāĻž āĻŦā§āĻā§ āύā§āύ, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻžāĻā§ āĻ āĻŦāĻļā§āϝāĻ āĻĒā§āϰāϤāĻŋāĻāĻŋ Firebase āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āϏāĻāϏā§āĻāϰāĻŖ āϤāĻžāϰ āύāĻŋāϰā§āĻāϰāϤāĻž āϞāĻžāĻāύ⧠āĻāϞā§āϞā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ āϝ⧠āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§ āĻāĻāĻžāϧāĻŋāĻ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āĻāĻŽāϰāĻž āĻĻā§āĻĸāĻŧāĻāĻžāĻŦā§ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āϏāĻāϏā§āĻāϰāĻŖāĻā§āϞāĻŋ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāϤ⧠BoM āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻāĻŋāĻ, āϝāĻž āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰ⧠āϝ⧠āϏāĻŽāϏā§āϤ āϏāĻāϏā§āĻāϰāĻŖ āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖāĨ¤
dependencies { // Add 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:24.0.1") }
Firebase āĻĻāĻŋāϝāĻŧā§ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻāϰā§āύ
- āĻŦāĻŋāĻāĻžāĻļāĻāĻžāϰā§āϰ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ āĻ
āύā§āϏāϰāĻŖ āĻāϰ⧠āĻāĻĒāύāĻžāϰ āĻ
ā§āϝāĻžāĻĒā§ Facebook āϞāĻāĻāύ āϏāĻāĻšāϤ āĻāϰā§āύāĨ¤ āĻāĻĒāύāĻŋ āϝāĻāύ
LoginButton
āĻŦāĻžLoginManager
āĻ āĻŦāĻā§āĻā§āĻ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰā§āύ, āϤāĻāύpublic_profile
āĻāĻŦāĻemail
āĻ āύā§āĻŽāϤāĻŋāϰ āĻāύā§āϝ āĻ āύā§āϰā§āϧ āĻāϰā§āύāĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻāĻāĻŋLoginButton
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Facebook āϞāĻāĻāύ āϏāĻāĻšāϤ āĻāϰā§āύ, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻžāϰ āϏāĻžāĻāύ-āĻāύ āĻāĻžāϰā§āϝāĻāϞāĻžāĻĒā§ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤāĻā§āϞāĻŋāϰ āĻŽāϤ⧠āĻā§āĻĄ āĻĨāĻžāĻā§:Kotlin
// 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) }
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); }
- āĻāĻĒāύāĻžāϰ āϏāĻžāĻāύ-āĻāύ āĻāĻžāϰā§āϝāĻāϞāĻžāĻĒā§āϰ
onCreate
āĻĒāĻĻā§āϧāϤāĻŋāϤā§,FirebaseAuth
āĻ āĻŦāĻā§āĻā§āĻā§āϰ āĻāĻžāĻ āĻāϰāĻž āĻāĻĻāĻžāĻšāϰāĻŖ āĻĒāĻžāύ:Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- āĻāĻĒāύāĻžāϰ āĻā§āϰāĻŋāϝāĻŧāĻžāĻāϞāĻžāĻĒ āĻļā§āϰ⧠āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻŦāϰā§āϤāĻŽāĻžāύ⧠āϏāĻžāĻāύ āĻāύ āĻāϰā§āĻā§āύ āĻāĻŋāύāĻž āϤāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰ⧠āĻĻā§āĻā§āύ:
Kotlin
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
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); }
- āĻāĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϏāĻĢāϞāĻāĻžāĻŦā§ āϏāĻžāĻāύ āĻāύ āĻāϰāĻžāϰ āĻĒāϰā§,
LoginButton
onSuccess
āĻāϞāĻŦā§āϝāĻžāĻ āĻĒāĻĻā§āϧāϤāĻŋāϤā§, āϏāĻžāĻāύ-āĻāύ āĻāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻā§āĻā§āύ āĻĒāĻžāύ, āĻāĻāĻŋ āĻāĻāĻāĻŋ Firebase āĻļāĻāϏāĻžāĻĒāϤā§āϰā§āϰ āĻāύā§āϝ āĻŦāĻŋāύāĻŋāĻŽāϝāĻŧ āĻāϰā§āύ āĻāĻŦāĻ Firebase āĻļāĻāϏāĻžāĻĒāϤā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Firebase āĻāϰ āϏāĻžāĻĨā§ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻāϰā§āύ:Kotlin
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) } } }
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); } } }); }
signInWithCredential
āĻāϰ āĻāϞ āϏāĻĢāϞ āĻšāϞā§, āĻāĻĒāύāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āĻĄā§āĻāĻž āĻĒā§āϤā§getCurrentUser
āĻĒāĻĻā§āϧāϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻĒāϰāĻŦāϰā§āϤ⧠āĻĒāĻĻāĻā§āώā§āĻĒ
āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāĻāύ āĻāύ āĻāϰāĻžāϰ āĻĒāϰā§, āĻāĻāĻāĻŋ āύāϤā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āĻļāĻāϏāĻžāĻĒāϤā§āϰāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āϞāĻŋāĻā§āĻ āĻāϰāĻž āĻšāϝāĻŧâāĻ āϰā§āĻĨāĻžā§, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āύāĻžāĻŽ āĻāĻŦāĻ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ, āĻĢā§āύ āύāĻŽā§āĻŦāϰ, āĻŦāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰā§āϰ āϤāĻĨā§āϝ â āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϏāĻžāĻāύ āĻāύ āĻāϰā§āĻā§āύāĨ¤ āĻāĻ āύāϤā§āύ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻāĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻ āĻāĻļ āĻšāĻŋāϏāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻā§āĻāĻžāĻŦā§ āϏāĻžāĻāύ āĻāύ āĻāϰā§āύ āύāĻž āĻā§āύ, āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻ ā§āϝāĻžāĻĒ āĻā§āĻĄāĻŧā§ āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āĻļāύāĻžāĻā§āϤ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§, āĻāĻĒāύāĻŋ
FirebaseUser
āĻ āĻŦāĻā§āĻā§āĻ āĻĨā§āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻŽā§āϞāĻŋāĻ āĻĒā§āϰā§āĻĢāĻžāĻāϞ āϤāĻĨā§āϝ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻĻā§āĻā§āύāĨ¤āĻāĻĒāύāĻžāϰ Firebase Realtime Database āĻāĻŦāĻ Cloud Storage āϏā§āϰāĻā§āώāĻž āύāĻŋāϝāĻŧāĻŽā§ , āĻāĻĒāύāĻŋ
auth
āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻĨā§āĻā§ āϏāĻžāĻāύ-āĻāύ āĻāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻ āύāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻĄāĻŋ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻā§āύ āĻĄā§āĻāĻž āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āϤāĻž āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰāϤ⧠āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āϏāĻžāĻāύ āĻāĻāĻ āĻāϰāϤā§, signOut
āĻāϞ āĻāϰā§āύ:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();