개발/Android (JAVA)

[안드로이드 스튜디오] 구글 로그인 연동 자동 로그인 구현

Printemp 2021. 11. 9.

https://amanteattirance.tistory.com/74

 

처음으로 만들어본 게임을 플레이스토어에 출시했습니다!

https://play.google.com/store/apps/details?id=com.amanteattirance.pingtest 대학 커리큘럼을 따라 파이썬과 C언어를 배우던 중 학습한 프로그래밍을 실제로 응용해 보고 싶다는 생각이 들었다. C언어로는 할..

amanteattirance.tistory.com

먼저 파이어베이스에 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로 이동합니다.

댓글

💲 추천 글