1. 파이어베이스에 앱 추가한다.
* 이대로 따라하다보면 의존성 추가하는 법까지 나와있다. 아예 단계별로 같이 진행시킴
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();
}
}
});
}
'Android > 데이터 저장 및 관리' 카테고리의 다른 글
[Android/Firebase]RemoteConfig로 메시지 가져오기 (0) | 2023.02.25 |
---|---|
[Android/Firebase]FCM(Firebase Cloud Messaging) 푸시 알람 구현 (0) | 2021.09.23 |
[Android/Basic]SharedPreference (키-값 데이터 저장) (0) | 2021.06.09 |