[Android/Firebase]SNS 로그인 구현(3) - 구글

2021. 5. 12. 16:21Android/데이터 저장 및 관리

728x90
반응형

1. 파이어베이스에 앱 추가한다.

 

Android 프로젝트에 Firebase 추가

기본 요건 Android 프로젝트가 준비되지 않았다면 빠른 시작 샘플 중 하나를 다운로드하여 Firebase 제품을 사용해 볼 수 있습니다. 다음 옵션 중 하나를 사용하여 Android 앱을 Firebase에 연결할 수 있

firebase.google.com

* 이대로 따라하다보면 의존성 추가하는 법까지 나와있다. 아예 단계별로 같이 진행시킴

 

2. xml 파일에 버튼 추가

    <com.google.android.gms.common.SignInButton
        android:id="@+id/btn_google_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

 

3. 로그인 객체를 생성한다.

private FirebaseAuth auth;  // 파이어 베이스 인증 객체
private GoogleSignInClient googleSignInClient;
private final int REQ_SIGN_GOOGLE = 9001; // 구글 로그인 결과 코드

 

4. GoogleSignInOptions 객체를 생성하고 requestIdToken을 호출한다.

// Configure Google Sign In
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail()
        .build();

mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

 

5. 현재 인증상태를 확인하기 위한 FirebaseAuth 객체를 생성하고 초기화해준다.

auth = FirebaseAuth.getInstance(); 

 

6. 구글 로그인 버튼을 선택했을 때, 로그인 화면이 뜨도록 Intent 해준다.

        btnGoogleLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 구글 로그인 화면 intent
                Intent signInIntent = googleSignInClient.getSignInIntent();
                startActivityForResult(signInIntent, REQ_SIGN_GOOGLE);
            }
        });

 

7. (6번)에서 intent 되었던 액티비티에서 로그인 계정 값을 받아 매개변수로 resultGoogleLogin 메서드에 넘겨준다(8번)

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQ_SIGN_GOOGLE) {
        	Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        	try {
        		// Google Sign In was successful, authenticate with Firebase
        		GoogleSignInAccount account = task.getResult(ApiException.class);
        		resultGoogleLogin(account);
        	} catch (ApiException e) {
        		Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
        		Log.d("google login", e.toString());
        	}
        }
    }

* onActivityResult : sub액티비티 호출로 넘어갔다가 다시 main 액티비티로 돌아올 때 사용되는 메서드

 

8.  구글 로그인 인증을 요청하고 결과값을 받아온다.

private void resultGoogleLogin(GoogleSignInAccount account) {
	AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
	auth.signInWithCredential(credential)
			.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
				@Override
				public void onComplete(@NonNull Task<AuthResult> task) {
					if(task.isSuccessful()) {
						Toast.makeText(getApplicationContext(), account.getDisplayName() + "님 환영합니다!", Toast.LENGTH_LONG).show()
					} else {
						Toast.makeText(getApplicationContext(), "구글 로그인 실패", Toast.LENGTH_LONG).show();
					}
				}
			});
}

 

728x90
반응형