package
com.example.loginbeta01
import
android.app.Activity
import
android.content.Intent
import
androidx.appcompat.app.AppCompatActivity
import
android.os.Bundle
import
android.util.Log
import
android.widget.Toast
import
androidx.activity.result.ActivityResultLauncher
import
androidx.activity.result.contract.ActivityResultContracts
import
com.example.loginbeta01.databinding.ActivityMainBinding
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.api.ApiException
import
com.google.android.gms.tasks.Task
class
MainActivity : AppCompatActivity() {
lateinit var mGoogleSignInClient: GoogleSignInClient
lateinit var resultLauncher: ActivityResultLauncher<Intent>
override fun onCreate(savedInstanceState: Bundle?) {
val binding = ActivityMainBinding.inflate(layoutInflater)
super
.onCreate(savedInstanceState)
setResultSignUp()
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestProfile()
.build()
mGoogleSignInClient = GoogleSignIn.getClient(
this
, gso);
with(binding) {
btnSignIn.setOnClickListener {
signIn()
}
btnGoSubActivity.setOnClickListener {
goSubActivity()
}
}
setContentView(binding.root)
}
private
fun goSubActivity() {
val intent = Intent(
this
, SubActivity::
class
.java)
startActivity(intent)
Toast.makeText(
this
@MainActivity
,
"Login successful"
, Toast.LENGTH_SHORT).show()
}
private
fun setResultSignUp() {
resultLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if
(result.resultCode == Activity.RESULT_OK) {
val task: Task<GoogleSignInAccount> =
GoogleSignIn.getSignedInAccountFromIntent(result.data)
handleSignInResult(task)
}
}
}
private
fun handleSignInResult(completedTask: Task<GoogleSignInAccount>) {
try
{
val account = completedTask.getResult(ApiException::
class
.java)
val email = account?.email.toString()
val familyName = account?.email.toString()
val givenName = account?.givenName.toString()
val displayName = account?.displayName.toString()
val photoURL = account?.photoUrl.toString()
Log.d(
"로그인한 유저의 이메일"
, email)
Log.d(
"로그인한 유저의 성"
, familyName)
Log.d(
"로그인한 유저의 이름"
, givenName)
Log.d(
"로그인한 유저의 전체이름"
, displayName)
Log.d(
"로그인한 유저의 프로필 사진의 주소"
, photoURL)
}
catch
(e: ApiException) {
Log.w(
"failed"
,
"signInResult:failed code="
+ e.statusCode)
}
}
private
fun signIn() {
val intent = Intent(
this
, SubActivity::
class
.java)
startActivity(intent)
val signInIntent: Intent = mGoogleSignInClient.getSignInIntent()
resultLauncher.launch(signInIntent)
Toast.makeText(
this
@MainActivity
,
"Login successful"
, Toast.LENGTH_SHORT).show()
}
private
fun revokeAccess() {
mGoogleSignInClient.revokeAccess()
.addOnCompleteListener(
this
) {
}
}
}