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