https://amanteattirance.tistory.com/74
먼저 파이어베이스에 sha키를 이용하여 계정을 등록하고, SDK들을 등록해야합니다.
이 과정들 이후 부터 시작합니다.
자동로그인 코드입니다.
private void signInSilently() {
GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
if (GoogleSignIn.hasPermissions(account, signInOptions.getScopeArray())) {
// Already signed in.
// The signed in account is stored in the 'account' variable.
GoogleSignInAccount signedInAccount = account;
} else {
// Haven't been signed-in before. Try the silent sign-in first.
GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOptions);
signInClient
.silentSignIn()
.addOnCompleteListener(
this,
new OnCompleteListener<GoogleSignInAccount>() {
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
if (task.isSuccessful()) {
// The signed in account is stored in the task's result.
GoogleSignInAccount signedInAccount = task.getResult();
} else {
// Player will need to sign-in explicitly using via UI.
// See [sign-in best practices](http://developers.google.com/games/services/checklist) for guidance on how and when to implement Interactive Sign-in,
// and [Performing Interactive Sign-in](http://developers.google.com/games/services/android/signin#performing_interactive_sign-in) for details on how to implement
// Interactive Sign-in.
}
}
});
}
}
@Override
protected void onResume() {
super.onResume();
signInSilently();
}
사용자가 버튼을 클릭하지 않아도 자동으로 로그인 여부를 확인하여 로그인을 시도합니다.
로그인에 성공하지 못한 경우 사용자가 직접 로그인을 하게 해야합니다.
ublic class Googlelogin extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
private static final int RC_SIGN_IN = 1000;
private FirebaseAuth mAuth;
private GoogleApiClient mGoogleApiClient;
SignInButton Google_Login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_googlelogin);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API,gso)
.build();
mAuth = FirebaseAuth.getInstance();
Google_Login = findViewById(R.id.Google_Login);
Google_Login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
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) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
//구글 로그인 성공해서 파베에 인증
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
}
else{
//구글 로그인 실패
}
}
}
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()){
Toast.makeText(Googlelogin.this, "구글 로그인 실패", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(Googlelogin.this, "구글 로그인 성공", Toast.LENGTH_SHORT).show();
}
Intent intent = new Intent(Googlelogin.this, MainActivity.class);
startActivity(intent);
}
});
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}
로그인 버튼은 com.google.android.gms.common.SignInButton 를 xml에 추가해주시면 됩니다.
위 코드는 자동 로그인이 성공하지 못했을때 버튼을 이용하여 수동 로그인을 하는 과정입니다. 현재 액티비티는 Googlelogin이고 로그인이 성공하면 구글 로그인 성공 이라는 메세지와 함께 MainActivity로 이동합니다.
'개발 > Android (JAVA)' 카테고리의 다른 글
[안드로이드 스튜디오] 모듈 추가 안됨 해결 import module not working (0) | 2021.11.13 |
---|---|
처음으로 만들어본 게임을 플레이스토어에 출시했습니다! (6) | 2021.11.11 |
[안드로이드 스튜디오] 구글 리더보드 랭킹 업적 구현 (0) | 2021.11.09 |
댓글