Вы можете разрешить пользователям проходить аутентификацию в Firebase с помощью аккаунтов Twitter. Для этого интегрируйте в приложение общий веб-вход OAuth, используя Firebase SDK, чтобы реализовать весь процесс входа.
Подготовка
Чтобы пользователи могли входить в систему с помощью аккаунтов Twitter, сначала необходимо включить Twitter в качестве поставщика услуг входа для проекта Firebase:
Если вы ещё этого не сделали, добавьте Firebase в проект для Android.
- В консоли Firebase выберите Безопасность > Аутентификация.
- На вкладке Sign-in method (Способ входа) включите поставщика аутентификации Twitter.
-
Добавьте ключ API и секретный ключ API из консоли разработчика этого поставщика в конфигурацию поставщика:
- Зарегистрируйте свое приложение как приложение разработчика в Twitter и получите ключ API и секретный ключ API OAuth.
-
Убедитесь, что URI переадресации OAuth Firebase (например,
my-app-12345.firebaseapp.com/__/auth/handler) указан в качестве URL обратного вызова авторизации на странице настроек приложения в конфигурации приложения Twitter.
- Нажмите Сохранить.
В файле 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:35.1.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:25.0.0") }
Укажите цифровой отпечаток SHA-1 своего приложения, если вы ещё этого не сделали.
В консоли Firebase перейдите в раздел
Settings (Настройки) > General (Общие).Прокрутите страницу вниз до карточки Ваши приложения, выберите приложение для Android и добавьте цифровой отпечаток SHA-1 в поле Цифровые отпечатки сертификата SHA.
Подробнее о том, как получить цифровой отпечаток SHA приложения, читайте в разделе об аутентификации клиентов.
Как настроить процесс входа с помощью Firebase SDK
Если вы создаете приложение для Android, проще всего выполнить аутентификацию пользователей в Firebase с помощью их аккаунтов Twitter, используя Firebase Android SDK.
Чтобы управлять процессом входа с помощью Firebase Android SDK, выполните следующие действия:
Создайте экземпляр OAuthProvider, используя его Builder с идентификатором поставщика Twitter.com.
Kotlin
val provider = OAuthProvider.newBuilder("twitter.com")
Java
OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.com");
Необязательно. Укажите дополнительные специальные параметры OAuth, которые нужно отправить с запросом OAuth.
Kotlin
// Localize to French. provider.addCustomParameter("lang", "fr")
Java
// Localize to French. provider.addCustomParameter("lang", "fr");
Параметры, поддерживаемые Twitter, перечислены в документации по OAuth для Twitter. Обратите внимание, что с помощью
setCustomParameters()нельзя передавать обязательные параметры Firebase. Это параметры client_id, response_type, redirect_uri, state, scope и response_mode.Выполните аутентификацию в Firebase с помощью объекта поставщика OAuth. Обратите внимание, что в отличие от других операций FirebaseAuth, эта операция будет управлять вашим пользовательским интерфейсом, открывая пользовательскую вкладку Chrome. Поэтому не ссылайтесь на Activity в
OnSuccessListenerиOnFailureListener, которые вы прикрепляете, так как они будут немедленно откреплены, когда операция запустит интерфейс.Сначала проверьте, не получили ли вы ответ. При входе с помощью этого метода объект Activity переводится в фоновый режим, а значит, система может восстановить его во время входа. Чтобы пользователю не пришлось повторять попытку, если это произойдет, проверьте, есть ли уже результат.
Чтобы проверить, есть ли ожидающий результат, вызовите
getPendingAuthResult:Kotlin
val pendingResultTask = firebaseAuth.pendingAuthResult if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. } } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Java
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: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)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:Kotlin
firebaseAuth .startActivityForSignInWithProvider(activity, provider.build()) .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. }
Java
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: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
После успешного завершения токен доступа OAuth, связанный с поставщиком, можно получить из возвращенного объекта
OAuthCredential.Используя токен доступа OAuth, вы можете вызвать Twitter API.
Например, чтобы получить основные данные профиля, вы можете вызвать REST API, передав токен доступа в заголовке
Authorization:Хотя в приведенных выше примерах основное внимание уделяется процессам входа, вы также можете связать поставщика Twitter с существующим пользователем, используя
startActivityForLinkWithProvider. Например, вы можете связать несколько поставщиков с одним пользователем, чтобы он мог входить в систему с помощью любого из них.Kotlin
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForLinkWithProvider(activity, provider.build()) .addOnSuccessListener { // Provider 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 { // Handle failure. }
Java
// 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) { // Provider 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. } });
Тот же шаблон можно использовать с
startActivityForReauthenticateWithProvider, чтобы получить новые учетные данные для конфиденциальных операций, требующих недавнего входа в систему.Kotlin
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForReauthenticateWithProvider(activity, provider.build()) .addOnSuccessListener { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } .addOnFailureListener { // Handle failure. }
Java
// 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 Realtime Database и Cloud Storage вы можете получить уникальный идентификатор пользователя, выполнившего вход, из переменной
authи использовать его, чтобы управлять доступом к данным.
Вы можете разрешить пользователям входить в приложение с помощью нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующим аккаунтом пользователя.
Чтобы выполнить выход пользователя, вызовите
signOut:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();