Bütünlük kararları

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ü:
  • Cihaz yeterince güvenilir değildir.
  • Cihazda uygulamanızın Google tarafından tanınmayan bir sürümü yüklü Oyna.
  • Cihazdaki teknik sorunlar.

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ıtlar KNOWN_ ö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.

ziyaret edin.

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 mevcuttur.
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 ve NO_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 ve HIGH_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.