Na tej stronie dowiesz się, jak rozwiązywać problemy z ocenami integralności.
Po wysłaniu żądania tokena integralności możesz wyświetlić Odtwórz okno użytkownikowi. Okno dialogowe można wyświetlić, gdy jest więcej z oceną integralności. Okno wyświetla się u góry aplikacji, i zachęca użytkowników do rozwiązania problemu. Po zamknięciu okna możesz sprawdzić, czy problem został rozwiązany, przesyłając kolejną prośbę do zespołu ds. integralności API.
Okna integralności
GET_LICENSED (kod typu 1)
Problem z oceną
Gdy appLicensingVerdict == "UNLICENSED"
. Oznacza to, że konto użytkownika jest
bez licencji. Oznacza to, że nie zainstalował ani nie kupił aplikacji w Google Play.
Działania naprawcze
Możesz wyświetlić okno GET_LICENSED
, by poprosić użytkownika o pobranie aplikacji
Google Play. Jeśli użytkownik zaakceptuje zaproszenie, jego konto otrzyma licencję
(appLicensingVerdict == "LICENSED"
). Aplikacja zostanie dodana do konta Google użytkownika
Biblioteka Google Play i Google Play mogą dostarczać aktualizacje aplikacji w Twoim imieniu.
Przykładowy UX
CLOSE_UNKNOWN_ACCESS_RISK (kod typu 2)
Problem z oceną
Gdy environmentDetails.appAccessRiskVerdict.appsDetected
zawiera
"UNKNOWN_CAPTURING"
lub "UNKNOWN_CONTROLLING"
, oznacza to, że są nieznane
działające na urządzeniu aplikacje, które mogą rejestrować to, co widać na ekranie,
sterowanie urządzeniem.
Działania naprawcze
Możesz wyświetlić okno CLOSE_UNKNOWN_ACCESS_RISK
, aby poprosić użytkownika o zamknięcie
wszystkich nieznanych aplikacji, które mogą rejestrować to, co widać na ekranie, lub sterować urządzeniem.
Jeśli użytkownik kliknie przycisk Close all
, wszystkie takie aplikacje zostaną zamknięte.
Przykładowy UX
CLOSE_ALL_ACCESS_RISK (kod typu 3)
Problem z oceną
Gdy environmentDetails.appAccessRiskVerdict.appsDetected
zawiera dowolne z tych
"KNOWN_CAPTURING"
, "KNOWN_CONTROLLING"
,"UNKNOWN_CAPTURING"
lub
"UNKNOWN_CONTROLLING"
, co oznacza, że na urządzeniu są uruchomione aplikacje, które
może rejestrować to, co widać na ekranie,
lub sterować urządzeniem.
Działania naprawcze
Możesz wyświetlić okno CLOSE_ALL_ACCESS_RISK
, aby poprosić użytkownika o zamknięcie wszystkich
które mogą rejestrować to, co widać na ekranie, lub sterować urządzeniem.
Jeśli użytkownik kliknie przycisk Close all
, wszystkie takie aplikacje zostaną zamknięte na
urządzenia.
Przykładowy UX
Poproś o okno integralności
Gdy klient poprosi o token integralności, możesz użyć metody oferowanej w
interfejs StandardIntegrityToken (Standard API)
IntegrityTokenResponse (klasyczny interfejs API):
showDialog(Activity activity, int integrityDialogTypeCode)
.
Poniżej znajdziesz instrukcje, jak za pomocą interfejsu Play Integrity API wyświetlać Okno GET_LICENSED:
Poproś o token integralności z aplikacji i wyślij go na swój serwer. Możesz użyć żądania standardowego lub klasycznego.
Kotlin
// Request an integrity token val tokenResponse: StandardIntegrityToken = requestIntegrityToken() // Send token to app server and get response on what to do next val yourServerResponse: YourServerResponse = sendToServer(tokenResponse.token())
Java
// Request an integrity token StandardIntegrityToken tokenResponse = requestIntegrityToken(); // Send token to app server and get response on what to do next YourServerResponse yourServerResponse = sendToServer(tokenResponse.token());
Odszyfruj token integralności na serwerze i sprawdź, czy
appLicensingVerdict
. Może to wyglądać mniej więcej tak:// Licensing issue { ... accountDetails: { appLicensingVerdict: "UNLICENSED" } }
Jeśli token zawiera ciąg
appLicensingVerdict: "UNLICENSED"
, odpowiedz aplikacji. po wysłaniu żądania wyświetlonego okna licencjonowania:Kotlin
private fun getDialogTypeCode(integrityToken: String): Int{ // Get licensing verdict from decrypted and verified integritytoken val licensingVerdict: String = getLicensingVerdictFromDecryptedToken(integrityToken) return if (licensingVerdict == "UNLICENSED") { 1 // GET_LICENSED } else 0 }
Java
private int getDialogTypeCode(String integrityToken) { // Get licensing verdict from decrypted and verified integrityToken String licensingVerdict = getLicensingVerdictFromDecryptedToken(integrityToken); if (licensingVerdict.equals("UNLICENSED")) { return 1; // GET_LICENSED } return 0; }
W aplikacji zadzwoń pod numer
showDialog
i podaj kod pobrany z serwer:Kotlin
// Show dialog as indicated by the server val showDialogType: Int? = yourServerResponse.integrityDialogTypeCode() if (showDialogType != null) { // Call showDialog with type code, the dialog will be shown on top of the // provided activity and complete when the dialog is closed. val integrityDialogResponseCode: TaskI<nt >= tokenResponse.showDialog(activity, showDialogType) // Handle response code, call the Integrity API again to confirm that // verdicts have been resolved. }
Java
// Show dialog as indicated by the server @Nullable Integer showDialogType = yourServerResponse.integrityDialogTypeCode(); if (showDialogType != null) { // Call showDialog with type code, the dialog will be shown on top of the // provided activity and complete when the dialog is closed. TaskI<nteger >integrityDialogResponseCode = tokenResponse.showDialog(activity, showDialogType); // Handle response code, call the Integrity API again to confirm that // verdicts have been resolved. }
Okno jest wyświetlane nad podanym działaniem. Gdy użytkownik zamknął okno, zadanie zakończyło się wyświetleniem kodu odpowiedzi.
(Opcjonalnie) Aby wyświetlić dalsze okna, poproś o kolejny token. Jeśli masz standardowych żądań, musisz przygotować z dostawcą tokena, aby uzyskać nową ocenę.