Вы можете разрешить своим пользователям проходить аутентификацию в Firebase, используя свои учетные записи Facebook, интегрировав функцию входа через Facebook в свое приложение.
Прежде чем начать
- Если вы еще этого не сделали, добавьте Firebase в свой Android-проект . 
- На сайте Facebook для разработчиков получите идентификатор приложения и секретный ключ приложения для вашего приложения.
-  Включить вход через Facebook:- В консоли Firebase откройте раздел «Аутентификация» .
- На вкладке «Способ входа» включите способ входа через Facebook и укажите идентификатор приложения и секретный ключ приложения , полученные от Facebook.
-  Затем убедитесь, что ваш URI перенаправления OAuth (например, my-app-12345.firebaseapp.com/__/auth/handler) указан как один из URI перенаправления OAuth на странице настроек вашего приложения Facebook на сайте Facebook for Developers в разделе «Настройки продукта» > «Конфигурация входа в Facebook» .
 
- В файле Gradle вашего модуля (уровня приложения) (обычно - <project>/<app-module>/build.gradle.ktsили- <project>/<app-module>/build.gradle) добавьте зависимость для библиотеки Firebase Authentication для Android. Мы рекомендуем использовать Firebase Android BoM для управления версиями библиотеки.- dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.4.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. - (Альтернатива) Добавьте зависимости библиотеки Firebase без использования BoM - Если вы решите не использовать Firebase BoM , вам необходимо указать каждую версию библиотеки Firebase в строке ее зависимостей. - Обратите внимание: если вы используете в своем приложении несколько библиотек 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. Если вы интегрировали функцию «Вход через Facebook» с помощьюLoginButton, код вашего входа будет выглядеть примерно так: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:Kotlinprivate lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth Javaprivate FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance(); 
-  При инициализации Activity проверьте, вошел ли пользователь в систему: Kotlinpublic 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); } 
-  После успешного входа пользователя в систему в методе обратного вызова onSuccessэлементаLoginButtonполучите токен доступа для вошедшего в систему пользователя, обменяйте его на учетные данные Firebase и выполните аутентификацию в Firebase, используя учетные данные Firebase:Если вызовKotlinprivate 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) } } } Javaprivate 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для получения данных учетной записи пользователя.
Следующие шаги
После первого входа пользователя в систему создаётся новая учётная запись, которая привязывается к учётным данным, использованным при входе (имя пользователя и пароль, номер телефона или информация о поставщике аутентификации). Эта новая учётная запись хранится в вашем проекте Firebase и может использоваться для идентификации пользователя в каждом приложении проекта, независимо от способа входа.
- В своих приложениях вы можете получить основную информацию о профиле пользователя из объекта - FirebaseUser. См. раздел Управление пользователями .
- В правилах безопасности Firebase Realtime Database и Cloud Storage вы можете получить уникальный идентификатор вошедшего в систему пользователя из переменной - authи использовать его для управления данными, к которым пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с использованием нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
 Чтобы выйти из системы пользователя, вызовите signOut : 
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();