Skip to content

Commit 6c51f04

Browse files
authored
Merge pull request #61 from android/57-example-of-CredentialManagerHandler
Add example for CredentialManagerHandler for issue 57
2 parents 225706b + f7a8210 commit 6c51f04

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.credmanwebtest.webhandler
2+
3+
import android.app.Activity
4+
import android.util.Log
5+
import androidx.credentials.*
6+
import androidx.credentials.exceptions.*
7+
8+
/**
9+
* A class that encapsulates the credential manager object and provides simplified APIs for
10+
* creating and retrieving public key credentials. For other types of credentials follow the
11+
* documentation https://developer.android.com/training/sign-in/passkeys
12+
*/
13+
class CredentialManagerHandler(private val activity: Activity) {
14+
15+
private val mCredMan = CredentialManager.create(activity.applicationContext)
16+
private val TAG = "CredentialManagerHandler"
17+
18+
/**
19+
* Encapsulates the create passkey API for credential manager in a less error-prone manner.
20+
*
21+
* @param request a create public key credential request JSON required by [CreatePublicKeyCredentialRequest].
22+
* @return [CreatePublicKeyCredentialResponse] containing the result of the credential creation.
23+
*/
24+
suspend fun createPasskey(request: String): CreatePublicKeyCredentialResponse {
25+
val createRequest = CreatePublicKeyCredentialRequest(request)
26+
try {
27+
return mCredMan.createCredential(activity, createRequest) as CreatePublicKeyCredentialResponse
28+
} catch (e: CreateCredentialException) {
29+
// For error handling use guidance from https://developer.android.com/training/sign-in/passkeys
30+
Log.i(TAG, "Error creating credential: ErrMessage: ${e.errorMessage}, ErrType: ${e.type}")
31+
throw e
32+
}
33+
}
34+
35+
/**
36+
* Encapsulates the get passkey API for credential manager in a less error-prone manner.
37+
*
38+
* @param request a get public key credential request JSON required by [GetCredentialRequest].
39+
* @return [GetCredentialResponse] containing the result of the credential retrieval.
40+
*/
41+
suspend fun getPasskey(request: String): GetCredentialResponse {
42+
val getRequest = GetCredentialRequest(listOf(GetPublicKeyCredentialOption(request, null)))
43+
try {
44+
return mCredMan.getCredential(activity, getRequest)
45+
} catch (e: GetCredentialException) {
46+
// For error handling use guidance from https://developer.android.com/training/sign-in/passkeys
47+
Log.i(TAG, "Error retrieving credential: ${e.message}")
48+
throw e
49+
}
50+
}
51+
}

CredentialManagerWebView/PasskeyWebListener.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.leecam.credmanwebtest.webhandler
1+
package com.credmanwebtest.webhandler
22

33
import android.app.Activity
44
import android.net.Uri

0 commit comments

Comments
 (0)