FirebaseUI로 손쉽게 Android 앱에 로그인 추가

FirebaseUI는 Firebase 인증 SDK를 바탕으로 구축된 라이브러리이며 앱에서 사용할 수 있는 삽입형 UI 흐름을 제공합니다. FirebaseUI의 장점은 다음과 같습니다.

  • 여러 제공업체: 이메일, 전화 인증, Google 로그인, Facebook 로그인, Twitter 로그인을 위한 로그인 흐름을 제공합니다.
  • 계정 관리: 계정 생성 및 비밀번호 재설정과 같은 계정 관리 작업을 처리하는 흐름을 제공합니다.
  • 계정 연결: 여러 ID 공급업체에서 사용자 계정을 안전하게 연결하는 흐름을 제공합니다.
  • 맞춤 테마 - 앱에 맞게 FirebaseUI의 디자인을 맞춤설정할 수 있습니다. 또한 FirebaseUI는 오픈소스이므로 프로젝트를 퍼오고 내 요구사항에 정확하게 맞춰 맞춤설정할 수 있습니다.
  • 비밀번호 대용 Smart Lock - 신속한 교차 기기 로그인을 위해 비밀번호 대용 Smart Lock과 자동 통합됩니다.

시작하기 전에

  1. Android 프로젝트에 Firebase를 추가합니다.

  2. FirebaseUI의 종속 항목을 앱 수준 build.gradle 파일에 추가합니다. Facebook 또는 Twitter 로그인을 지원하려면 Facebook 및 Twitter SDK도 포함합니다.

    dependencies {
        // ...
    
        implementation 'com.firebaseui:firebase-ui-auth:4.1.0'
    
        // Required only if Facebook login support is required
        // Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94
        implementation 'com.facebook.android:facebook-android-sdk:4.x'
    
        // Required only if Twitter login support is required
        // Find the latest Twitter SDK releases here: https://goo.gl/E5wZvQ
        implementation 'com.twitter.sdk.android:twitter-core:3.x'
    }
    

    FirebaseUI 인증 SDK에는 Firebase SDK 및 Google Play 서비스 SDK의 임시 종속 항목이 있습니다.

  3. 아직 Firebase 프로젝트에 앱을 연결하지 않았다면 Firebase 콘솔에서 연결합니다.

  4. Firebase 콘솔에서 인증 섹션을 열고 지원할 로그인 방법을 사용 설정합니다. 일부 로그인 방법은 추가 정보가 필요하며 대개 해당 서비스의 개발자 콘솔에서 확인할 수 있습니다.

  5. Google 로그인을 지원하며 아직 앱의 SHA-1 지문을 지정하지 않았다면 Firebase 콘솔의 설정 페이지에서 지정합니다. 앱의 SHA-1 지문을 가져오는 자세한 방법은 클라이언트 인증을 참조하세요.

  6. Facebook 또는 Twitter 로그인을 지원하는 경우 각 제공업체에서 요구하는 식별 정보를 지정하는 strings.xml에 문자열 리소스를 추가합니다.

    
    <resources>
      <!-- Facebook application ID and custom URL scheme (app ID prefixed by 'fb'). -->
      <string name="facebook_application_id" translatable="false">YOUR_APP_ID</string>
      <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_APP_ID</string>
      <!-- Twitter consumer key and secret -->
      <string name="twitter_consumer_key" translatable="false">YOUR_CONSUMER_KEY</string>
      <string name="twitter_consumer_secret" translatable="false">YOUR_CONSUMER_SECRET</string>
    </resources>
    

로그인

FirebaseUI 로그인 과정을 시작하려면 원하는 로그인 방법으로 로그인 인텐트를 만듭니다.

자바
Android

// Choose authentication providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
        new AuthUI.IdpConfig.EmailBuilder().build(),
        new AuthUI.IdpConfig.PhoneBuilder().build(),
        new AuthUI.IdpConfig.GoogleBuilder().build(),
        new AuthUI.IdpConfig.FacebookBuilder().build(),
        new AuthUI.IdpConfig.TwitterBuilder().build());

// Create and launch sign-in intent
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN);

Kotlin
Android

// Choose authentication providers
val providers = arrayListOf(
        AuthUI.IdpConfig.EmailBuilder().build(),
        AuthUI.IdpConfig.PhoneBuilder().build(),
        AuthUI.IdpConfig.GoogleBuilder().build(),
        AuthUI.IdpConfig.FacebookBuilder().build(),
        AuthUI.IdpConfig.TwitterBuilder().build())

// Create and launch sign-in intent
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN)

로그인 과정이 완료되면 onActivityResult로 결과가 수신됩니다.

자바
Android

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {
        IdpResponse response = IdpResponse.fromResultIntent(data);

        if (resultCode == RESULT_OK) {
            // Successfully signed in
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            // ...
        } else {
            // Sign in failed. If response is null the user canceled the
            // sign-in flow using the back button. Otherwise check
            // response.getError().getErrorCode() and handle the error.
            // ...
        }
    }
}

Kotlin
Android

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == RC_SIGN_IN) {
        val response = IdpResponse.fromResultIntent(data)

        if (resultCode == Activity.RESULT_OK) {
            // Successfully signed in
            val user = FirebaseAuth.getInstance().currentUser
            // ...
        } else {
            // Sign in failed. If response is null the user canceled the
            // sign-in flow using the back button. Otherwise check
            // response.getError().getErrorCode() and handle the error.
            // ...
        }
    }
}

로그아웃

FirebaseUI는 Firebase 인증은 물론 모든 소셜 ID 제공업체에서 로그아웃할 수 있는 편리한 메소드를 제공합니다.

자바
Android

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin
Android

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener {
            // ...
        }

사용자의 계정을 완전히 삭제할 수도 있습니다.

자바
Android

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin
Android

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener {
            // ...
        }

맞춤설정

기본적으로 FirebaseUI는 테마 설정에 AppCompat를 사용합니다. 즉, 앱의 색 구성표를 자연스럽게 차용합니다. 추가 맞춤설정이 필요한 경우 로그인 Intent 빌더에 테마와 로고를 전달할 수 있습니다.

자바
Android

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo)      // Set logo drawable
                .setTheme(R.style.MySuperAppTheme)      // Set theme
                .build(),
        RC_SIGN_IN);

Kotlin
Android

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo)      // Set logo drawable
                .setTheme(R.style.MySuperAppTheme)      // Set theme
                .build(),
        RC_SIGN_IN)

커스텀 개인정보처리방침 및 서비스 약관도 설정할 수 있습니다.

자바
Android

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN);

Kotlin
Android

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN)

다음 단계

  • FirebaseUI 사용 및 맞춤설정에 관한 자세한 내용은 GitHub의 README 파일을 참조하세요.
  • FirebaseUI에서 발견한 문제를 신고하려면 GitHub 문제 추적기를 사용하세요.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.