Firebase

Authentication

허준영(jyheo@hansung.ac.kr)

모바일 백앤드 서비스

  • 모바일 앱이 기능의 일부나 데이터 저장을 원격 서버가 처리
    • 기계학습, 데이터베이스, 메시징 등
  • 직접 서버를 설치하여 운영
  • BaaS(Backend as a Service) 사용

Firebase 기능

  • 앱 개발 -> 앱 개선 -> 비즈니스
  • 앱 개발
  • 앱 개선
    • Crashlytics, App Distribution, Performance Monitoring, Test Lab
  • 비즈니스
    • Analytics, Cloud Messaging, In-App Messaging, Remote Config, Dynamic Links, App Indexing

Firebase 시작하기

  • Android Studio, Firebase Services plugin 최신 버전으로 업데이트
  • 구글 계정 필요!
  • 에뮬레이터 사용시 이미지는 Google Play 포함된 것으로!
  • Tools > Firebase 메뉴 선택
    • 오른쪽 같은 Assistant가 생김
  • Authentication 을 선택하고
    • Email and password authentication 선택
  • 다른 기능도 동일하게 시작함

Firebase 시작하기

  • Connect to Firebase 버튼, 권한 요청 페이지가 뜨면 '허용'
    w:400

Firebase 시작하기

  • 새 프로젝트 이름 입력 하거나
  • 기존 프로젝트에서 선택

Firebase 시작하기

w:500px w:500px

Firebase 시작하기

w:500px w:500px

Firebase 시작하기

  • Project 보기로 바꾼 후 app 폴더 밑에 보면
  • google-services.json 이란 파일이 추가되었음
    w:500px

Firebase Authentication

  • Add Firebase Authentication to your app 버튼

Authentication

  • 인증 객체 가져오기, 인증 상태 리스너
    private FirebaseAuth mAuth;
    private ActivityLoginBinding binding;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityLoginBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
    
        mAuth = FirebaseAuth.getInstance();
    }
    

Authentication

  • 로그인 시작
    public void onButtonLogin(View v) {
        String email = binding.etEmail.getText().toString();
        String password = binding.etPassword.getText().toString();
        mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Log.d(TAG, "signInWithEmail:onComplete:" + task.isSuccessful());
                        if (task.isSuccessful()) {
                            Intent it = new Intent(LoginActivity.this, MainActivity.class);
                            startActivity(it);
                        } else {
                            Log.w(TAG, "signInWithEmail", task.getException());
                            Toast.makeText(LoginActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }
    

Authentication

Authentication

Authentication

  • 사용자 추가
    • FirebaseInstanceId.getInstance().getToken()의 리턴 값

FirebaseUI

  • FirebaseUI
  • build.gradle
    dependencies {
        // ...
        implementation 'com.firebaseui:firebase-ui-auth:6.2.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

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);  // requestCode for onActivityResult

FirebaseUI

@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 {
            if (response) {
                response.getError().getErrorCode()
            } else {
                // user canceled the sign-in flow using the back button
            }            
        }
    }
}