안드로이드 Firebase 구글 로그인 예제
안녕하세용~~~~
이번에는 Firebase에 구글 로그인 예제를 알려드릴려고 합니다.
Firebase프로젝트에 SHA-1 지문등록을 해야합니다.
http://sh-itstory.tistory.com/58 에 방법이 나와 있습니다. 확인해주세요
프로젝트에 지문 등록까지 끝내셨다면
해당 Firebase 프로젝트에 들어가셔서 Authentication -> 로그인 방법 -> 제공업체 -> Google 사용 설정을 합니다.
이제 안드로이드 스튜디오에 gradle을 추가할게요.
App수준 gradle에
[build.gradle (Moudle: app)]
implementation 'com.google.firebase:firebase-auth:11.6.2'
implementation 'com.google.android.gms:play-services-auth:11.6.2'
이메일 로그인을 이미 하셨다면
implementation 'com.google.firebase:firebase-auth:11.6.2 <- 이 부분은 이미 싱크 하셨을 겁니다.
두 개를 추가하고 싱크해줍니다.
[activity_main.xml]
<com.google.android.gms.common.SignInButton
android:id="@+id/btn_googleSignIn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_below="@+id/linearlayout">
</com.google.android.gms.common.SignInButton>
xml에 추가하면 자동으로 구글마크와 Sign in 이라는 글씨가 생깁니다.
구글 로그인 버튼은 onClick이 작동 안되는거 같더라구요...
그래서 id를 주고 직접 클릭이벤트리스너를 작성해야 할 듯 합니다.
xml작성은 끝났습니다.
이제 자바 코드를 작성해봅시다.
[MainActivity.java]
// 구글로그인 result 상수
private static final int RC_SIGN_IN = 900;
// 구글api클라이언트
private GoogleSignInClient googleSignInClient;
// 파이어베이스 인증 객체 생성
private FirebaseAuth firebaseAuth;
// 구글 로그인 버튼
private SignInButton buttonGoogle;
전역 변수로 4가지를 선언합니다.
RC_SIGN_IN 상수는 구글로그인 버튼을 클릭하여 startactivityforresult 응답 코드로 사용합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 파이어베이스 인증 객체 선언
firebaseAuth = FirebaseAuth.getInstance();
buttonGoogle = findViewById(R.id.btn_googleSignIn);
// Google 로그인을 앱에 통합
// GoogleSignInOptions 개체를 구성할 때 requestIdToken을 호출
GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions);
buttonGoogle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent signInIntent = googleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 구글로그인 버튼 응답
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// 구글 로그인 성공
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithGoogle(account);
} catch (ApiException e) {
}
}
}
// 사용자가 정상적으로 로그인한 후에 GoogleSignInAccount 개체에서 ID 토큰을 가져와서
// Firebase 사용자 인증 정보로 교환하고 Firebase 사용자 인증 정보를 사용해 Firebase에 인증합니다.
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// 로그인 성공
Toast.makeText(MainActivity.this, R.string.success_login, Toast.LENGTH_SHORT).show();
} else {
// 로그인 실패
Toast.makeText(MainActivity.this, R.string.failed_login, Toast.LENGTH_SHORT).show();
}
}
});
}
Firebase 프로젝트에 로그인한 Google 계정이 추가되있을겁니다.
참고.
https://firebase.google.com/docs/auth/android/google-signin?authuser=0
firebase 가이드에서 좀 더 많은 설명이 볼 수 있습니다.
궁금하신점은 댓글달아주세요.