Skip to content

Commit

Permalink
Merge pull request #61 from android/57-example-of-CredentialManagerHa…
Browse files Browse the repository at this point in the history
…ndler

Add example for CredentialManagerHandler for issue 57
  • Loading branch information
niharika2810 committed Feb 1, 2024
2 parents 225706b + f7a8210 commit 6c51f04
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 1 deletion.
51 changes: 51 additions & 0 deletions CredentialManagerWebView/CredentialManagerHandler.kt
@@ -0,0 +1,51 @@
package com.credmanwebtest.webhandler

import android.app.Activity
import android.util.Log
import androidx.credentials.*
import androidx.credentials.exceptions.*

/**
* A class that encapsulates the credential manager object and provides simplified APIs for
* creating and retrieving public key credentials. For other types of credentials follow the
* documentation https://developer.android.com/training/sign-in/passkeys
*/
class CredentialManagerHandler(private val activity: Activity) {

private val mCredMan = CredentialManager.create(activity.applicationContext)
private val TAG = "CredentialManagerHandler"

/**
* Encapsulates the create passkey API for credential manager in a less error-prone manner.
*
* @param request a create public key credential request JSON required by [CreatePublicKeyCredentialRequest].
* @return [CreatePublicKeyCredentialResponse] containing the result of the credential creation.
*/
suspend fun createPasskey(request: String): CreatePublicKeyCredentialResponse {
val createRequest = CreatePublicKeyCredentialRequest(request)
try {
return mCredMan.createCredential(activity, createRequest) as CreatePublicKeyCredentialResponse
} catch (e: CreateCredentialException) {
// For error handling use guidance from https://developer.android.com/training/sign-in/passkeys
Log.i(TAG, "Error creating credential: ErrMessage: ${e.errorMessage}, ErrType: ${e.type}")
throw e
}
}

/**
* Encapsulates the get passkey API for credential manager in a less error-prone manner.
*
* @param request a get public key credential request JSON required by [GetCredentialRequest].
* @return [GetCredentialResponse] containing the result of the credential retrieval.
*/
suspend fun getPasskey(request: String): GetCredentialResponse {
val getRequest = GetCredentialRequest(listOf(GetPublicKeyCredentialOption(request, null)))
try {
return mCredMan.getCredential(activity, getRequest)
} catch (e: GetCredentialException) {
// For error handling use guidance from https://developer.android.com/training/sign-in/passkeys
Log.i(TAG, "Error retrieving credential: ${e.message}")
throw e
}
}
}
2 changes: 1 addition & 1 deletion CredentialManagerWebView/PasskeyWebListener.kt
@@ -1,4 +1,4 @@
package com.leecam.credmanwebtest.webhandler
package com.credmanwebtest.webhandler

import android.app.Activity
import android.net.Uri
Expand Down

0 comments on commit 6c51f04

Please sign in to comment.