개발자 승학

안드로이드 Firebase 구글 로그인 예제 본문

it/안드로이드(android studio)

안드로이드 Firebase 구글 로그인 예제

유승학 2018. 8. 13. 02:36

안녕하세용~~~~


이번에는 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 가이드에서 좀 더 많은 설명이 볼 수 있습니다.


궁금하신점은 댓글달아주세요.



Comments