I am trying to use CredentialManager
to save username and password. I am using xml layout and testing on Android 12, I keeping getting error saying androidx.credentials.exceptions.CreateCredentialUnknownException: During save password, found password failure response from one tap 16: [28431] Skipping password saving since the user is likely prompted with Android Autofill.
When I checked the doc, it says to ignore the error but the OS never prompts me to save the credentials.
Here is the sample code
private suspend fun signUp(username: String, password: String): String {
return try {
//make api call to your backend and if success then
credentialManager.createCredential(
context = this,
request = CreatePasswordRequest(
id = username,
password = password
)
)
"Success"
} catch (e: CreateCredentialCancellationException) {
e.printStackTrace()
"Cancelled"
} catch(e: CreateCredentialException) {
e.printStackTrace()
Log.i("Erroris",e.toString())
"Failure"
}
}
Here is my xml layout
<EditText
android:id="@+id/username"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:autofillHints="username"
android:inputType="text"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="LabelFor"
android:hint="@string/username"
android:layout_marginBottom="200dp"
/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/username"
tools:ignore="LabelFor"
android:autofillHints="password"
android:hint="@string/password"
android:id="@+id/password"
/>
Now in my xml layout I have tried couple of things like
android:importantForAutofill="no"
tools:ignore="Autofill,LabelFor"
In my code I also tried adding
val autofillManager = getSystemService(AutofillManager::class.java)
autofillManager?.disableAutofillServices()
but the error persists
See the Troubleshooting Guide concerning CreateCredentialUnknownException
...
This error only impacts Android 13 and earlier versions when Google is the designated Autofill provider. In such cases, users will receive a save prompt from Autofill, and the password will be stored in Google Password Manager. Importantly, credentials saved using Autofill with Google are bi-directionally synced with the Credential Manager API. Therefore, this error can be safely disregarded.
It might eventually fail when also disabling auto-fill, because then the given situation won't be "when Google is the designated Autofill provider" anymore. This must stay enabled < Android 14.
CredentialManager
is entirely useless in this situation.
You could in best case try to force an autofill request on focus:
fun eventHandler(view: View) {
val afm = requireContext().getSystemService(AutofillManager::class.java)
afm?.requestAutofill(view)
}
The issue filed for this ultimately just redirects to the above troubleshooting guide.