Skip to content

Instantly share code, notes, and snippets.

@dylangrijalva
Created March 15, 2023 05:11
Show Gist options
  • Save dylangrijalva/f2d024f24ae0e31227de38474f7c8e22 to your computer and use it in GitHub Desktop.
Save dylangrijalva/f2d024f24ae0e31227de38474f7c8e22 to your computer and use it in GitHub Desktop.
One Tap Sign In Handler
class GoogleSignInHandler(fragment: Fragment) {
private val oneTapClient = Identity.getSignInClient(fragment.requireContext())
private var callback: ActivityResultCallback<ActivityResult> = ActivityResultCallback {
fragment.toast("Hello!")
}
private val launcher: ActivityResultLauncher<IntentSenderRequest> =
fragment.registerForActivityResult(
ActivityResultContracts.StartIntentSenderForResult(),
callback
)
private val signInRequest = BeginSignInRequest.builder().setGoogleIdTokenRequestOptions(
BeginSignInRequest.GoogleIdTokenRequestOptions.builder().setSupported(true)
.setServerClientId(fragment.getString(R.string.firebase_server_web_client_id))
.setFilterByAuthorizedAccounts(false).build()
).build()
fun startSignInFlow(onCompleted: (Result<SignInCredential>) -> Unit) {
callback = ActivityResultCallback {
val credential = oneTapClient.getSignInCredentialFromIntent(it.data)
onCompleted(fromSuccess(credential))
}
oneTapClient.beginSignIn(signInRequest).addOnSuccessListener { signInResult ->
try {
val intentRequest = IntentSenderRequest
.Builder(signInResult.pendingIntent.intentSender)
.build()
launcher.launch(intentRequest)
} catch (error: Exception) {
onCompleted(fromError(error))
}
}.addOnFailureListener {
onCompleted(fromError(it))
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment