[Android Studio] Google 로그인 인증 (3)

2019. 8. 18. 15:30·App/Android

https://firebase.google.com/docs/auth/android/google-signin?authuser=0

 

Android에서 Google 로그인을 사용하여 인증하기  |  Firebase

앱에 Google 로그인을 통합하여 사용자가 Google 계정을 통해 Firebase에 인증하도록 할 수 있습니다. 시작하기 전에 아직 추가하지 않았다면 Android 프로젝트에 Firebase를 추가합니다. 프로젝트 수준 build.gradle 파일의 buildscript 및 allprojects 섹션에 Google의 Maven 저장소가 포함되어야 합니다. 다음과 같이 모듈(앱 수준) Gradle 파일(일반적으로 app/build.gradle)에 Fir

firebase.google.com

 


 

 

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에 빨간색으로 에러가 떠 있다. 

Alt+Enter 눌러주기
Create Field를 눌러주고

 

두번째 Login 눌러주기

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

 

Alt+Enter 누른 다음 Implement methods 클릭
onConnectionFailed 선택 후 ok


 

여기까지 완료했다면 다시 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
'App/Android' 카테고리의 다른 글
  • [Android] RecyclerView
  • [Android] SharedPreference
  • [Android Studio] Google 로그인 인증(2)
  • [Android Studio] Google 로그인 인증(1)
soyeon26
soyeon26
  • soyeon26
    개발 일지
    soyeon26
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • Web (22)
        • Web (1)
        • HTTP (0)
      • Language (29)
        • Java Script (3)
        • Type Srcipt (1)
        • Java (25)
      • Front (19)
        • HTML+CSS (4)
        • React (15)
      • Back (41)
        • Spring(Springboot) (9)
        • JSP (21)
        • Database (5)
        • NestJS (6)
      • Devops (6)
        • Docker (1)
        • Git & SVN (5)
      • App (7)
        • Android (7)
      • IT 정보 (3)
  • 블로그 메뉴

    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바스크립트set
    Next.js 필요성
    과학기술인번호 조회
    중복제거
    스프링부트
    Next.js
    서블릿
    데이터베이스 강의
    김영한
    Java
    인프런
    SQL강의 추천
    강의후기
    React Next.js
    Spring
    백엔드
    java의 정석
    프론트엔드
    과학기술인 등록번호 발급
    sql강의
    과학기술인 등록
    SSR
    csr과ssr의 차이
    javascript
    과학기술인등록번호 조회
    csrvsssr
    과학기술인 번호 발급
    React
    springboot
    강의 후기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
soyeon26
[Android Studio] Google 로그인 인증 (3)
상단으로

티스토리툴바