|
|
@@ -2,19 +2,13 @@ package com.adealink.weparty.account.login.auth
|
|
|
|
|
|
import android.app.Activity
|
|
|
import android.content.Intent
|
|
|
-import android.content.IntentSender
|
|
|
-import androidx.core.app.ActivityCompat.startIntentSenderForResult
|
|
|
import com.adealink.frame.log.Log
|
|
|
import com.adealink.weparty.account.BuildConfig
|
|
|
import com.adealink.weparty.account.constant.GOOGLE_CLIENT_ID
|
|
|
import com.adealink.weparty.account.constant.GOOGLE_CLIENT_ID_DEBUG
|
|
|
import com.adealink.weparty.account.constant.TAG_GOOGLE_AUTH
|
|
|
-import com.adealink.weparty.account.login.auth.AuthManager.Companion.REQ_GOOGLE_ONE_TAP
|
|
|
import com.adealink.weparty.account.login.auth.AuthManager.Companion.REQ_GOOGLE_SIGN_IN
|
|
|
import com.adealink.weparty.account.login.data.ThirdType
|
|
|
-import com.google.android.gms.auth.api.identity.BeginSignInRequest
|
|
|
-import com.google.android.gms.auth.api.identity.Identity
|
|
|
-import com.google.android.gms.auth.api.identity.SignInClient
|
|
|
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
|
|
|
@@ -23,7 +17,6 @@ import com.google.android.gms.auth.api.signin.GoogleSignInStatusCodes
|
|
|
import com.google.android.gms.common.ConnectionResult
|
|
|
import com.google.android.gms.common.GoogleApiAvailability
|
|
|
import com.google.android.gms.common.api.ApiException
|
|
|
-import com.google.android.gms.common.api.CommonStatusCodes
|
|
|
import com.google.android.gms.tasks.Task
|
|
|
import java.lang.ref.WeakReference
|
|
|
|
|
|
@@ -34,27 +27,14 @@ class GoogleAuth(
|
|
|
|
|
|
companion object {
|
|
|
private const val ERROR_CODE_SEND_INTENT_EXCEPTION = 10000
|
|
|
- private const val ERROR_CODE_START_ONE_TAP_FAILED = 10001
|
|
|
private const val ERROR_CODE_NO_ID_TOKEN = 10002
|
|
|
}
|
|
|
|
|
|
override var secret: String? = null
|
|
|
|
|
|
- private var oneTapClient: SignInClient? = null
|
|
|
private var googleSignInClient: GoogleSignInClient? = null
|
|
|
-
|
|
|
- private var showOneTapUI = true
|
|
|
val thirdType = ThirdType.GOOGLE
|
|
|
|
|
|
- private fun getOneTapClient(activity: Activity): SignInClient {
|
|
|
- if (oneTapClient != null) {
|
|
|
- return oneTapClient!!
|
|
|
- }
|
|
|
-
|
|
|
- oneTapClient = Identity.getSignInClient(activity)
|
|
|
- return oneTapClient!!
|
|
|
- }
|
|
|
-
|
|
|
private fun getServerClientId(): String {
|
|
|
return when (BuildConfig.DEBUG) {
|
|
|
true -> GOOGLE_CLIENT_ID_DEBUG
|
|
|
@@ -71,118 +51,7 @@ class GoogleAuth(
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- oneTapSignIn(activity, {
|
|
|
- oneTapSignUp(activity) {
|
|
|
- unOneTapSignIn(activity)
|
|
|
- }
|
|
|
- }, {
|
|
|
- unOneTapSignIn(activity)
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- private fun oneTapSignIn(
|
|
|
- activity: Activity,
|
|
|
- signInFailed: () -> Unit,
|
|
|
- sendIntentFailed: () -> Unit,
|
|
|
- ) {
|
|
|
- val signInRequest = BeginSignInRequest.builder()
|
|
|
- .setGoogleIdTokenRequestOptions(
|
|
|
- BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
|
|
|
- .setSupported(true)
|
|
|
- .setServerClientId(getServerClientId())
|
|
|
- .setFilterByAuthorizedAccounts(true)
|
|
|
- .build()
|
|
|
- )
|
|
|
- .setAutoSelectEnabled(true)
|
|
|
- .build()
|
|
|
- getOneTapClient(activity).beginSignIn(signInRequest)
|
|
|
- .addOnSuccessListener { result ->
|
|
|
- try {
|
|
|
- startIntentSenderForResult(
|
|
|
- activity,
|
|
|
- result.pendingIntent.intentSender, REQ_GOOGLE_ONE_TAP,
|
|
|
- null, 0, 0, 0, null
|
|
|
- )
|
|
|
- } catch (e: IntentSender.SendIntentException) {
|
|
|
- Log.e(
|
|
|
- TAG_GOOGLE_AUTH,
|
|
|
- "oneTapSignIn, SendIntentException, e:${e.localizedMessage}"
|
|
|
- )
|
|
|
- sendIntentFailed()
|
|
|
- }
|
|
|
- }
|
|
|
- .addOnCanceledListener {
|
|
|
- Log.i(
|
|
|
- TAG_GOOGLE_AUTH,
|
|
|
- "oneTapSignIn, start one tap ui cancel"
|
|
|
- )
|
|
|
- signInFailed()
|
|
|
- }
|
|
|
- .addOnCompleteListener {
|
|
|
- Log.i(
|
|
|
- TAG_GOOGLE_AUTH,
|
|
|
- "oneTapSignIn, start one tap ui complete, isSuccessful: ${it.isSuccessful}"
|
|
|
- )
|
|
|
-
|
|
|
- }
|
|
|
- .addOnFailureListener { e ->
|
|
|
- Log.e(
|
|
|
- TAG_GOOGLE_AUTH,
|
|
|
- "oneTapSignIn, start one tap ui failed, e:${e.localizedMessage}"
|
|
|
- )
|
|
|
- signInFailed()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun oneTapSignUp(
|
|
|
- activity: Activity,
|
|
|
- failed: () -> Unit,
|
|
|
- ) {
|
|
|
- val signUpRequest = BeginSignInRequest.builder()
|
|
|
- .setGoogleIdTokenRequestOptions(
|
|
|
- BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
|
|
|
- .setSupported(true)
|
|
|
- .setServerClientId(getServerClientId())
|
|
|
- .setFilterByAuthorizedAccounts(false)
|
|
|
- .build()
|
|
|
- )
|
|
|
- .build()
|
|
|
- getOneTapClient(activity).beginSignIn(signUpRequest)
|
|
|
- .addOnSuccessListener {
|
|
|
- try {
|
|
|
- startIntentSenderForResult(
|
|
|
- activity,
|
|
|
- it.pendingIntent.intentSender, REQ_GOOGLE_ONE_TAP,
|
|
|
- null, 0, 0, 0, null
|
|
|
- )
|
|
|
- } catch (e: IntentSender.SendIntentException) {
|
|
|
- Log.e(
|
|
|
- TAG_GOOGLE_AUTH,
|
|
|
- "oneTapSignUp, SendIntentException, e:${e.localizedMessage}"
|
|
|
- )
|
|
|
- failed()
|
|
|
- }
|
|
|
- }
|
|
|
- .addOnCanceledListener {
|
|
|
- Log.e(
|
|
|
- TAG_GOOGLE_AUTH,
|
|
|
- "oneTapSignUp, start one tap ui cancel"
|
|
|
- )
|
|
|
- failed()
|
|
|
- }
|
|
|
- .addOnCompleteListener {
|
|
|
- Log.i(
|
|
|
- TAG_GOOGLE_AUTH,
|
|
|
- "oneTapSignUp, start one tap ui complete, isSuccessful:${it.isSuccessful}"
|
|
|
- )
|
|
|
- }
|
|
|
- .addOnFailureListener {
|
|
|
- Log.e(
|
|
|
- TAG_GOOGLE_AUTH,
|
|
|
- "oneTapSignUp, start one tap ui failed, e:${it.localizedMessage}"
|
|
|
- )
|
|
|
- failed()
|
|
|
- }
|
|
|
+ unOneTapSignIn(activity)
|
|
|
}
|
|
|
|
|
|
private fun getGoogleSignInClient(activity: Activity): GoogleSignInClient {
|
|
|
@@ -193,6 +62,7 @@ class GoogleAuth(
|
|
|
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
|
|
|
.requestIdToken(getServerClientId())
|
|
|
.requestEmail()
|
|
|
+ .requestProfile()
|
|
|
.build()
|
|
|
googleSignInClient = GoogleSignIn.getClient(activity, gso)
|
|
|
return googleSignInClient!!
|
|
|
@@ -205,36 +75,6 @@ class GoogleAuth(
|
|
|
|
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
|
|
|
when (requestCode) {
|
|
|
- REQ_GOOGLE_ONE_TAP -> {
|
|
|
- try {
|
|
|
- val credential = oneTapClient?.getSignInCredentialFromIntent(intent)
|
|
|
- val idToken = credential?.googleIdToken
|
|
|
- when {
|
|
|
- idToken != null -> {
|
|
|
- authCallback?.onSuccess(thirdType, idToken)
|
|
|
- }
|
|
|
- else -> {
|
|
|
- Log.e(TAG_GOOGLE_AUTH, "No ID token")
|
|
|
- authCallback?.onFailed(thirdType, "no id token", ERROR_CODE_NO_ID_TOKEN)
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (e: ApiException) {
|
|
|
- Log.e(TAG_GOOGLE_AUTH, "Get ID Token Exception, e:${e.localizedMessage}")
|
|
|
- when (e.statusCode) {
|
|
|
- CommonStatusCodes.CANCELED -> {
|
|
|
- // Don't re-prompt the user.
|
|
|
- showOneTapUI = false
|
|
|
- authCallback?.onCancel(thirdType)
|
|
|
- }
|
|
|
- CommonStatusCodes.NETWORK_ERROR -> {
|
|
|
- authCallback?.onFailed(thirdType, e.message ?: "", e.statusCode)
|
|
|
- }
|
|
|
- else -> {
|
|
|
- authCallback?.onFailed(thirdType, e.message ?: "", e.statusCode)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
REQ_GOOGLE_SIGN_IN -> {
|
|
|
val task: Task<GoogleSignInAccount> =
|
|
|
GoogleSignIn.getSignedInAccountFromIntent(intent)
|
|
|
@@ -269,7 +109,6 @@ class GoogleAuth(
|
|
|
|
|
|
override fun logout() {
|
|
|
val activity = activityRef?.get() ?: return
|
|
|
- getOneTapClient(activity).signOut()
|
|
|
getGoogleSignInClient(activity).signOut()
|
|
|
}
|
|
|
|