[Android+Firebase] 로그인 없이 Firebase Authentication (익명 로그인)

2-pi-r·2024년 1월 2일
0

읽기 규칙을 수정해야 한다.

사용자를 식별할 필요가 없으므로 로그인은 필요 없다. 앱을 통해서 접속했다면 모든 사용자를 허용하는 걸로 바꾸고 싶다....만 찾아보니 그렇게는 힘든 것 같았다.

그래서 찾은 방법이 익명 로그인.

참고자료

내 코드

백업 규칙

{
  "rules": {
    ".read": "auth != null",
    ".write": false
  }
}

MainActivity.java

import androidx.annotation.NonNull;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.AuthResult;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;

...

	protected void onCreate(Bundle savedInstanceState) {
		...
        
        
        // Firebase 익명 로그인
        mAuth = FirebaseAuth.getInstance(); // Firebase Auth 초기화
        FirebaseUser user = mAuth.getCurrentUser();
        if(user == null) { // 아직 계정 생성 안 된 사용자
            signInAnonymously(); // 계정 생성
        }
        
        
        // DB 연결 후 key 값 읽어와서 화면에 출력
        FirebaseApp.initializeApp(this);
        ...
        mReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
            	...
                // 데이터 읽어와서 화면에 출력하는 부분
                ...
            	System.out.println("정상: DB 연결 성공");
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                System.out.println("에러: DB 연결 실패");
            }
        });
    }
    
    
    private void signInAnonymously() { // 익명 계정 생성
        mAuth.signInAnonymously().addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    System.out.println("정상: 익명 로그인 성공");
                } else {
                    System.out.println("에러: 익명 로그인 실패");
                }
            }
        });
    }
    

여기서 // DB 연결 후 key 값 읽어와서 화면에 출력 이 부분은 참고를 위해 넣은 것으로, (익명 로그인 작업 전에 작성한) DB 읽어오는 게시글 내용이다.

activity_main.xml

그런데 log를 보니
첫 실행 후 "에러: DB 연결 실패" / "정상: 익명 로그인 성공" 이렇게 출력됐다.
두번째 실행부터는 "정상: DB 연결 성공" 이렇게 출력됐다.

이렇게 되는 이유는 잘 모르겠지만 재시작하면 잘 동작하는 듯 하니, TextView의 초기text에 안내문구를 넣었다. ("설치 후 첫 사용이시군요. 앱을 재시작해주시면 정상 작동됩니다.")

아직 못 한 부분

앱 삭제 후 재설치 시 새로운 계정으로 로그인하게 되면서 이전 계정은 유령 계정이 되는데, 이렇게 안 쓰는 익명계정을 삭제하는 방법은 아직 공부 중이다.

원래 익명 로그인이 이렇게 내내 쓰는 게 아니라 잠깐 쓰라고 만든 기능인 것 같기도 하다. firebase에 만든 지 30일 된 익명 계정은 자동으로 삭제해주는 서비스(아마 유료?)가 있고, 공식 문서에도 익명 계정에서 제대로 회원가입한 계정으로 넘어가는 내용이 있는 걸 보면.

0개의 댓글