Conversation
Play Core dispatches onRequestDialog on binder code 2 while the implicit AIDL id resolved to code 1, so the integrity dialog callback was silently dropped and apps waiting on it stayed stuck on their integrity check screen forever.
requestAndShowDialog() currently does not send any response to the caller. As a result, Play Integrity clients waiting for the corresponding Task remain pending indefinitely.
|
Is all that code really needed now? In my opinion this is enough (for an unimplemented code): Once it is fully implemented then the log can be improved but now it is just wasting time. |
|
Thanks for the review. That said, I’d like to point out that knowing the bundle’s attributes (especially Here, I was able to figure out what was causing my issues as I applied fixes to the ROM:
|
|
The choice is on @mar-v-in to whether the binder check is worth in an unimplemented function. |
Description
IntegrityService.requestAndShowDialog()currently does not send any response to the caller.As a result, Play Integrity clients waiting for the corresponding Task remain pending indefinitely.
This was observed with Boursobank, which calls:
requestAndShowDialog(com.boursorama.android.clients, 1)where dialog type 1 is GET_LICENSED (see).
GET_LICENSED should trigger a dialog prompting users to acquire or purchase a license for the app on Google Play (see)
Problem
The current implementation of
requestAndShowDialog()is empty and returns without invokingIRequestDialogCallback:GmsCore/vending-app/src/main/kotlin/com/google/android/finsky/integrityservice/IntegrityService.kt
Lines 97 to 99 in c005d99
This leaves the Play Core request unresolved.
The issue is particularly visible after #3725, which fixed the Binder transaction ID of
IRequestDialogCallback.onRequestDialog(). Once that transaction ID is correct, clients can reachrequestAndShowDialog(), but the service still does not complete the request.Observed behavior
On Boursobank app:
The application remains stuck on its loading screen indefinitely.
Now
The app receives a
DIALOG_UNAVAILABLEresult and proceeds to its own handling of the unavailable remediation dialog, displaying a message that the application must be installed from Google Play.This confirms that the missing callback is the cause of the indefinite wait.
Reversed app
The Play Core client expects the IRequestDialogCallback response to contain either:
errorordialog.intentQuick workflow:
When neither is present, the Play Core implementation treats the response as an unavailable dialog and completes the corresponding task with
DIALOG_UNAVAILABLE.Therefore, returning an empty Bundle is preferable to silently leaving the request pending.
This PR does not claim to implement Play Integrity remediation dialogs/flow. It only ensures that unsupported remediation requests complete.
In particular,
GET_LICENSEDmay still requires a proper remediationPendingIntentif full Play Integrity remediation support is to be implemented...Related
#3738
#3725