Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
Эта страница переведена с помощью Cloud Translation API.
Switch to English

Аутентификация с помощью Twitter на Android

Вы можете позволить своим пользователям проходить аутентификацию с помощью Firebase, используя свои учетные записи Twitter, путем интеграции общего веб-входа OAuth в ваше приложение с помощью Firebase SDK для выполнения сквозного потока входа.

Прежде чем вы начнете

Чтобы входить в систему пользователей, использующих учетные записи Twitter, вы должны сначала включить Twitter в качестве поставщика входа для вашего проекта Firebase:

  1. Если вы еще этого не сделали, добавьте Firebase в свой проект Android .

  2. В консоли Firebase откройте раздел Auth .
  3. На вкладке Метод входа включите поставщика Twitter .
  4. Добавьте ключ API и секрет API из консоли разработчика этого провайдера в конфигурацию провайдера:
    1. Зарегистрируйте свое приложение в качестве приложения разработчика в Twitter и получите ключ API OAuth и секрет API своего приложения.
    2. Убедитесь, что ваш URI перенаправления Firebase OAuth (например, my-app-12345.firebaseapp.com/__/auth/handler ) установлен как URL-адрес обратного вызова авторизации на странице настроек вашего приложения в конфигурации вашего приложения Twitter .
  5. Щелкните Сохранить .
  6. Используя Firebase Android BoM , объявите зависимость для библиотеки Firebase Authentication Android в файле Gradle модуля (уровня приложения) (обычно app/build.gradle ).

    Ява

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:27.1.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:20.0.4'
    }
    

    Котлин + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:27.1.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:20.0.4'
    }
    

  7. Если вы еще не указали отпечаток SHA-1 своего приложения, сделайте это на странице настроек консоли Firebase. См. Аутентификация вашего клиента для получения подробной информации о том, как получить отпечаток SHA-1 вашего приложения.

Управляйте входом с помощью Firebase SDK

Если вы создаете приложение для Android, самый простой способ аутентифицировать своих пользователей с помощью Firebase с использованием их учетных записей Twitter - это обработать весь процесс входа с помощью Firebase Android SDK.

Чтобы обработать входной поток с помощью Firebase Android SDK, выполните следующие действия:

  1. Создайте экземпляр OAuthProvider, используя его Builder с идентификатором провайдера Twitter.com.

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.com");
    
  2. Необязательно : укажите дополнительные настраиваемые параметры OAuth, которые вы хотите отправить с запросом OAuth.

    // Target specific email with login hint.
    provider.addCustomParameter("lang", "fr");
    

    Параметры, поддерживаемые Twitter, см. В документации Twitter OAuth . Обратите внимание, что вы не можете передавать необходимые для Firebase параметры с помощью setCustomParameters() . Это параметры client_id , response_type , redirect_uri , state , scope и response_mode .

  3. Выполните аутентификацию с помощью Firebase с помощью объекта поставщика OAuth. Обратите внимание, что в отличие от других операций FirebaseAuth, эта функция будет управлять вашим пользовательским интерфейсом, открывая настраиваемую вкладку Chrome . В результате не OnSuccessListener свою Activity в OnSuccessListener и OnFailureListener которые вы присоединяете, поскольку они немедленно отключаются, когда операция запускает пользовательский интерфейс.

    Вы должны сначала проверить, получили ли вы уже ответ. Вход с помощью этого метода переводит вашу Activity в фоновый режим, что означает, что она может быть восстановлена ​​системой во время процесса входа. Чтобы убедиться, что вы не заставляете пользователя повторять попытку, если это произойдет, вы должны проверить, присутствует ли уже результат.

    Чтобы проверить, есть ли ожидающий результат, вызовите 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().
                  // The OAuth secret can be retrieved by calling:
                  // 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 :

    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().
                // The OAuth secret can be retrieved by calling:
                // authResult.getCredential().getSecret().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    После успешного завершения токен доступа OAuth, связанный с поставщиком, может быть OAuthCredential из OAuthCredential объекта OAuthCredential .

    Используя токен доступа OAuth, вы можете вызвать Twitter API .

    Например, чтобы получить базовую информацию о профиле, вы можете вызвать REST API, передав токен доступа в заголовке Authorization :

  4. Хотя приведенные выше примеры сосредоточены на потоках входа, у вас также есть возможность связать поставщика Twitter с существующим пользователем с помощью startActivityForLinkWithProvider . Например, вы можете связать нескольких поставщиков с одним и тем же пользователем, позволяя им входить в систему с любым из них.

    // 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) {
                // Twitter 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.
              }
            });
    
    
  5. Тот же шаблон можно использовать с 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 Realtime и правилах безопасности облачного хранилища вы можете получить уникальный идентификатор пользователя вошедшего в систему из переменной auth и использовать его для управления данными, к которым пользователь может получить доступ.

Вы можете разрешить пользователям входить в ваше приложение с помощью нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.

Чтобы выйти из системы, вызовите signOut :

Ява

FirebaseAuth.getInstance().signOut();

Котлин + KTX

Firebase.auth.signOut()