Na tej stronie dowiesz się, jak interpretować zwróconą integralność i pracować z nimi wyroku. Niezależnie od tego, czy wysyłasz żądanie do interfejsu standardowego czy klasycznego, wynik jest zwracany w tym samym formacie z podobną treścią. Integralność informuje o prawidłowości urządzeń, aplikacji kont. Serwer aplikacji może użyć wynikowego ładunku w odszyfrowanej, zweryfikowanej oceny w celu określenia najlepszego sposobu postępowania w przypadku konkretnego działania, w aplikacji.
Zwrócony format oceny integralności
Ładunek jest zwykłym tekstem JSON i zawiera sygnały integralności podanymi przez dewelopera.
Ogólna struktura ładunku wygląda tak:
{ requestDetails: { ... } appIntegrity: { ... } deviceIntegrity: { ... } accountDetails: { ... } environmentDetails: { ... } }
Najpierw sprawdź, czy wartości w polu requestDetails
są zgodne z tymi
pierwotnego żądania przed sprawdzeniem każdego wyniku integralności. Poniżej
opisują poszczególne pola.
Pole szczegółów prośby
Pole requestDetails
zawiera informacje o żądaniu, w tym
podane przez dewelopera w: requestHash
dotyczące standardowych żądań oraz
nonce
dla żądań klasycznych.
W przypadku standardowych żądań do interfejsu API:
requestDetails: { // Application package name this attestation was requested for. // Note that this field might be spoofed in the middle of the request. requestPackageName: "com.package.name" // Request hash provided by the developer. requestHash: "aGVsbG8gd29scmQgdGhlcmU" // The timestamp in milliseconds when the integrity token // was requested. timestampMillis: "1675655009345" }
Wartości te powinny być zgodne z wartościami w pierwotnym żądaniu. Dlatego sprawdź
requestDetails
ładunku JSON, upewniając się, że para klucz-wartość
requestPackageName
i requestHash
są zgodne z tym, co wysłano w oryginale.
zgodnie z poniższym fragmentem kodu:
Kotlin
val requestDetails = JSONObject(payload).getJSONObject("requestDetails") val requestPackageName = requestDetails.getString("requestPackageName") val requestHash = requestDetails.getString("requestHash") val timestampMillis = requestDetails.getLong("timestampMillis") val currentTimestampMillis = ... // Ensure the token is from your app. if (!requestPackageName.equals(expectedPackageName) // Ensure the token is for this specific request || !requestHash.equals(expectedRequestHash) // Ensure the freshness of the token. || currentTimestampMillis - timestampMillis > ALLOWED_WINDOW_MILLIS) { // The token is invalid! See below for further checks. ... }
Java
RequestDetails requestDetails = decodeIntegrityTokenResponse .getTokenPayloadExternal() .getRequestDetails(); String requestPackageName = requestDetails.getRequestPackageName(); String requestHash = requestDetails.getRequestHash(); long timestampMillis = requestDetails.getTimestampMillis(); long currentTimestampMillis = ...; // Ensure the token is from your app. if (!requestPackageName.equals(expectedPackageName) // Ensure the token is for this specific request. || !requestHash.equals(expectedRequestHash) // Ensure the freshness of the token. || currentTimestampMillis - timestampMillis > ALLOWED_WINDOW_MILLIS) { // The token is invalid! See below for further checks. ... }
W przypadku klasycznych żądań do interfejsu API:
requestDetails: { // Application package name this attestation was requested for. // Note that this field might be spoofed in the middle of the // request. requestPackageName: "com.package.name" // base64-encoded URL-safe no-wrap nonce provided by the developer. nonce: "aGVsbG8gd29scmQgdGhlcmU" // The timestamp in milliseconds when the request was made // (computed on the server). timestampMillis: "1617893780" }
Wartości te powinny być zgodne z wartościami w pierwotnym żądaniu. Dlatego sprawdź
requestDetails
ładunku JSON, upewniając się, że para klucz-wartość
requestPackageName
i nonce
są zgodne z treścią przesłaną w pierwotnym żądaniu, na przykład
w tym fragmencie kodu:
Kotlin
val requestDetails = JSONObject(payload).getJSONObject("requestDetails") val requestPackageName = requestDetails.getString("requestPackageName") val nonce = requestDetails.getString("nonce") val timestampMillis = requestDetails.getLong("timestampMillis") val currentTimestampMillis = ... // Ensure the token is from your app. if (!requestPackageName.equals(expectedPackageName) // Ensure the token is for this specific request. See 'Generate a nonce' // section of the doc on how to store/compute the expected nonce. || !nonce.equals(expectedNonce) // Ensure the freshness of the token. || currentTimestampMillis - timestampMillis > ALLOWED_WINDOW_MILLIS) { // The token is invalid! See below for further checks. ... }
Java
JSONObject requestDetails = new JSONObject(payload).getJSONObject("requestDetails"); String requestPackageName = requestDetails.getString("requestPackageName"); String nonce = requestDetails.getString("nonce"); long timestampMillis = requestDetails.getLong("timestampMillis"); long currentTimestampMillis = ...; // Ensure the token is from your app. if (!requestPackageName.equals(expectedPackageName) // Ensure the token is for this specific request. See 'Generate a nonce' // section of the doc on how to store/compute the expected nonce. || !nonce.equals(expectedNonce) // Ensure the freshness of the token. || currentTimestampMillis - timestampMillis > ALLOWED_WINDOW_MILLIS) { // The token is invalid! See below for further checks. ... }
Pole integralności aplikacji
Pole appIntegrity
zawiera informacje o pakiecie.
appIntegrity: { // PLAY_RECOGNIZED, UNRECOGNIZED_VERSION, or UNEVALUATED. appRecognitionVerdict: "PLAY_RECOGNIZED" // The package name of the app. // This field is populated iff appRecognitionVerdict != UNEVALUATED. packageName: "com.package.name" // The sha256 digest of app certificates (base64-encoded URL-safe). // This field is populated iff appRecognitionVerdict != UNEVALUATED. certificateSha256Digest: ["6a6a1474b5cbbb2b1aa57e0bc3"] // The version of the app. // This field is populated iff appRecognitionVerdict != UNEVALUATED. versionCode: "42" }
Pole appRecognitionVerdict
może mieć następujące wartości:
PLAY_RECOGNIZED
- Aplikacja i certyfikat odpowiadają wersjom rozpowszechnianym przez Google Play.
UNRECOGNIZED_VERSION
- Nazwa certyfikatu lub pakietu nie zgadza się z nazwą Google Rekordy Play.
UNEVALUATED
- Integralność aplikacji nie została oceniona. Konieczny wymóg na przykład gdy urządzenie nie było wystarczająco zaufane.
Aby mieć pewność, że token został wygenerowany przez utworzoną przez Ciebie aplikację, zweryfikuj że integralność aplikacji jest zgodna z oczekiwaniami, jak pokazano w tym kodzie snippet:
Kotlin
val appIntegrity = JSONObject(payload).getJSONObject("appIntegrity") val appRecognitionVerdict = appIntegrity.getString("appRecognitionVerdict") if (appRecognitionVerdict == "PLAY_RECOGNIZED") { // Looks good! }
Java
JSONObject appIntegrity = new JSONObject(payload).getJSONObject("appIntegrity"); String appRecognitionVerdict = appIntegrity.getString("appRecognitionVerdict"); if (appRecognitionVerdict.equals("PLAY_RECOGNIZED")) { // Looks good! }
Możesz też sprawdzić nazwę pakietu aplikacji, wersję aplikacji i certyfikaty aplikacji ręcznie.
Pole integralności urządzenia
Pole deviceIntegrity
może zawierać jedną wartość,
deviceRecognitionVerdict
, która ma co najmniej jedną etykietę reprezentującą skuteczność
aby wymusić integralność aplikacji. Jeśli urządzenie nie spełnia kryteriów żadnej
etykiety, pole deviceIntegrity
jest puste.
deviceIntegrity: { // "MEETS_DEVICE_INTEGRITY" is one of several possible values. deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"] }
Domyślnie pole deviceRecognitionVerdict
może zawierać:
MEETS_DEVICE_INTEGRITY
- Ta aplikacja działa na urządzeniu z Androidem i ma: Usługi Google Play. Urządzenie przeszło testy integralności systemu i jest zgodne wymagania dotyczące zgodności z Androidem.
- Pusta (pusta wartość)
- Aplikacja działa na urządzeniu, na którym występują objawy atak (np. podłączenie interfejsu API) lub przejęcie systemu (np. uzyskanie dostępu do roota) lub aplikacja nie jest uruchomiona na urządzeniu fizycznym (np. w emulatorze, który nie przeszły testów integralności w Google Play).
Aby mieć pewność, że token pochodzi z wiarygodnego urządzenia, zweryfikuj
Pole deviceRecognitionVerdict
jest zgodne z oczekiwaniami, jak widać w tym kodzie
snippet:
Kotlin
val deviceIntegrity = JSONObject(payload).getJSONObject("deviceIntegrity") val deviceRecognitionVerdict = if (deviceIntegrity.has("deviceRecognitionVerdict")) { deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString() } else { "" } if (deviceRecognitionVerdict.contains("MEETS_DEVICE_INTEGRITY")) { // Looks good! }
Java
JSONObject deviceIntegrity = new JSONObject(payload).getJSONObject("deviceIntegrity"); String deviceRecognitionVerdict = deviceIntegrity.has("deviceRecognitionVerdict") ? deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString() : ""; if (deviceRecognitionVerdict.contains("MEETS_DEVICE_INTEGRITY")) { // Looks good! }
W przypadku problemów z integralnością urządzenia testowego do spotkań upewnij się, że fabryczna pamięć ROM jest zainstalowana (na przykład przez zresetowanie urządzenia). oraz że program rozruchowy jest zablokowany. Możesz też tworzyć testy interfejsu Play Integrity API. w Konsoli Play.
Warunkowe etykiety urządzeń
Jeśli Twoja aplikacja jest publikowana w Grach Google Play na PC,
deviceRecognitionVerdict
może też zawierać tę etykietę:
MEETS_VIRTUAL_INTEGRITY
- Aplikacja działa w emulatorze z Androidem z Usługi Google Play. Emulator przeszedł testy integralności systemu i spełnia wymagania podstawowych wymagań dotyczących zgodności z Androidem.
Opcjonalne informacje o urządzeniu
Jeśli zgodzisz się na otrzymywanie dodatkowych
etykiety w ocenie integralności,
deviceRecognitionVerdict
może zawierać te dodatkowe etykiety:
MEETS_BASIC_INTEGRITY
- Aplikacja działa na urządzeniu, które spełnia wymagania podstawowe i testów integralności systemu. Urządzenie może nie być zgodne z Androidem wymagania i mogą nie zostać zatwierdzone do uruchamiania Usług Google Play. Dla: na przykład na urządzeniu może działać nierozpoznana wersja Androida, mają odblokowany program rozruchowy lub nie mają certyfikatu producenta urządzenia.
MEETS_STRONG_INTEGRITY
- Ta aplikacja działa na urządzeniu z Androidem i ma: Usługom Google Play i obejmują silną gwarancję integralności systemu, np.: wspierany sprzętowo dowód integralności rozruchu. Urządzenie przekazuje system przeprowadza testy integralności i jest zgodny z Androidem.
Jedno urządzenie zwraca wiele etykiet w ramach integralności określa, czy spełnione są wszystkie kryteria etykiety.
Ostatnia aktywność na urządzeniach
Możesz też włączyć wyświetlanie ostatniej aktywności na urządzeniu, by dowiedzieć się, jak aplikacja wiele razy prosiła o token integralności na konkretnym urządzeniu. z ostatniej godziny. Dzięki ostatniej aktywności na urządzeniu możesz chronić swoją aplikację przed urządzenia, których nie rozpoznajesz, i które z nich mogą wskazywać na aktywny atak. Możesz określić, jak zaufanym użytkownikom ostatni poziom aktywności na urządzeniu, na podstawie tego, oczekuje, że aplikacja zostanie zainstalowana na typowym urządzeniu. token integralności co godzinę.
Jeśli wyrazisz zgodę na otrzymywanie recentDeviceActivity
pola deviceIntegrity
,
ma 2 wartości:
deviceIntegrity: { deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"] recentDeviceActivity: { // "LEVEL_2" is one of several possible values. deviceActivityLevel: "LEVEL_2" } }
Definicje funkcji deviceActivityLevel
różnią się w zależności od trybów i mogą mieć
jedną z tych wartości:
Poziom ostatniej aktywności na urządzeniu | Standardowe żądania tokena integralności interfejsu API wysyłane na to urządzenie w ciągu ostatniej godziny na aplikację | Żądania tokena integralności klasycznej wersji interfejsu API wysyłane na to urządzenie w ciągu ostatniej godziny na aplikację |
---|---|---|
LEVEL_1 (najniższa) |
10 lub mniej | 5 lub mniej |
LEVEL_2 |
Od 11 do 25 | Od 6 do 10 |
LEVEL_3 |
Od 26 do 50 | Od 11 do 15 |
LEVEL_4 (najwyższa) |
Ponad 50 | Ponad 15 |
UNEVALUATED |
Nie oceniono ostatniej aktywności na urządzeniu. Może się tak zdarzyć
ponieważ:
|
Pole szczegółów konta
Pole accountDetails
zawiera jedną wartość, appLicensingVerdict
, która
reprezentuje stan licencji na aplikację w Google Play dla konta użytkownika,
zalogowany na urządzeniu. Jeśli konto użytkownika ma licencję Google Play na aplikację,
co oznacza, że pobrali ją lub kupili w Google Play.
accountDetails: { // This field can be LICENSED, UNLICENSED, or UNEVALUATED. appLicensingVerdict: "LICENSED" }
Pole appLicensingVerdict
może mieć jedną z tych wartości:
LICENSED
- Użytkownik ma uprawnienia do korzystania z aplikacji. Innymi słowy, użytkownik zainstalował lub kupią aplikację w Google Play.
UNLICENSED
- Użytkownik nie ma uprawnień do korzystania z aplikacji. Dzieje się tak, gdy w przypadku na przykład zainstaluje ją z innego źródła lub nie pozyska jej z Google Play. Aby temu zapobiec, możesz wyświetlić użytkownikom okno GET_LICENSED.
UNEVALUATED
Szczegóły dotyczące licencji nie zostały ocenione, ponieważ wymagania nie zostały spełnione.
Może się tak zdarzyć z kilku powodów. Oto niektóre z nich:
- Urządzenie nie jest wystarczająco zaufane.
- Google nie rozpoznaje wersji Twojej aplikacji zainstalowanej na urządzeniu Graj.
- Użytkownik nie jest zalogowany w Google Play.
Aby sprawdzić, czy użytkownik ma uprawnienia do korzystania z Twojej aplikacji, sprawdź, czy atrybut
appLicensingVerdict
działa zgodnie z oczekiwaniami, jak widać w tym fragmencie kodu:
Kotlin
val accountDetails = JSONObject(payload).getJSONObject("accountDetails") val appLicensingVerdict = accountDetails.getString("appLicensingVerdict") if (appLicensingVerdict == "LICENSED") { // Looks good! }
Java
JSONObject accountDetails = new JSONObject(payload).getJSONObject("accountDetails"); String appLicensingVerdict = accountDetails.getString("appLicensingVerdict"); if (appLicensingVerdict.equals("LICENSED")) { // Looks good! }
Pole szczegółów środowiska
Możesz też włączyć dodatkowe sygnały dotyczące środowiska. Dostęp do aplikacji informuje aplikację, czy są uruchomione inne aplikacje, których można użyć do zrobić zrzut ekranu, wyświetlać nakładki czy sterować urządzeniem. Play Protect informuje, czy na urządzeniu jest włączona usługa Google Play Protect wykrył znane złośliwe oprogramowanie.
Jeśli wyrazisz zgodę na ocenę ryzyka dostępu aplikacji lub Play Protect
w Konsoli Google Play, odpowiedź interfejsu API będzie zawierać parametr
environmentDetails
. Pole environmentDetails
może zawierać dwa
wartości appAccessRiskVerdict
i playProtectVerdict
.
Ocena ryzyka dostępu do aplikacji (beta)
Po włączeniu pojawi się pole environmentDetails
w interfejsie Play Integrity API.
ładunek będzie zawierać
nową ocenę ryzyka
dostępu do aplikacji.
{
requestDetails: { ... }
appIntegrity: { ... }
deviceIntegrity: { ... }
accountDetails: { ... }
environmentDetails: {
appAccessRiskVerdict: {
// This field contains one or more responses, for example the following.
appsDetected: ["KNOWN_INSTALLED", "UNKNOWN_INSTALLED", "UNKNOWN_CAPTURING"]
}
}
}
Jeśli oceniono ryzyko związane z dostępem do aplikacji, appAccessRiskVerdict
zawiera pole
appsDetected
z co najmniej 1 odpowiedzią. Odpowiedzi te trafiają do jednej z tych kategorii:
te 2 grupy w zależności od źródła instalacji wykrytych aplikacji:
Aplikacje systemowe lub aplikacje systemowe: aplikacje zainstalowane z Google Play lub wstępnie wczytane przez producenta urządzenia na partycji systemowej urządzenia (określaną parametrem
FLAG_SYSTEM
). Odpowiedzi w takich aplikacjach są poprzedzone prefiksemKNOWN_
.Inne aplikacje: aplikacje, które nie zostały zainstalowane przez Google Play. Nie uwzględnia aplikacje wstępnie wczytane na partycję systemową przez producenta urządzenia. Odpowiedzi dla takich aplikacji jest poprzedzony prefiksem
UNKNOWN_
.
Mogą zostać zwrócone te odpowiedzi:
KNOWN_INSTALLED
,UNKNOWN_INSTALLED
- Masz zainstalowane aplikacje, które pasują do odpowiedniego źródła instalacji.
KNOWN_CAPTURING
,UNKNOWN_CAPTURING
- Masz uruchomione aplikacje z włączonymi uprawnieniami, których można użyć do: by widzieć ekran, gdy aplikacja jest uruchomiona. Nie obejmuje to wszystkich zweryfikowanych usług ułatwień dostępu znanych Google Play uruchomionym na urządzeniu.
KNOWN_CONTROLLING
,UNKNOWN_CONTROLLING
- Masz uruchomione aplikacje z włączonymi uprawnieniami, których można użyć do: sterować urządzeniem i bezpośrednio kontrolować wejścia do aplikacji. Mogą być służy do przechwytywania danych wejściowych i wyjściowych aplikacji. Nie obejmuje to wszystkich zweryfikowanych usług ułatwień dostępu znanych Google Play uruchomionym na urządzeniu.
KNOWN_OVERLAYS
,UNKNOWN_OVERLAYS
- Masz uruchomione aplikacje z włączonymi uprawnieniami, których można użyć do: wyświetlanie nakładek w aplikacji. Nie obejmuje to zweryfikowanych ułatwień dostępu znane usługi Google Play działające na urządzeniu.
- EMPTY (pusta wartość)
Ryzyko związane z dostępem do aplikacji nie jest oceniane, jeśli pominięto niezbędny wymóg. W w tym przypadku pole
appAccessRiskVerdict
jest puste. Może to dotyczyć: z kilku powodów, w tym:- Urządzenie nie jest wystarczająco zaufane.
- Nie jest to telefon, tablet ani urządzenie składane.
- Na urządzeniu nie jest zainstalowany Android 6 (poziom interfejsu API 23) lub nowszy.
- Google Play nie rozpoznaje wersji aplikacji zainstalowanej na urządzeniu.
- Wersja Sklepu Google Play na urządzeniu jest nieaktualna.
- Tylko gry: konto użytkownika nie ma licencji Google Play na daną grę.
- Zostało użyte żądanie standardowe z parametrem
verdictOptOut
. - Użyto standardowego żądania z wersją biblioteki Play Integrity API. , który nie obsługuje jeszcze ryzyka dostępu do aplikacji w przypadku żądań standardowych.
Ryzyko dostępu do aplikacji automatycznie wyklucza zweryfikowane usługi ułatwień dostępu, które
zostały sprawdzone pod kątem ułatwień dostępu w Google Play (zainstalowane przez
w dowolnym sklepie z aplikacjami na urządzeniu). „Wykluczono” oznacza, że zweryfikowane ułatwienia dostępu
działające na urządzeniu nie zwracają przechwytywania, sterowania
nakłada odpowiedź w ocenie ryzyka dotyczącego dostępu do aplikacji. Aby poprosić o
Odtwórz opinię o ułatwieniach dostępu w swojej aplikacji ułatwień dostępu i opublikuj ją w Google
Sprawdź, czy flaga isAccessibilityTool
Twojej aplikacji ma wartość Prawda w
pliku manifestu aplikacji lub poproś o jej sprawdzenie.
W tabeli poniżej znajdziesz kilka przykładów ocen i ich znaczenia (ten tabela nie zawiera wszystkich możliwych wyników):
Przykładowa odpowiedź na ocenę ryzyka dostępu do aplikacji | Interpretacja |
---|---|
appsDetected: ["KNOWN_INSTALLED"]
|
Masz zainstalowane tylko te aplikacje, które zostały rozpoznane przez Google Play lub wstępnie załadowane przez producenta na partycji systemowej. Nie ma uruchomionych aplikacji, które mogłyby przechwytywać, kontrolować lub nakładać oceny. |
appsDetected: ["KNOWN_INSTALLED", "UNKNOWN_INSTALLED", "UNKNOWN_CAPTURING"]
|
Masz aplikacje zainstalowane z Google Play lub wstępnie wczytane na partycji systemowej przez producenta urządzenia. Są też inne aplikacje i mają włączone uprawnienia, które umożliwiają wyświetlanie ekranu lub przechwytywanie innych danych wejściowych i wyjściowych. |
appsDetected: ["KNOWN_INSTALLED", "KNOWN_CAPTURING", "UNKNOWN_INSTALLED", "UNKNOWN_CONTROLLING"]
|
Na urządzeniu z Google Play lub uruchomionym systemem są włączone uprawnienia, których można użyć do wyświetlania ekranu lub przechwytywania innych danych wejściowych i wyjściowych. Dostępne są też inne aplikacje z włączonymi uprawnieniami, które umożliwiają sterowanie urządzeniem i bezpośrednie sterowanie danymi wejściowymi do aplikacji. |
appAccessRiskVerdict: {}
|
Ryzyko związane z dostępem do aplikacji nie jest oceniane, ponieważ pominięto niezbędny wymóg. Na przykład urządzenie nie było wystarczająco zaufane. |
W zależności od poziomu ryzyka możesz wybrać kombinację ocen co można uznać za akceptowalne i jakie werdykty chcesz podjąć. Poniższy fragment kodu ilustruje przykład sprawdzania, czy nie ma uruchomionych aplikacji, które mogą przechwytywać ekran lub sterować aplikacją:
Kotlin
val environmentDetails = JSONObject(payload).getJSONObject("environmentDetails") val appAccessRiskVerdict = environmentDetails.getJSONObject("appAccessRiskVerdict") if (appAccessRiskVerdict.has("appsDetected")) { val appsDetected = appAccessRiskVerdict.getJSONArray("appsDetected").toString() if (!appsDetected.contains("CAPTURING") && !appsDetected.contains("CONTROLLING")) { // Looks good! } }
Java
JSONObject environmentDetails = new JSONObject(payload).getJSONObject("environmentDetails"); JSONObject appAccessRiskVerdict = environmentDetails.getJSONObject("appAccessRiskVerdict"); if (appAccessRiskVerdict.has("appsDetected")) { String appsDetected = appAccessRiskVerdict.getJSONArray("appsDetected").toString() if (!appsDetected.contains("CAPTURING") && !appsDetected.contains("CONTROLLING")) { // Looks good! } }
Eliminowanie ocen ryzyka dostępu do aplikacji
W zależności od poziomu ryzyka możesz określić oceny ryzyka dotyczącego dostępu do aplikacji w jaki sposób użytkownik chce podjąć działanie, zanim pozwoli mu to zrobić. Dostępne są opcjonalne prompty z Google Play, które możesz wyświetlać użytkownikowi sprawdzając ocenę ryzyka dostępu do aplikacji. Możesz wyświetlać CLOSE_UNKNOWN_ACCESS_RISK, aby poprosić użytkownika o zamknięcie nieznanych aplikacji powodujących ocenę ryzyka związanego z dostępem do aplikacji lub pokaż CLOSE_ALL_ACCESS_RISK, aby poprosić o zamknięcia wszystkich aplikacji (znane i nieznane) skutkujące oceną ryzyka dostępu do aplikacji.
Ocena Play Protect
Po włączeniu pojawi się pole environmentDetails
w interfejsie Play Integrity API.
ładunek będzie zawierać
wynik Play Protect:
environmentDetails: {
playProtectVerdict: "NO_ISSUES"
}
Pole playProtectVerdict
może mieć jedną z tych wartości:
NO_ISSUES
- Usługa Play Protect jest włączona, ale nie znaleziono na urządzeniu żadnych problemów z aplikacją.
NO_DATA
- Usługa Play Protect jest włączona, ale nie przeprowadzono jeszcze skanowania. Urządzenie lub aplikacja Sklep Play mogła zostać niedawno zresetowana.
POSSIBLE_RISK
- Usługa Play Protect jest wyłączona.
MEDIUM_RISK
- Usługa Play Protect jest włączona i znajduje zainstalowane potencjalnie szkodliwe aplikacje na urządzeniu.
HIGH_RISK
- Usługa Play Protect została włączona i wykryła niebezpieczne aplikacje zainstalowane na urządzenia.
UNEVALUATED
Ocena Play Protect nie została sprawdzona.
Może się tak zdarzyć z kilku powodów. Oto niektóre z nich:
- Urządzenie nie jest wystarczająco zaufane.
- Tylko gry: konto użytkownika nie ma licencji Google Play na daną grę.
Wskazówki dotyczące korzystania z oceny Play Protect
Serwer backendu aplikacji może podjąć działanie na podstawie oceny tolerancji ryzyka. Oto kilka sugestii i możliwych działań użytkownika:
NO_ISSUES
- Usługa Play Protect jest włączona i nie wykryto żadnych problemów, więc nie jest wymagane żadne działanie ze strony użytkownika.
POSSIBLE_RISK
iNO_DATA
- Gdy otrzymasz te oceny, poproś użytkownika, aby sprawdził, czy funkcja Play Protect jest włączona
i przeprowadził skanowanie.
NO_DATA
powinna występować tylko w rzadkich przypadkach. MEDIUM_RISK
iHIGH_RISK
- W zależności od tolerancji ryzyka możesz poprosić użytkownika o uruchomienie Google Play. Ochrona ostrzeżeń Play Protect i reagowanie na nie. Jeśli użytkownik nie może wypełnić kodu te wymagania mogą uniemożliwić wykonywanie działań serwera.