इंटेग्रिटी के नतीजे

इस पेज पर, वापस मिलने वाली इंटिग्रिटी की जानकारी देने और उसके साथ काम करने के तरीके के बारे में बताया गया है नतीजा. चाहे आप स्टैंडर्ड एपीआई अनुरोध करें या क्लासिक एपीआई, नतीजे को मिलते-जुलते कॉन्टेंट वाले फ़ॉर्मैट में दिखाया जाता है. रखरखाव करना नतीजे डिवाइसों, ऐप्लिकेशन, और खाते. आपके ऐप्लिकेशन का सर्वर, डिक्रिप्ट किए गए पेलोड का इस्तेमाल, डिक्रिप्ट किए गए की पुष्टि हो चुकी है, जिससे यह तय किया जा सकेगा कि किसी कार्रवाई को कैसे पूरा करना है या अनुरोध भेज सकते हैं.

पूरी सुरक्षा की जांच के नतीजे का फ़ॉर्मैट दिखाया गया

पेलोड, सामान्य टेक्स्ट वाला JSON है. इसमें इंटिग्रिटी सिग्नल के साथ-साथ, इंटिग्रिटी सिग्नल भी मौजूद होते हैं डेवलपर से मिली जानकारी.

पेलोड का सामान्य स्ट्रक्चर इस तरह है:

{
  requestDetails: { ... }
  appIntegrity: { ... }
  deviceIntegrity: { ... }
  accountDetails: { ... }
  environmentDetails: { ... }
}

आपको पहले यह जांच करनी होगी कि requestDetails फ़ील्ड के मान उनसे मेल खाते हैं में पूरी जानकारी दिखेगी. नीचे दिए गए सेक्शन में, हर फ़ील्ड के बारे में ज़्यादा जानकारी दी गई है.

अनुरोध की जानकारी वाला फ़ील्ड

requestDetails फ़ील्ड में अनुरोध के बारे में जानकारी होती है. इसमें यह जानकारी भी शामिल होती है स्टैंडर्ड अनुरोधों के लिए, requestHash में डेवलपर की ओर से दी गई जानकारी और क्लासिक अनुरोधों के लिए nonce.

स्टैंडर्ड एपीआई अनुरोधों के लिए:

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"
}

ये वैल्यू, मूल अनुरोध की वैल्यू से मेल खानी चाहिए. इसलिए, JSON पेलोड का requestDetails हिस्सा है. इसके लिए, यह पक्का करें कि requestPackageName और requestHash, मूल दस्तावेज़ में भेजी गई जानकारी से मेल खाते हैं का अनुरोध करें, जैसा कि नीचे दिए गए कोड स्निपेट में दिखाया गया है:

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.
        ...
}

क्लासिक एपीआई अनुरोधों के लिए:

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"
}

ये वैल्यू, मूल अनुरोध की वैल्यू से मेल खानी चाहिए. इसलिए, JSON पेलोड का requestDetails हिस्सा है. इसके लिए, यह पक्का करें कि requestPackageName और nonce मूल अनुरोध में भेजी गई जानकारी से मेल खाते हैं. जैसे: निम्न कोड स्निपेट में दिखाया गया है:

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.
        ...
}

ऐप्लिकेशन इंटिग्रिटी फ़ील्ड

appIntegrity फ़ील्ड में पैकेज से जुड़ी जानकारी होती है.

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 की ये वैल्यू हो सकती हैं:

PLAY_RECOGNIZED
ऐप्लिकेशन और सर्टिफ़िकेट, उन वर्शन से मेल खाते हैं जिन्हें इन देशों में उपलब्ध कराया गया है: Google Play से डाउनलोड करें.
UNRECOGNIZED_VERSION
सर्टिफ़िकेट या पैकेज का नाम Google से मेल नहीं खाता है Play के रिकॉर्ड.
UNEVALUATED
ऐप्लिकेशन इंटिग्रिटी की जांच नहीं की गई. एक ज़रूरी शर्त जैसे, डिवाइस भरोसेमंद नहीं था.

यह पक्का करने के लिए कि टोकन को आपके बनाए गए ऐप्लिकेशन ने जनरेट किया है, पुष्टि करें कि ऐप्लिकेशन इंटिग्रिटी उम्मीद के मुताबिक है, जैसा कि इस कोड में दिखाया गया है स्निपेट:

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!
}

ऐप्लिकेशन के पैकेज का नाम, ऐप्लिकेशन का वर्शन, और ऐप्लिकेशन सर्टिफ़िकेट भी देखे जा सकते हैं मैन्युअल रूप से.

डिवाइस इंटिग्रिटी फ़ील्ड

deviceIntegrity फ़ील्ड में एक वैल्यू हो सकती है, deviceRecognitionVerdict में एक या एक से ज़्यादा लेबल होते हैं. इससे पता चलता है कि डिवाइस पर ऐप्लिकेशन के लिए पूरी सुरक्षा देने की सुविधा लागू की जा सकती है. अगर कोई डिवाइस, सभी शर्तों को पूरा नहीं करता है, लेबल के साथ, deviceIntegrity फ़ील्ड खाली है.

deviceIntegrity: {
  // "MEETS_DEVICE_INTEGRITY" is one of several possible values.
  deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"]
}

डिफ़ॉल्ट रूप से, deviceRecognitionVerdict में ये चीज़ें शामिल हो सकती हैं:

MEETS_DEVICE_INTEGRITY
यह ऐप्लिकेशन, Android पर चलने वाले ऐसे डिवाइस पर चल रहा है जिसमें Google Play सेवाएं. डिवाइस की जांच में यह पता चला है कि इस पर सिस्टम को पूरी सुरक्षा मिलती है और यह डिवाइस की Android के साथ काम करने से जुड़ी ज़रूरी शर्तें.
खाली (वैल्यू का खाली होना)
यह ऐप्लिकेशन एक ऐसे डिवाइस पर चल रहा है जिसमें हमले (जैसे कि एपीआई हुकिंग) या सिस्टम से छेड़छाड़ (जैसे कि रूट करना) या ऐप्लिकेशन किसी फ़िज़िकल डिवाइस पर नहीं चल रहा है. उदाहरण के लिए, किसी ऐसे एम्युलेटर पर नहीं जो Google Play इंटिग्रिटी जांच में पास नहीं होने चाहिए).

यह पक्का करने के लिए कि टोकन किसी भरोसेमंद डिवाइस से मिला है, deviceRecognitionVerdict उम्मीद के मुताबिक है, जैसा कि इस कोड में दिखाया गया है स्निपेट:

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!
}

अगर आपको मीटिंग के लिए इस्तेमाल होने वाले डिवाइस इंटिग्रिटी की सुविधा की जांच करने में समस्याएं आ रही हैं, तो पक्का कर लें कि फ़ैक्ट्री ROM इंस्टॉल किया गया है. उदाहरण के लिए, डिवाइस को रीसेट करके और यह कि बूटलोडर लॉक है. साथ ही, Play Integrity API की मदद से भी टेस्ट बनाए जा सकते हैं Play Console पर जाएं.

शर्तें पूरी करने वाले डिवाइस के लेबल

अगर आपके ऐप्लिकेशन को पीसी के लिए Google Play Games पर रिलीज़ किया जा रहा है, तो deviceRecognitionVerdict में यह लेबल भी हो सकता है:

MEETS_VIRTUAL_INTEGRITY
यह ऐप्लिकेशन, Android के ऐसे एम्युलेटर पर चल रहा है जो इसके साथ काम करता है: Google Play सेवाएं. एम्युलेटर की जांच से यह पता चला है कि इस पर सिस्टम को पूरी सुरक्षा मिलती है और यह जांच की जाती है Android के साथ काम करने से जुड़ी मुख्य ज़रूरी शर्तें.

डिवाइस की जानकारी (ज़रूरी नहीं)

अगर आपने अतिरिक्त शुल्क पाने के लिए ऑप्ट इन किया है लेबल के तौर पर दिखेगा, deviceRecognitionVerdict में ये अतिरिक्त लेबल शामिल हो सकते हैं:

MEETS_BASIC_INTEGRITY
यह ऐप्लिकेशन एक ऐसे डिवाइस पर चल रहा है जो बेसिक वर्शन से जुड़ी है सिस्टम को पूरी सुरक्षा देने की सुविधा की जांच करता है. ऐसा हो सकता है कि डिवाइस, Android के साथ काम न करे Google Play सेवाएं चलाने के लिए ज़रूरी शर्तों के बारे में है और हो सकता है कि उन्हें इसके लिए मंज़ूरी न मिले. इसके लिए उदाहरण के लिए, हो सकता है कि डिवाइस, Android के किसी ऐसे वर्शन का इस्तेमाल कर रहा हो जिसकी पहचान नहीं की जा सकी हो, जिसमें अनलॉक किया हुआ बूटलोडर हो या उसे मैन्युफ़ैक्चरर हैं.
MEETS_STRONG_INTEGRITY
यह ऐप्लिकेशन, Android पर चलने वाले ऐसे डिवाइस पर चल रहा है जिसमें Google Play services से, सिस्टम को मज़बूत स्तर की पूरी सुरक्षा देने की गारंटी मिलती है. जैसे, हार्डवेयर-बैक्ड बूट इंटिग्रिटी का प्रूफ़ उपलब्ध कराया जाता है. डिवाइस को सिस्टम के पास भेजा गया इंटिग्रिटी की जांच की जाती है और यह Android के साथ काम करने की ज़रूरी शर्तों के मुताबिक है.

डिवाइस इंटिग्रिटी में एक डिवाइस, कई डिवाइस लेबल दिखाएगा नतीजा देखें.

डिवाइस पर हाल ही में की गई गतिविधि

आपके पास, डिवाइस पर हाल ही में की गई गतिविधि के लिए ऑप्ट-इन करने का भी विकल्प होता है. इससे आपको यह जानने में मदद मिलेगी कि आपके ऐप्लिकेशन ने किसी डिवाइस पर इंटिग्रिटी टोकन का अनुरोध कई बार किया है पिछले घंटे में किया था. ऐप्लिकेशन से अपने ऐप्लिकेशन को सुरक्षित रखने के लिए, डिवाइस पर की गई हाल ही की गतिविधि का इस्तेमाल किया जा सकता है ऐसे डिवाइस जिनका अंदाज़ा न लगाया जा सके, लेकिन ऐसे डिवाइस जो किसी सक्रिय हमले का संकेत हो सकते हैं. आप हाल ही में की गई डिवाइस गतिविधि के हर लेवल पर कितना भरोसा कर सकते हैं, यह इसके हिसाब से तय किया जा सकता है कई बार आपको लगता है कि आपका ऐप्लिकेशन किसी सामान्य डिवाइस पर इंस्टॉल होगा. हर घंटे इंटिग्रिटी टोकन उपलब्ध कराया जाता है.

अगर आपने recentDeviceActivity पाने के लिए ऑप्ट-इन किया है, तो deviceIntegrity फ़ील्ड भरें इसमें दो वैल्यू होंगी:

deviceIntegrity: {
  deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"]
  recentDeviceActivity: {
    // "LEVEL_2" is one of several possible values.
    deviceActivityLevel: "LEVEL_2"
  }
}

अलग-अलग मोड के लिए deviceActivityLevel की परिभाषाएं अलग-अलग होती हैं. ये परिभाषाएं इस तरह से हो सकती हैं इनमें से किसी एक वैल्यू का इस्तेमाल करें:

डिवाइस पर हाल ही में की गई गतिविधि का लेवल इस डिवाइस पर, स्टैंडर्ड एपीआई इंटिग्रिटी टोकन के लिए अनुरोध करना हर ऐप्लिकेशन के लिए, पिछले घंटे इस डिवाइस पर, क्लासिक एपीआई इंटिग्रिटी टोकन के अनुरोध हर ऐप्लिकेशन के लिए, पिछले घंटे
LEVEL_1 (सबसे कम) 10 या कम 5 या इससे कम
LEVEL_2 11 से 25 के बीच 6 से 10 के बीच
LEVEL_3 26 और 50 के बीच 11 से 15 साल के बीच
LEVEL_4 (सबसे ज़्यादा) 50 से ज़्यादा 15 से ज़्यादा
UNEVALUATED डिवाइस की हाल की गतिविधि का आकलन नहीं किया गया. यह हो सकता है क्योंकि:
  • डिवाइस भरोसेमंद नहीं है.
  • डिवाइस पर इंस्टॉल किए गए आपके ऐप्लिकेशन के वर्शन की जानकारी Google को नहीं है ऐप्लिकेशन चलाएं.
  • डिवाइस में तकनीकी समस्याएं हैं.

खाते की जानकारी वाला फ़ील्ड

accountDetails फ़ील्ड में एक वैल्यू appLicensingVerdict होती है यह विकल्प, उस उपयोगकर्ता खाते के लिए ऐप्लिकेशन की Google Play लाइसेंसिंग की स्थिति दिखाता है जिसका ने डिवाइस पर साइन इन किया है. अगर उपयोगकर्ता खाते के पास ऐप्लिकेशन का Play लाइसेंस है, इसका मतलब है कि उन्होंने उसे डाउनलोड किया है या Google Play से खरीदा है.

accountDetails: {
  // This field can be LICENSED, UNLICENSED, or UNEVALUATED.
  appLicensingVerdict: "LICENSED"
}

appLicensingVerdict की वैल्यू, इनमें से कोई एक हो सकती है:

LICENSED
उपयोगकर्ता के पास ऐप्लिकेशन का अधिकार है. दूसरे शब्दों में, उपयोगकर्ता ने इंस्टॉल किया या Google Play से आपका ऐप्लिकेशन खरीदा हो.
UNLICENSED
उपयोगकर्ता के पास ऐप्लिकेशन का अधिकार नहीं है. ऐसा तब होता है, जब, उदाहरण के लिए, उपयोगकर्ता आपके ऐप्लिकेशन को अलग से लोड करता है या उसे Google Play से डाउनलोड नहीं करता. इसे ठीक करने के लिए, उपयोगकर्ताओं को GET_GETD डायलॉग दिखाया जा सकता है.
UNEVALUATED

लाइसेंस से जुड़ी जानकारी की जांच नहीं की गई, क्योंकि यह ज़रूरी है ज़रूरत पूरी नहीं हुई.

ऐसा कई वजहों से हो सकता है. इनमें ये वजहें शामिल हैं:

  • डिवाइस भरोसेमंद नहीं है.
  • डिवाइस पर इंस्टॉल किए गए आपके ऐप्लिकेशन के वर्शन की जानकारी Google को नहीं है ऐप्लिकेशन चलाएं.
  • उपयोगकर्ता ने Google Play में साइन इन नहीं किया है.

यह देखने के लिए कि उपयोगकर्ता के पास आपके ऐप्लिकेशन का एनटाइटलमेंट है या नहीं, पुष्टि करें कि appLicensingVerdict उम्मीद के मुताबिक है, जैसा कि इस कोड स्निपेट में दिखाया गया है:

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!
}

वातावरण की जानकारी वाला फ़ील्ड

आपके पास पर्यावरण से जुड़े अन्य सिग्नल के लिए भी ऑप्ट-इन करने का विकल्प है. ऐप्लिकेशन का ऐक्सेस जोखिम से आपके ऐप्लिकेशन को यह पता चलता है कि क्या ऐसे दूसरे ऐप्लिकेशन चल रहे हैं जिनका इस्तेमाल इन कामों के लिए किया जा सकता है स्क्रीन कैप्चर करने, ओवरले दिखाने या डिवाइस को कंट्रोल करने के लिए किया जा सकता है. Play Protect नतीजे से आपको पता चलता है कि डिवाइस पर Google Play Protect की सुविधा चालू है या नहीं. साथ ही, यह भी पता चलता है कि क्या को पहले से मालूम मैलवेयर मिला है.

अगर आपने ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम की जानकारी या Play Protect के नतीजे में ऑप्ट-इन किया है तो आपके एपीआई के जवाब में environmentDetails फ़ील्ड. environmentDetails फ़ील्ड में दो फ़ील्ड हो सकते हैं वैल्यू, appAccessRiskVerdict और playProtectVerdict.

ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम की जानकारी (बीटा वर्शन)

इसे चालू करने के बाद, Play Integrity API में मौजूद environmentDetails फ़ील्ड को पेलोड में यह शामिल होगा ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम का नतीजा.

{
  requestDetails: { ... }
  appIntegrity: { ... }
  deviceIntegrity: { ... }
  accountDetails: { ... }
  environmentDetails: {
      appAccessRiskVerdict: {
          // This field contains one or more responses, for example the following.
          appsDetected: ["KNOWN_INSTALLED", "UNKNOWN_INSTALLED", "UNKNOWN_CAPTURING"]
      }
 }
}

अगर ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम का आकलन किया गया है, तो appAccessRiskVerdict में फ़ील्ड शामिल होता है appsDetected एक या ज़्यादा जवाबों के साथ. ये जवाब इनमें से किसी एक कैटगरी में आते हैं ऐप्लिकेशन को इंस्टॉल करने के सोर्स के आधार पर, इन दो ग्रुप में बदलाव किया जा सकता है:

  • Play या सिस्टम ऐप्लिकेशन: ऐसे ऐप्लिकेशन जिन्हें Google Play से इंस्टॉल किया गया है या जो पहले से लोड किए गए हैं डिवाइस के सिस्टम पार्टिशन पर डिवाइस निर्माता के ज़रिए (इससे पहचान की गई FLAG_SYSTEM). ऐसे ऐप्लिकेशन के जवाबों से पहले KNOWN_ का इस्तेमाल किया जाता है.

  • अन्य ऐप्लिकेशन: ऐसे ऐप्लिकेशन जिन्हें Google Play ने इंस्टॉल नहीं किया है. इसमें ये शामिल नहीं हैं डिवाइस बनाने वाली कंपनी के सिस्टम पार्टिशन में पहले से लोड किए गए ऐप्लिकेशन. जवाब ऐसे ऐप्लिकेशन के लिए UNKNOWN_ के आगे लगाया जाता है.

ये जवाब दिखाए जा सकते हैं:

KNOWN_INSTALLED, UNKNOWN_INSTALLED
इंस्टॉल किए गए कुछ ऐप्लिकेशन, इंस्टॉल किए गए सोर्स से मेल खाते हैं.
KNOWN_CAPTURING, UNKNOWN_CAPTURING
कुछ ऐसे ऐप्लिकेशन चल रहे हैं जिनकी अनुमतियां चालू हैं. इनका इस्तेमाल इन कामों के लिए किया जा सकता है जब आपका ऐप्लिकेशन चल रहा हो, तो स्क्रीन पर देखें. इसमें वे सभी शामिल नहीं हैं जिनकी पुष्टि की जा चुकी है Google Play पर मौजूद सुलभता सेवाएं, डिवाइस पर चल रही हों.
KNOWN_CONTROLLING, UNKNOWN_CONTROLLING
कुछ ऐसे ऐप्लिकेशन चल रहे हैं जिनकी अनुमतियां चालू हैं. इनका इस्तेमाल इन कामों के लिए किया जा सकता है और सीधे अपने ऐप्लिकेशन के इनपुट कंट्रोल कर सकते हैं. ऐसा हो सकता है का इस्तेमाल आपके ऐप्लिकेशन के इनपुट और आउटपुट को कैप्चर करने के लिए किया जाता है. इसमें वे सभी शामिल नहीं हैं जिनकी पुष्टि की जा चुकी है Google Play पर मौजूद सुलभता सेवाएं, डिवाइस पर चल रही हों.
KNOWN_OVERLAYS, UNKNOWN_OVERLAYS
कुछ ऐसे ऐप्लिकेशन चल रहे हैं जिनकी अनुमतियां चालू हैं. इनका इस्तेमाल इन कामों के लिए किया जा सकता है अपने ऐप्लिकेशन पर ओवरले दिखाएं. इसमें वे सभी सुलभता सुविधाएं शामिल नहीं हैं जिनकी पुष्टि की जा चुकी है डिवाइस पर चल रही Google Play में सेव की गई सेवाएं.
EMPTY (एक खाली वैल्यू)

अगर ज़रूरी शर्त पूरी नहीं हुई है, तो ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम का आकलन नहीं किया जाता. तय सीमा में इस केस में appAccessRiskVerdict फ़ील्ड खाली है. ऐसा इन वजहों से हो सकता है कई वजहें हैं, जिनमें ये शामिल हैं:

  • डिवाइस भरोसेमंद नहीं है.
  • डिवाइस का नाप या आकार, फ़ोन, टैबलेट या फ़ोल्ड किए जा सकने वाले डिवाइस नहीं है.
  • डिवाइस में Android 6 (एपीआई लेवल 23) या उसके बाद का वर्शन नहीं है.
  • डिवाइस पर इंस्टॉल किए गए आपके ऐप्लिकेशन के वर्शन की जानकारी Google Play को नहीं है.
  • डिवाइस पर मौजूद Google Play Store का वर्शन पुराना है.
  • सिर्फ़ गेम: उपयोगकर्ता खाते के पास गेम के लिए Play का लाइसेंस नहीं है.
  • verdictOptOut पैरामीटर के साथ, स्टैंडर्ड अनुरोध का इस्तेमाल किया गया था.
  • Play Integrity API लाइब्रेरी वर्शन के साथ, स्टैंडर्ड अनुरोध का इस्तेमाल किया गया था जो अभी तक मानक अनुरोधों के लिए ऐप्लिकेशन ऐक्सेस जोखिम की सुविधा नहीं देती.

ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम में, पुष्टि की गई उन सुलभता सेवाओं को अपने-आप शामिल नहीं किया जाता है जो Google Play की सुलभता सुविधाओं की बेहतर समीक्षा की गई है. इस समीक्षा को डिवाइस पर मौजूद किसी भी ऐप्लिकेशन स्टोर में स्टोर किया जा सकता है). "शामिल नहीं किया गया है" का मतलब है कि सुलभता सुविधाओं की पुष्टि की है डिवाइस पर चल रही सेवाएं, कैप्चर, कंट्रोल, या ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम के नतीजे में, रिस्पॉन्स को ओवरले करता है. Google के बेहतर वर्शन का अनुरोध करने के लिए अपने सुलभता ऐप्लिकेशन के लिए, Play की सुलभता सुविधाओं की समीक्षा करें. इसे Google पर पब्लिश करें Google Play में यह पक्का करें कि isAccessibilityTool फ़्लैग को 'सही है' पर सेट किया गया हो या समीक्षा का अनुरोध करें.

यहां दी गई टेबल में, नतीजों और उनके मतलब के कुछ उदाहरण दिए गए हैं टेबल में हर संभावित नतीजे की जानकारी नहीं दी गई है):

ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम के नतीजे का उदाहरण परिभाषा
appsDetected:
["KNOWN_INSTALLED"]
इंस्टॉल किए गए सिर्फ़ ऐसे ऐप्लिकेशन होते हैं जिनकी Google Play पहचान करता है या जिन्हें डिवाइस बनाने वाली कंपनी ने सिस्टम पार्टिशन में पहले से लोड किया है.
ऐसा कोई भी ऐप्लिकेशन नहीं चल रहा है जिसकी वजह से नतीजों को कैप्चर, कंट्रोल या ओवरले किया जा सके.
appsDetected:
["KNOWN_INSTALLED",
"UNKNOWN_INSTALLED",
"UNKNOWN_CAPTURING"]
ऐसे ऐप्लिकेशन मौजूद हैं जिन्हें Google Play ने इंस्टॉल किया है या डिवाइस बनाने वाली कंपनी ने सिस्टम पार्टिशन में पहले से लोड किया है.
कुछ ऐसे ऐप्लिकेशन भी चल रहे हैं जिनके लिए अनुमतियां चालू हैं. इनका इस्तेमाल स्क्रीन देखने या दूसरे इनपुट और आउटपुट कैप्चर करने के लिए किया जा सकता है.
appsDetected:
["KNOWN_INSTALLED",
"KNOWN_CAPTURING",
"UNKNOWN_INSTALLED",
"UNKNOWN_CONTROLLING"]
डिवाइस पर ऐसा Play या सिस्टम चल रहा है जिसकी अनुमतियां चालू हैं. इन अनुमतियों का इस्तेमाल स्क्रीन देखने या दूसरे इनपुट और आउटपुट कैप्चर करने के लिए किया जा सकता है.
ऐसे दूसरे ऐप्लिकेशन भी इस्तेमाल किए जा रहे हैं जिनके लिए अनुमतियां चालू हैं. इनका इस्तेमाल डिवाइस को कंट्रोल करने और ऐप्लिकेशन में इनपुट को सीधे कंट्रोल करने के लिए किया जा सकता है.
appAccessRiskVerdict: {} ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम का आकलन नहीं किया गया, क्योंकि एक ज़रूरी शर्त पूरी नहीं हुई. उदाहरण के लिए, डिवाइस भरोसेमंद नहीं था.

जोखिम के लेवल के हिसाब से, यह तय किया जा सकता है कि अलग-अलग नतीजे स्वीकार नहीं किया जा सकता और किन नतीजों पर कार्रवाई की जा सकती है. कॉन्टेंट बनाने नीचे दिए गए कोड स्निपेट का इस्तेमाल करके यह पुष्टि करने का उदाहरण दिया गया है कि ऐसे ऐप्लिकेशन जो स्क्रीन को कैप्चर कर सकते हैं या आपके ऐप्लिकेशन को कंट्रोल कर सकते हैं:

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!
    }
}
ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम के नतीजों को ठीक करना

जोखिम के लेवल के हिसाब से, यह तय किया जा सकता है कि ऐप्लिकेशन को किस तरह के खतरे का ऐक्सेस मिलेगा उपयोगकर्ता को अनुरोध या कार्रवाई पूरी करने देने से पहले कोई कार्रवाई करना चाहते हों. Google Play के कुछ वैकल्पिक प्रॉम्प्ट भी हैं, जिन्हें आप उपयोगकर्ता को इसके बाद दिखा सकते हैं ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम की स्थिति देखी जा रही है. आप ये चीज़ें दिखा सकते हैं CLOSE_UNKNOWN_ACCESS_कस का इस्तेमाल करने वाले लोगों को उन अनजान ऐप्लिकेशन को बंद करने के लिए कहना जिनकी वजह से ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम की जानकारी या CLOSE_ALL_ACCESS_ कराएं उपयोगकर्ता को उन सभी ऐप्लिकेशन (जानी-पहचानी और अज्ञात) को बंद करने के लिए कहा जाए जिनकी वजह से ऐप्लिकेशन को ऐक्सेस करने से जुड़े जोखिम होने की संभावना का पता चलता है.

Play Protect की जानकारी

इसे चालू करने के बाद, Play Integrity API में मौजूद environmentDetails फ़ील्ड को पेलोड में यह शामिल होगा Play Protect का नतीजा:

environmentDetails: {
  playProtectVerdict: "NO_ISSUES"
}

playProtectVerdict की वैल्यू, इनमें से कोई एक हो सकती है:

NO_ISSUES
Play Protect की सुविधा चालू है और उसे डिवाइस पर ऐप्लिकेशन से जुड़ी कोई समस्या नहीं मिली.
NO_DATA
Play Protect की सुविधा चालू है, लेकिन अभी तक स्कैन नहीं किया गया है. डिवाइस या ऐसा हो सकता है कि Play Store ऐप्लिकेशन को हाल ही में रीसेट किया गया हो.
POSSIBLE_RISK
Play Protect की सुविधा बंद है.
MEDIUM_RISK
Play Protect चालू है और इसमें नुकसान पहुंचा सकने वाले ऐप्लिकेशन इंस्टॉल किए गए हैं डिवाइस पर.
HIGH_RISK
Play Protect चालू है और उसे इस पर इंस्टॉल किए गए खतरनाक ऐप्लिकेशन मिले हैं डिवाइस.
UNEVALUATED

Play Protect के नतीजे का आकलन नहीं किया गया.

ऐसा कई वजहों से हो सकता है. इनमें ये वजहें शामिल हैं:

  • डिवाइस भरोसेमंद नहीं है.
  • सिर्फ़ गेम: उपयोगकर्ता खाते के पास गेम के लिए Play का लाइसेंस नहीं है.

Play Protect के नतीजे का इस्तेमाल करने के बारे में दिशा-निर्देश

आपके ऐप्लिकेशन का बैकएंड सर्वर, कितना जोखिम हो सकता है. यहां कुछ सुझाव और संभावित उपयोगकर्ता कार्रवाइयां दी गई हैं:

NO_ISSUES
Play Protect की सुविधा चालू है और इसमें कोई समस्या नहीं मिली है. इसलिए, उपयोगकर्ता को कुछ करने की ज़रूरत नहीं है.
POSSIBLE_RISK और NO_DATA
ये नतीजे मिलने पर, उपयोगकर्ता से यह जांचने के लिए कहें कि Play Protect चालू है या नहीं और उसने स्कैन किया है. NO_DATA बहुत कम मामलों में ही दिखनी चाहिए.
MEDIUM_RISK और HIGH_RISK
अपने जोखिम की सहनशीलता के आधार पर, आप उपयोगकर्ता से Play लॉन्च करने के लिए कह सकते हैं Play Protect से जुड़ी चेतावनियों की सुरक्षा करना और उन पर कार्रवाई करना. अगर उपयोगकर्ता जानकारी नहीं भर पा रहा हो तो उन्हें सर्वर से ब्लॉक किया जा सकता है.