구글 로그인 환경 점검을 추가한다
구글 로그인 시작 전에 필수 설정과 Google Play 서비스 상태를 확인한다. 사용자가 해결 가능한 오류에서는 시스템 다이얼로그를 표시한다. 인증 예외 로그에 예외 타입을 포함해 원인 추적성을 높인다.
This commit is contained in:
@@ -16,6 +16,8 @@ import androidx.credentials.GetCredentialRequest
|
|||||||
import androidx.credentials.exceptions.GetCredentialException
|
import androidx.credentials.exceptions.GetCredentialException
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.media3.common.util.UnstableApi
|
import androidx.media3.common.util.UnstableApi
|
||||||
|
import com.google.android.gms.common.ConnectionResult
|
||||||
|
import com.google.android.gms.common.GoogleApiAvailability
|
||||||
import com.google.android.libraries.identity.googleid.GetGoogleIdOption
|
import com.google.android.libraries.identity.googleid.GetGoogleIdOption
|
||||||
import com.google.android.libraries.identity.googleid.GoogleIdTokenCredential
|
import com.google.android.libraries.identity.googleid.GoogleIdTokenCredential
|
||||||
import com.google.android.libraries.identity.googleid.GoogleIdTokenCredential.Companion.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL
|
import com.google.android.libraries.identity.googleid.GoogleIdTokenCredential.Companion.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL
|
||||||
@@ -125,6 +127,9 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>(ActivityLoginBinding::i
|
|||||||
binding.ivSignUpEmail.setOnClickListener { startSignUp() }
|
binding.ivSignUpEmail.setOnClickListener { startSignUp() }
|
||||||
|
|
||||||
binding.ivLoginGoogle.setOnClickListener {
|
binding.ivLoginGoogle.setOnClickListener {
|
||||||
|
if (!isGoogleLoginAvailable()) {
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
loadingDialog.show(width = screenWidth)
|
loadingDialog.show(width = screenWidth)
|
||||||
val credentialManager = CredentialManager.create(this)
|
val credentialManager = CredentialManager.create(this)
|
||||||
|
|
||||||
@@ -152,7 +157,10 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>(ActivityLoginBinding::i
|
|||||||
handleSignIn(result.credential)
|
handleSignIn(result.credential)
|
||||||
} catch (e: GetCredentialException) {
|
} catch (e: GetCredentialException) {
|
||||||
showToast(getString(R.string.login_google_failed))
|
showToast(getString(R.string.login_google_failed))
|
||||||
Logger.e("Couldn't retrieve user's credentials: ${e.localizedMessage}")
|
Logger.e(
|
||||||
|
"Couldn't retrieve user's credentials: " +
|
||||||
|
"${e.javaClass.simpleName}, ${e.localizedMessage}"
|
||||||
|
)
|
||||||
loadingDialog.dismiss()
|
loadingDialog.dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -301,6 +309,27 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>(ActivityLoginBinding::i
|
|||||||
startActivity(nextIntent)
|
startActivity(nextIntent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun isGoogleLoginAvailable(): Boolean {
|
||||||
|
if (BuildConfig.GOOGLE_CLIENT_ID.isBlank()) {
|
||||||
|
Logger.e("Google login blocked: GOOGLE_CLIENT_ID is blank.")
|
||||||
|
showToast(getString(R.string.login_google_failed))
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
val status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this)
|
||||||
|
if (status == ConnectionResult.SUCCESS) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.e("Google login blocked: Google Play services unavailable. status=$status")
|
||||||
|
if (GoogleApiAvailability.getInstance().isUserResolvableError(status)) {
|
||||||
|
GoogleApiAvailability.getInstance()
|
||||||
|
.getErrorDialog(this, status, 1001)?.show()
|
||||||
|
}
|
||||||
|
showToast(getString(R.string.login_google_failed))
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
private fun navigateToMain() {
|
private fun navigateToMain() {
|
||||||
finishAffinity()
|
finishAffinity()
|
||||||
val nextIntent = Intent(applicationContext, MainActivity::class.java)
|
val nextIntent = Intent(applicationContext, MainActivity::class.java)
|
||||||
|
|||||||
Reference in New Issue
Block a user