android
안드로이드 스튜디오 구글 로그인(2)
Daekyue
2023. 1. 3. 12:04
implementation 'com.google.firebase:firebase-core:21.1.1' // 파이어베이스 코어 추가
implementation 'com.google.firebase:firebase-auth:21.0.8' // 파이어베이스 인증 추가
//
implementation 'com.firebase:firebase-ui-auth:4.2.1' // 파이어베이스 인증2
//이 부분 오류발생시
//implementation 'com.google.firebase:firebase-auth' 이렇게 수정
implementation 'com.github.bumptech.glide:glide:4.11.0' // 글라이드 이미지 로딩
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' // 글라이드 이미지 로딩2
// 다음 코드들을 build.gradle(:app)에 넣고 Sync Now 해준다
다음은 res - layout-activity_main에서
<com.google.android.gms.common.SignInButton
android:id="@+id/btn_google"
android:layout_width="200dp"
android:layout_height="wrap_content"/>
// 구글 로그인 버튼을 추가해준다
LoginActivity 코드입니다.
package com.akj.a0924;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
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.GoogleAuthProvider;
public class LoginActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
private SignInButton btn_google; // 구글 로그인 버튼
private FirebaseAuth auth; // 파이어 베이스 인증 객체
private GoogleApiClient googleApiClient; // 구글 API 클라이언트 객체
private static final int REQ_SIGN_GOOGLE = 100; // 구글 로그인 결과 코드
@Override
protected void onCreate(Bundle savedInstanceState) { // 앱이 실행될때 처음 수행되는 곳
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
googleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this,this)
.addApi(Auth.GOOGLE_SIGN_IN_API, googleSignInOptions)
.build();
auth = FirebaseAuth.getInstance(); // 파이어베이스 인증 객체 초기화
btn_google = findViewById(R.id.btn_google);
btn_google.setOnClickListener(new View.OnClickListener() { // 구글 로그인 버튼을 클릭했을 때 여기서 수행
@Override
public void onClick(View view) {
Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient); // 구글에서 제공하는 액티비티 연결
startActivityForResult(intent, REQ_SIGN_GOOGLE); // 구글에서 제공하는 액티비티에서 제공하는 결과값을 받아옴
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { // 구글 로그인 인증을 요청 했을 때 결과 값을 되돌려 받는 곳
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQ_SIGN_GOOGLE) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if(result.isSuccess())
{
GoogleSignInAccount account = result.getSignInAccount(); // account라는 데이터는 구글 로그인 정보를 담고있다. ( 닉네임, 프로필사진, 이메일주소...등)
resultLogin(account); // 로그인 결과 값 출력 수행하라는 메소드
}
}
}
private void resultLogin(GoogleSignInAccount account) {
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(),null);
auth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()) { // 로그인이 성공했으면
Toast.makeText(LoginActivity.this, "로그인 성공", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
intent.putExtra("nickName", account.getDisplayName());
intent.putExtra("photoUrl",String.valueOf(account.getPhotoUrl())); // String.valueOf() 특정 자료형을 String 형태로 변환할때
startActivity(intent);
}else{ // 로그인에 실패했으면
Toast.makeText(LoginActivity.this, "로그인 실패", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}
ResultActivity 코드입니다
package com.akj.a0924;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
public class ResultActivity extends AppCompatActivity {
private TextView tv_result;
private ImageView iv_profile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Intent intent = getIntent();
String nickName = intent.getStringExtra("nickName"); // MainActivity로부터 닉네임 전달받음
String photoUrl = intent.getStringExtra("photoUrl"); // MainActivity로부터 프로필 Url 전달받음
tv_result = findViewById(R.id.tv_result);
tv_result.setText(nickName); // 닉네임 textview에 세팅
iv_profile = findViewById(R.id.iv_profile);
Glide.with(this).load(photoUrl).into(iv_profile); // 프로필 url을 이미지뷰에 세팅
}
}
+++++++++수정
실행할 때 빌드 오류 날 경우
build.gradle(Module)
implementation 'com.google.firebase:firebase-core:21.1.1' // 파이어베이스 코어 추가
implementation 'com.google.firebase:firebase-auth:21.0.8' // 파이어베이스 인증 추가
implementation 'com.firebase:firebase-ui-auth:4.2.1' // 파이어베이스 인증2
// 다음 코드들을 build.gradle(:app)에 넣고 Sync Now 해준다
// 오류발생시 위 코드 아래꺼로 수정
implementation 'com.google.firebase:firebase-core:21.1.1' // 파이어베이스 코어 추가
implementation 'com.google.firebase:firebase-auth:21.0.8' // 파이어베이스 인증 추가
implementation 'com.google.firebase:firebase-auth'