https://firebase.google.com/docs/auth/android/google-signin?authuser=0
Google Sing In Button을 layout화면에 만들었다.
이제 MainActivity.java에서 버튼을 눌렀을 때 구글 계정으로 로그인 할 수 있도록 구현을 할 것이다.
일단 Button 먼저 만들어보자
AppCompatActivity에 SignInButton을 선언해 준다.
private SignInButton google_lgbtn;
그 다음 onCreate에
google_lgbtn = findViewById(R.id.google_lgbtn);
google_lgbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//여기에 버튼 클릭시 실행될 코드 삽입
}
});
이렇게 하면 버튼이 완성된다!
이제 저 Sign in 버튼을 눌렀을때 구글 계정이 firebase에 사용자 등록이 되도록 만들면 된다.
1. onCreate 안에 코드를 입력한다.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
위 코드는 Google 로그인을 앱에 통합하는 코드다.
GoogleSignInOptions 객체를 구성할 때 requestIdToken을 호출합니다.
2. //여기에 버튼 클릭시 실행될 코드삽입 주석 밑에 다음 코드를 입력한다.
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
3. 아래 코드를 AppCompatActivity안에 넣어준다. (onCreate 밖)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithGoogle(account);
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
// ...
}
}
}
4. 아래 코드를 GoogleSignInOptions gso 밑에 넣어준다.
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
그다음 AppCompatActivity에 선언해준다.
private GoogleSignInClient mGoogleSignInClient;
빨간색으로 오류 밑줄이 뜨면 Alt+Enter를 누른다음
맨 위에 있는 걸 눌러주면된다!
5. RC_SIGN_IN에 빨간색으로 에러가 떠 있다.
private static final int RC_SIGN_IN = 10;
저렇게 코드가 뜨면 10을 넣어준다.
6. 아래 코드를 AppCompatActivity안에 넣어준다. onActivityResult 밑에 넣어주도록 하자
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
}else{
Toast.makeText(Login.this, "아이디 생성 완료",Toast.LENGTH_SHORT).show();
}
// ...
}
});
}
그리고 나서 에러가 뜨는 TAG들을 지워준다.
7. AppCompatActivity에 mAuth를 선언해준다.
private FirebaseAuth mAuth;
그리고 onCreate에 아래 코드를 넣어준다.
mAuth = FirebaseAuth.getInstance();
8. AppCompatActivity 오른쪽에 implements GoogleApiClient.OnConnectionFailedListener를 이어서 넣어준다.
public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener
여기까지 완료했다면 다시 Build를 해보자
맨 밑에 있는 Google Sign in 버튼을 눌러주면
짜잔 이렇게 구글 계정으로 로그인 할 수 있는 화면이 나온다! 계정을 클릭하고 다시 Firebase 콘솔로 돌아가보면
이렇게 계정이 등록되어있다.
참고할 최종 Login.java
package com.example.paik;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
public class Login extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener{
private static final int RC_SIGN_IN = 10;
private SignInButton google_lgbtn; //구글 로그인 버튼 선언
public Button button_login; //로그인 버튼 선언
public Button button_signup; //가입 버튼 선언
private GoogleSignInClient mGoogleSignInClient;
private FirebaseAuth mAuth;
/*여기부터 onCreate*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mAuth = FirebaseAuth.getInstance();
/*구글 로그인 앱에 통합*/
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
/*로그인 버튼*/
button_login = findViewById(R.id.button_login);
button_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
startActivity(intent);
}
});
/*가입 버튼*/
button_signup = findViewById(R.id.button_signup);
button_signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),Signup.class);
startActivity(intent);
}
});
/*구글 로그인 버튼*/
google_lgbtn = findViewById(R.id.google_lgbtn);
google_lgbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//여기에 버튼 클릭시 실행될 코드 삽입
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
});
}/*onCreate 끝!*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithGoogle(account);
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
// ...
}
}
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
}else{
Toast.makeText(Login.this, "아이디 생성 완료",Toast.LENGTH_SHORT).show();
}
// ...
}
});
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}/*AppCompatActivity 끝!*/
'App > Android' 카테고리의 다른 글
Fragment를 화면에 추가하는 방법 이해하기 (0) | 2019.09.24 |
---|---|
[Android] RecyclerView (0) | 2019.08.27 |
[Android] SharedPreference (0) | 2019.08.27 |
[Android Studio] Google 로그인 인증(2) (0) | 2019.08.18 |
[Android Studio] Google 로그인 인증(1) (0) | 2019.08.18 |