콘솔로 이동

Android에서 익명으로 Firebase에 인증하기

Firebase 인증을 사용해 임시 익명 계정을 생성하고 사용할 수 있습니다. 이 임시 익명 계정을 통해 아직 앱에 가입하지 않은 사용자들도 보안 규칙으로 보호하는 데이터를 취급할 수 있습니다. 익명 사용자가 앱에 가입하기로 결정하면 이 사용자의 로그인 인증 정보를 해당 익명 계정에 연결하여 사용자가 추후 세션에서도 보호받는 데이터를 계속 취급할 수 있도록 할 수 있습니다.

시작하기 전에

  1. 아직 추가하지 않았다면 Android 프로젝트에 Firebase를 추가합니다.
  2. 프로젝트 수준 build.gradle 파일의 buildscriptallprojects 섹션에 Google의 Maven 저장소가 포함되어야 합니다.
  3. 다음과 같이 모듈(앱 수준) Gradle 파일(일반적으로 app/build.gradle)에 Firebase 인증 Android 라이브러리 종속 항목을 추가합니다.
    implementation 'com.google.firebase:firebase-auth:19.0.0'
  4. 아직 Firebase 프로젝트에 앱을 연결하지 않았다면 Firebase Console에서 연결합니다.
  5. 다음과 같이 익명 인증을 사용 설정합니다.
    1. Firebase Console에서 인증 섹션을 엽니다.
    2. 로그인 방법 페이지에서 익명 로그인 방법을 사용 설정합니다.

Firebase에서 익명으로 인증하기

로그아웃 상태의 사용자가 Firebase 인증이 필요한 앱 기능을 사용할 때 다음 절차를 밟으면 이 사용자를 익명으로 로그인시킬 수 있습니다.

  1. 다음과 같이 작업의 onCreate 메소드에서 FirebaseAuth 객체의 공유 인스턴스를 가져옵니다.

    자바

    private FirebaseAuth mAuth;// ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    Kotlin

    private lateinit var auth: FirebaseAuth// ...
    // Initialize Firebase Auth
    auth = FirebaseAuth.getInstance()
  2. 활동을 초기화할 때 사용자가 현재 로그인되어 있는지 확인합니다.

    자바

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }

    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)
    }
  3. 마지막으로 signInAnonymously를 호출하여 익명 사용자로 로그인합니다.

    자바

    mAuth.signInAnonymously()
            .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, "signInAnonymously:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInAnonymously:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
    
                    // ...
                }
            });

    Kotlin

    auth.signInAnonymously()
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInAnonymously:success")
                    val user = auth.currentUser
                    updateUI(user)
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInAnonymously:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
    
                // ...
            }
    로그인이 성공하면 getCurrentUser 메소드로 사용자의 계정 데이터를 가져올 수 있습니다.

익명 계정을 영구 계정으로 변환하기

익명 사용자가 앱에 가입하면 이 사용자가 가입 전에 하던 작업을 신규 계정으로 이어서 하게 할 수 있습니다. 예를 들면 사용자가 가입 전에 장바구니에 담은 물품이 신규 계정의 장바구니에 나타나도록 할 수 있습니다. 그러려면 다음 절차를 완료하세요.

  1. 사용자가 가입하면 사용자가 선택한 인증 제공업체의 로그인 과정을 진행하되 FirebaseAuth.signInWith 메소드 호출 전까지만 진행합니다. 예를 들어 사용자의 Google ID 토큰, Facebook 액세스 토큰 또는 이메일 주소와 비밀번호를 가져옵니다.
  2. 다음과 같이 새로운 인증 제공업체의 AuthCredential을 가져옵니다.

    Google 로그인

    자바

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);

    Kotlin

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    Facebook 로그인

    자바

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

    Kotlin

    val credential = FacebookAuthProvider.getCredential(token.token)
    이메일-비밀번호 로그인

    자바

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);

    Kotlin

    val credential = EmailAuthProvider.getCredential(email, password)
  3. 다음과 같이 AuthCredential 객체를 로그인 사용자의 linkWithCredential 메소드에 전달합니다.

    자바

    mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        updateUI(user);
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
    
                    // ...
                }
            });

    Kotlin

    auth.currentUser?.linkWithCredential(credential)
            ?.addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    Log.d(TAG, "linkWithCredential:success")
                    val user = task.result?.user
                    updateUI(user)
                } else {
                    Log.w(TAG, "linkWithCredential:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
    
                // ...
            }

linkWithCredential 호출이 성공하면 사용자의 신규 계정에서 익명 계정의 Firebase 데이터에 액세스할 수 있습니다.

다음 단계

이제 사용자가 Firebase에 인증할 수 있으므로 Firebase 규칙을 사용하여 Firebase 데이터베이스의 데이터에 대한 액세스를 제어할 수 있습니다.