Bu sayfada, döndürülen bütünlüğün nasıl yorumlanacağı ve onunla nasıl çalışılacağı açıklanmaktadır karar verir. Standart veya klasik API isteğinde bulunmanız fark etmeksizin, bütünlük sonuç, benzer içerikle aynı biçimde döndürülür. Bütünlük cihazların, uygulamaların ve teslimatların geçerliliği hakkında bilgi iletir. hesaplar. Uygulamanızın sunucusu, sonuçta ortaya çıkan yükü şifresi çözülmüş, nasıl devam edeceğinizi belirlemek için, doğrulanmış isteği gönderin.
Döndürülen entegrasyon kararı biçimi
Yük düz metin JSON'dir ve JSON'de bütünlük sinyallerinin yanı sıra geliştirici tarafından sağlanan bilgiler.
Genel yük yapısı aşağıdaki gibidir:
{ requestDetails: { ... } appIntegrity: { ... } deviceIntegrity: { ... } accountDetails: { ... } environmentDetails: { ... } }
Öncelikle requestDetails
alanındaki değerlerin aşağıdakilerle eşleşip eşleşmediğini kontrol etmeniz gerekir
isteği geri yüklenir. Aşağıdakiler
bölümlerinde her alan daha ayrıntılı olarak açıklanmaktadır.
İstek ayrıntıları alanı
requestDetails
alanında istekle ilgili bilgiler yer alır. Örneğin:
ve standart istekler için requestHash
içinde geliştirici tarafından sağlanan bilgiler
klasik istekler için nonce
.
Standart API istekleri için:
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" }
Bu değerler, orijinal istekteki değerlerle eşleşmelidir. Bu nedenle,
JSON yükünün requestDetails
kadarını oluşturmak için
requestPackageName
ve requestHash
orijinal dokümanda gönderilenle eşleşiyor
aşağıdaki kod snippet'inde gösterildiği gibi:
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. ... }
Klasik API istekleri için:
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" }
Bu değerler, orijinal istekteki değerlerle eşleşmelidir. Bu nedenle,
JSON yükünün requestDetails
kadarını oluşturmak için
requestPackageName
ve nonce
orijinal istekte gönderilenle eşleşmelidir.
aşağıdaki kod snippet'inde gösterilmektedir:
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. ... }
Uygulama bütünlüğü alanı
appIntegrity
alanı, paketle ilgili bilgileri içerir.
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" }
appRecognitionVerdict
aşağıdaki değerleri alabilir:
PLAY_RECOGNIZED
- Uygulama ve sertifika, şu kuruluşun dağıttığı sürümlerle eşleşiyor: Google Play.
UNRECOGNIZED_VERSION
- Sertifika veya paket adı Google ile eşleşmiyor Play kayıtları.
UNEVALUATED
- Uygulama bütünlüğü değerlendirilmedi. Gerekli şartlar gözden kaçmış olabilir. Örneğin, cihaz yeterince güvenilir olmayabilir.
Jetonun, sizin tarafınızdan oluşturulan bir uygulama tarafından oluşturulduğundan emin olmak için aşağıdakileri doğrulayın: aşağıdaki kodda gösterildiği gibi, uygulama bütünlüğünün beklendiği gibi olduğunu doğrulayın 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! }
Uygulama paketi adını, uygulama sürümünü ve uygulama sertifikalarını da kontrol edebilirsiniz. manuel olarak ekleyin.
Cihaz bütünlüğü alanı
deviceIntegrity
alanı tek bir değer içerebilir.
deviceRecognitionVerdict
ile bir veya daha fazla etiket,
cihaz uygulama bütünlüğünü zorunlu kılabilir. Cihaz,
etiketler, deviceIntegrity
alanı boştur.
deviceIntegrity: { // "MEETS_DEVICE_INTEGRITY" is one of several possible values. deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"] }
Varsayılan olarak, deviceRecognitionVerdict
aşağıdakileri içerebilir:
MEETS_DEVICE_INTEGRITY
- Uygulama Android destekli bir cihazda çalışıyor. Google Play Hizmetleri. Cihaz, sistem bütünlüğü kontrollerini geçer ve Android uyumluluk gereksinimleri.
- Boş (boş değer)
- Uygulama, belirtileri olan bir cihazda çalışıyor saldırı (ör. API kancalama) veya sistemde güvenlik ihlali (rootlanma gibi) ya da Uygulama fiziksel bir cihazda (örneğin, Google Play bütünlük kontrollerini geçemez).
Jetonun güvenilir bir cihazdan geldiğinden emin olmak için
deviceRecognitionVerdict
, aşağıdaki kodda gösterildiği gibi beklendiği gibidir
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! }
Test cihazınızın toplantı cihaz bütünlüğüyle ilgili sorun yaşıyorsanız Fabrika ROM'nin yüklü olduğundan emin olun (örneğin, cihazı sıfırlayarak) ve bootloader'ın kilitli olduğundan emin olun. Ayrıca, Play Integrity API testleri de oluşturabilirsiniz inceleyebilirsiniz.
Koşullu cihaz etiketleri
Uygulamanız PC Üzerinde Google Play Games'de yayınlanıyorsa
deviceRecognitionVerdict
aşağıdaki etiketi de içerebilir:
MEETS_VIRTUAL_INTEGRITY
- Uygulama Android destekli bir emülatörde çalışıyor. Google Play Hizmetleri. Emülatör, sistem bütünlüğü kontrollerini geçer ve temel Android uyumluluk gereksinimleri.
İsteğe bağlı cihaz bilgileri
Ek e-posta almayı tercih ederseniz,
etiketleri kullanın,
deviceRecognitionVerdict
şu ek etiketleri içerebilir:
MEETS_BASIC_INTEGRITY
- Uygulama, temel geçişten geçen bir cihazda çalışıyor emin olmanız gerekir. Cihaz, Android uyumluluğunu karşılamıyor olabilir gereksinimleri ve Google Play Hizmetleri'ni çalıştırmak için onaylanmayabilir. Örneğin, cihaz tanınmayan bir Android sürümü çalıştırıyor olabilir. kilidi açılmış bir bootloader'a sahip veya hakkında bilgi edinebilirsiniz.
MEETS_STRONG_INTEGRITY
- Uygulama Android destekli bir cihazda çalışıyor. Google Play hizmetlerine ve önyükleme bütünlüğünü gösteren, donanım destekli bir kanıt sunar. Cihaz, e-posta sistemi geçişlerini Android uyumluluk koşullarını karşılamalıdır.
Tek bir cihaz, cihaz bütünlüğünde birden fazla cihaz etiketi döndürür karşılayıp karşılamadığını kontrol edebilir.
Son cihaz etkinliği
Ayrıca, son cihaz etkinliğini etkinleştirerek de size bu cihazlarda nasıl Uygulamanızın belirli bir cihazda bütünlük jetonu isteme sayısı son bir saat içinde Uygulamanızı şunlara karşı korumak için son cihaz etkinliğini kullanabilirsiniz: aktif bir saldırının göstergesi olabilecek beklenmedik, hiperaktif cihazlar. Son cihaz etkinliği düzeylerine ne kadar güveneceğinize uygulamanızın tipik bir cihazda yüklü olduğunu ve bütünlük jetonu kullanılmaktadır.
recentDeviceActivity
için deviceIntegrity
alanını almayı etkinleştirirseniz
iki değere sahip olacaktır:
deviceIntegrity: { deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"] recentDeviceActivity: { // "LEVEL_2" is one of several possible values. deviceActivityLevel: "LEVEL_2" } }
deviceActivityLevel
tanımları modlar arasında farklılık gösterir ve
aşağıdaki değerlerden biri:
Son cihaz etkinliği düzeyi | Bu cihazdaki standart API bütünlüğü jetonu istekleri her uygulama için son bir saat içinde | Bu cihazdaki klasik API bütünlük jetonu istekleri her uygulama için son bir saat içinde |
---|---|---|
LEVEL_1 (en düşük) |
10 veya daha az | 5 veya daha az |
LEVEL_2 |
11 ile 25 arasında | 6 ile 10 arasında |
LEVEL_3 |
26 ile 50 arasında | 11 ile 15 arasında |
LEVEL_4 (en yüksek) |
50'den fazla | 15'ten fazla |
UNEVALUATED |
Son cihaz etkinliği değerlendirilmedi. Süre tahminiyle ilgili olarak
çünkü:
|
Hesap ayrıntıları alanı
accountDetails
alanı, şunları içeren tek bir değer (appLicensingVerdict
) içerir:
lisansını alan kullanıcı hesabının Google Play lisanslama durumunu
cihazda oturum açtınız. Kullanıcı hesabı uygulamanın Play lisansına sahipse
Yani uygulamayı Google Play'den indirdiler veya satın aldılar.
accountDetails: { // This field can be LICENSED, UNLICENSED, or UNEVALUATED. appLicensingVerdict: "LICENSED" }
appLicensingVerdict
, şu değerlerden birine sahip olabilir:
LICENSED
- Kullanıcının uygulamadan yararlanma hakkı bulunmaktadır. Başka bir deyişle, kullanıcı veya Google Play'den satın almış olmanız gerekir.
UNLICENSED
- Kullanıcının uygulamadan yararlanma hakkı yoktur. Bu durum, Örneğin, kullanıcı uygulamanızı başka cihazdan yüklediğinde veya Google Play'den edinmediğinde. Bunu düzeltmek için kullanıcılara GET_LICENSED iletişim kutusunu gösterebilirsiniz.
UNEVALUATED
Lisans ayrıntıları değerlendirilmedi çünkü bu koşul karşılanmadı.
Bu durum aşağıdakiler dahil olmak üzere çeşitli nedenlerden kaynaklanabilir:
- Cihaz yeterince güvenilir değildir.
- Cihazda uygulamanızın Google tarafından tanınmayan bir sürümü yüklü Oyna.
- Kullanıcı, Google Play'de oturum açmamıştır.
Kullanıcının uygulamanızdan yararlanma hakkına sahip olduğunu kontrol etmek için
appLicensingVerdict
, aşağıdaki kod snippet'inde gösterildiği gibi beklendiği gibi:
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! }
Ortam ayrıntıları alanı
Ayrıca, ortamla ilgili ek sinyalleri de etkinleştirebilirsiniz. Uygulama erişimi Risk, uygulamanıza kullanılabilecek başka uygulamalar olup olmadığını bildirir. ekranı yakalayabilir, yer paylaşımlarını görebilir veya cihazı kontrol edebilirsiniz. Play Protect karar, cihazda Google Play Protect'in etkinleştirilip etkinleştirilmediğini ve bilinen kötü amaçlı yazılım buldu.
Uygulamaya Erişim Riski kararını veya Play Protect kararını etkinleştirdiyseniz
API yanıtınız şunu içerir:
environmentDetails
alanı boş bırakılamaz. environmentDetails
alanı iki içerebilir
değerleri, appAccessRiskVerdict
ve playProtectVerdict
.
Uygulamaya erişim riski kararı (beta)
Etkinleştirildikten sonra Play Integrity API'deki environmentDetails
alanı
yük şunu içerir:
yeni uygulama erişim riski kararı.
{
requestDetails: { ... }
appIntegrity: { ... }
deviceIntegrity: { ... }
accountDetails: { ... }
environmentDetails: {
appAccessRiskVerdict: {
// This field contains one or more responses, for example the following.
appsDetected: ["KNOWN_INSTALLED", "UNKNOWN_INSTALLED", "UNKNOWN_CAPTURING"]
}
}
}
Uygulama erişim riski değerlendirilmişse appAccessRiskVerdict
alanı içerir
Bir veya daha fazla yanıtla appsDetected
. Bu yanıtlar,
Algılanan uygulamaların yükleme kaynağına bağlı olarak aşağıdaki iki grubu görebilirsiniz:
Play veya sistem uygulamaları: Google Play tarafından yüklenen veya önceden yüklenmiş uygulamalar cihaz üreticisi tarafından (cihazın sistem bölümünde
FLAG_SYSTEM
) seçin. Bu tür uygulamalar için yanıtlarKNOWN_
ön ekini alır.Diğer uygulamalar: Google Play tarafından yüklenmeyen uygulamalar. Şunlar hariçtir: cihaz üreticisi tarafından sistem bölümüne önceden yüklenmiş uygulamalar. Yanıtlar bu tür uygulamalar
UNKNOWN_
ön ekini alır.
Aşağıdaki yanıtlar döndürülebilir:
KNOWN_INSTALLED
,UNKNOWN_INSTALLED
- İlgili yükleme kaynağıyla eşleşen yüklenmiş uygulamalar var.
KNOWN_CAPTURING
,UNKNOWN_CAPTURING
- Aşağıdakileri yapmak için kullanılabilecek izinlerin etkinleştirildiği, çalışan uygulamalar var: uygulamanız çalışırken ekrana bakın. Buna, doğrulanmış tüm siteler dahil değildir cihaz üzerinde çalışan Google Play tarafından bilinen erişilebilirlik hizmetleri.
KNOWN_CONTROLLING
,UNKNOWN_CONTROLLING
- Aşağıdakileri yapmak için kullanılabilecek izinlerin etkinleştirildiği, çalışan uygulamalar var: kontrol edebilir ve uygulamanıza gelen girişleri doğrudan kontrol edebilir. uygulamanızın giriş ve çıkışlarını yakalamak için kullanılır. Buna, doğrulanmış tüm siteler dahil değildir cihazda çalışan Google Play tarafından bilinen erişilebilirlik hizmetleri.
KNOWN_OVERLAYS
,UNKNOWN_OVERLAYS
- Aşağıdakileri yapmak için kullanılabilecek izinlerin etkinleştirildiği, çalışan uygulamalar var: yer paylaşımlı reklamlar elde edebilirsiniz. Buna doğrulanmış erişilebilirlik dahil değildir. ve cihazda çalışan Google Play tarafından bilinen hizmetler.
- EMPTY (boş değer)
Koşullardan biri karşılanmamışsa uygulamaya erişim riski değerlendirilmez. İçinde Bu durumda
appAccessRiskVerdict
alanı boş olur. Bu durum paydaşların aşağıdakiler dahil, çeşitli nedenler:- Cihaz yeterince güvenilir değildir.
- Cihazın form faktörü telefon, tablet veya katlanabilir cihaz olmamalıdır.
- Cihaz, Android 6 (API düzeyi 23) veya sonraki bir sürümü çalıştırmıyor.
- Cihazda uygulamanızın Google Play tarafından tanınmayan bir sürümü yüklüdür.
- Cihazdaki Google Play Store sürümü eski.
- Yalnızca oyunlar: Kullanıcı hesabının oyun için Play lisansı yok.
verdictOptOut
parametresiyle standart bir istek kullanıldı.- Play Integrity API kitaplığı sürümüyle standart bir istek kullanıldı standart istekler için uygulama erişim riskini henüz desteklemeyen uygulamalar.
Uygulamaya erişim riski, aşağıdaki özelliklere sahip doğrulanmış erişilebilirlik hizmetlerini otomatik olarak hariç tutar:
geliştirilmiş bir Google Play erişilebilirlik incelemesinden geçmiştir (
cihazdaki herhangi bir uygulama mağazasına erişim). "Hariç tutuldu" doğrulanmış erişilebilirliğin
başlatma, kontrol etme veya yakalamayı döndürmez.
uygulama erişim riski kararında yer paylaşımlı yanıtları içerir. Gelişmiş bir Google Hesabı isteğinde bulunmak için
Erişilebilirlik uygulamanız için Play erişilebilirlik incelemesi, Google'da yayınlayın
Uygulamanızda isAccessibilityTool
işaretinin doğru değerine ayarlandığından emin olun
uygulamanızın manifest dosyasına gönderin veya inceleme isteğinde bulunun.
Aşağıdaki tabloda bazı kararlara örnekler ve bunların ne anlama geldiği tablosunda olası her sonuç listelenmez):
Uygulama erişim riski kararıyla ilgili örnek yanıt | Yorumlama |
---|---|
appsDetected: ["KNOWN_INSTALLED"]
|
Yalnızca Google Play tarafından tanınan veya cihaz üreticisi tarafından sistem bölümüne önceden yüklenmiş uygulamalar vardır. Yakalama, kontrol etme veya yer paylaşımıyla ilgili kararların alınmasına neden olacak çalışan bir uygulama yok. |
appsDetected: ["KNOWN_INSTALLED", "UNKNOWN_INSTALLED", "UNKNOWN_CAPTURING"]
|
Google Play tarafından yüklenen veya cihaz üreticisi tarafından sistem bölümüne önceden yüklenmiş uygulamalar var. Çalışan ve diğer giriş ve çıkışları yakalamak için kullanılabilecek izinler etkinleştirilmiş başka uygulamalar da vardır. |
appsDetected: ["KNOWN_INSTALLED", "KNOWN_CAPTURING", "UNKNOWN_INSTALLED", "UNKNOWN_CONTROLLING"]
|
Ekranı görüntülemek veya diğer giriş ve çıkışları yakalamak için kullanılabilecek izinleri etkinleştirilmiş Play uygulaması veya sistem çalışıyor. Cihazı kontrol etmek ve uygulamanıza yapılan girişleri doğrudan kontrol etmek için kullanılabilecek, izinleri etkinleştirilmiş, çalışan başka uygulamalar da vardır. |
appAccessRiskVerdict: {}
|
Koşullardan biri karşılanmadığı için uygulamaya erişim riski değerlendirilmedi. Örneğin, cihaz yeterince güvenilir değildir. |
Risk düzeyinize bağlı olarak hangi karar kombinasyonunun kullanılacağına karar verebilirsiniz. ve hangi kararlar hakkında işlem yapmak istediğinizi de belirtmelisiniz. İlgili içeriği oluşturmak için kullanılan aşağıdaki kod snippet'i, herhangi bir doğrulama işlemi yapılmadığını ekranı yakalayabilecek veya uygulamanızı kontrol edebilecek çalışan uygulamalar:
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! } }
Uygulama erişim riski kararlarını düzeltme
Risk düzeyinize bağlı olarak, uygulama erişim riskiyle ilgili vereceğiniz kararlara karar verebilirsiniz kullanıcının bir isteği veya işlemi tamamlamadan önce işlem yapması gerekiyorsa Sonrasında, kullanıcıya gösterebileceğiniz isteğe bağlı Google Play istemleri vardır. uygulamaya erişim riski kararını kontrol etme. Örneğin, CLOSE_UNKNOWN_ACCESS_RISK kullanarak kullanıcıdan uygulama erişim riski kararını verebilir veya CLOSE_ALL_ACCESS_RISK parametresini göstererek kullanıcının tüm uygulamaları (bilinen ve bilinmeyen) kapatmasına neden olarak uygulama erişim riski kararına neden olabilir.
Play Protect kararı
Etkinleştirildikten sonra Play Integrity API'deki environmentDetails
alanı
yük şunu içerir:
Play Protect kararı:
environmentDetails: {
playProtectVerdict: "NO_ISSUES"
}
playProtectVerdict
, şu değerlerden birine sahip olabilir:
NO_ISSUES
- Play Protect etkinleştirilmiştir ve cihazda uygulama ile ilgili herhangi bir sorun tespit edilmemiştir.
NO_DATA
- Play Protect etkindir ancak henüz tarama yapılmamış. Cihaz veya Play Store uygulaması kısa süre önce sıfırlanmış olabilir.
POSSIBLE_RISK
- Play Protect devre dışı.
MEDIUM_RISK
- Play Protect açıldı ve zararlı olabilecek uygulamaların yüklü olduğunu tespit etti. ekleyebilirsiniz.
HIGH_RISK
- Play Protect açıldı ve şurada tehlikeli uygulamaların yüklü olduğunu tespit etti:
UNEVALUATED
Play Protect kararı değerlendirilmedi.
Bu durum aşağıdakiler dahil olmak üzere çeşitli nedenlerden kaynaklanabilir:
- Cihaz yeterince güvenilir değildir.
- Yalnızca oyunlar: Kullanıcı hesabının oyun için Play lisansı yok.
Play Protect kararını kullanmayla ilgili rehberlik
Uygulamanızın arka uç sunucusu, buna dahildir. Aşağıda bazı öneriler ve olası kullanıcı işlemleri verilmiştir:
NO_ISSUES
- Play Protect açık ve herhangi bir sorun tespit etmediğinden kullanıcının işlem yapması gerekmez.
POSSIBLE_RISK
veNO_DATA
- Bu kararları alırken kullanıcıdan Play Protect'in açık olup olmadığını kontrol etmesini isteyin
ve bir tarama gerçekleştirdi.
NO_DATA
yalnızca nadir durumlarda kullanılmalıdır. MEDIUM_RISK
veHIGH_RISK
- Risk toleransınıza bağlı olarak kullanıcıdan Play'i başlatmasını isteyebilirsiniz. Play Protect uyarılarından korunma ve bunlarla ilgili işlem yapma. Kullanıcı fufill' yapamıyorsa bu gereksinimleri sunucu işleminde engelleyebilirsiniz.