반응형
package grocery.gohool.loginnregister;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;
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;
import org.json.JSONException;
import org.json.JSONObject;
public class LoginActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
private EditText login_id, login_password;
private Button login_btn, login_registerBtn;
//구글 로그인
private SignInButton google_btn; //로그인 버튼
private FirebaseAuth firebaseAuth; //파이어베이스 인증관련 객체
private GoogleApiClient googleApiClient; // 구글 API클라이언트 객체
private final static int REQ_CODE = 100; // 구글 로그인 결과코드 : 값 반환 받기 위해.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
login_id = (EditText) findViewById(R.id.login_id);
login_password = (EditText) findViewById(R.id.login_password);
login_btn = (Button) findViewById(R.id.login_btn);
login_registerBtn = (Button) findViewById(R.id.login_registerBtn);
//로그인 페이지 => 회원가입페이지
login_registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(intent);
}
});
//로그인 요청에대한 응답;
login_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String userID = login_id.getText().toString();
String userPassword = login_password.getText().toString();
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
boolean success = jsonObject.getBoolean("success");
if(success){
String userID = jsonObject.getString("userID");
String userPassword = jsonObject.getString("userPassword");
Toast.makeText(getApplicationContext(), "로그인성공!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("userID",userID);
intent.putExtra("userPASS", userPassword); startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), "로그인실패ㅠㅠ", Toast.LENGTH_SHORT).show();
return;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
LoginRequest loginRequest = new LoginRequest(userID,userPassword,responseListener);
RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
queue.add(loginRequest);
}
});
//구글 로그인
GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
googleApiClient = new GoogleApiClient.Builder(this) //fragement라면 getApplicationContext로
.enableAutoManage(this,this)
.addApi(Auth.GOOGLE_SIGN_IN_API,googleSignInOptions)
.build();
firebaseAuth = FirebaseAuth.getInstance();
google_btn = findViewById(R.id.google_btn);
google_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult(intent,REQ_CODE); //인증받고 다시 돌아옴
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQ_CODE){
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if(result.isSuccess()){
GoogleSignInAccount account = result.getSignInAccount();
resultLogin(account);
}
}
}
private void resultLogin(GoogleSignInAccount account){
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(),null);
firebaseAuth.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(),MainActivity.class);
intent.putExtra("email",account.getEmail());
intent.putExtra("name",account.getDisplayName());
startActivity(intent);
} else {
Toast.makeText(LoginActivity.this, "로그인실패", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}
package grocery.gohool.loginnregister;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView id,password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
id = (TextView) findViewById(R.id.id);
password = (TextView) findViewById(R.id.password);
Intent intent = getIntent();
String userId = intent.getStringExtra("userID");
String userPass = intent.getStringExtra("userPass");
id.setText(userId);
password.setText(userPass);
String email = intent.getStringExtra("email");
String name = intent.getStringExtra("name");
id.setText(email);
password.setText(name);
}
}
기존에 만들어두었던 로그인 회원가입 기능에 구글 연동만 추가해 주었다.
잘 된다.
아이디와 비밀번호 대신, 이메일과 닉네임만 가져왔다.
여기서 변경하고 싶으면 textView를 invisible로해서 변경하면 된다.
그럼 각각 값을 가져오니, 불편함없이 볼 수 있다.
반응형
'개발언어 > JAVA' 카테고리의 다른 글
안드로이드 ListView (0) | 2020.12.31 |
---|---|
클래스와 인스턴스 그리고 객체 (0) | 2020.12.31 |
안드로이드 파이어베이스 구글아이디 연동 (0) | 2020.12.30 |
데이터베이스 MySQL (0) | 2020.12.28 |
안드로이드 로그인 + 회원가입 만들기 (0) | 2020.12.27 |