SafetyNet Verify Apps API

SafetyNet Verify Apps API, Google Play services की मदद से काम करने वाली एक लाइब्रेरी है. इससे आपके ऐप्लिकेशन को, किसी डिवाइस पर ऐप्लिकेशन की पुष्टि करें सुविधा के साथ प्रोग्राम के हिसाब से इंटरैक्ट करने में मदद मिलती है. इससे डिवाइस को नुकसान पहुंचाने वाले ऐप्लिकेशन से सुरक्षित रखा जा सकता है.

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

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

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

सेवा की अन्य शर्तें

SafetyNet API को ऐक्सेस या इस्तेमाल करने का मतलब है कि आप Google API की सेवा की शर्तों और Verify Apps API की सेवा की यहां दी गई शर्तों से सहमत हैं. एपीआई को ऐक्सेस करने से पहले, कृपया इस पर लागू होने वाली सभी शर्तों और नीतियों को पढ़कर समझ लें.

Verify Apps API की सेवा की शर्तें

नुकसान पहुंचाने वाले संभावित ऐप्लिकेशन की पहचान करने वाले ऐप्लिकेशन के विश्लेषण से, गलत सकारात्मक और गलत नकारात्मक नतीजे मिल सकते हैं. इस एपीआई सुइट से मिले नतीजों (या नतीजों के न मिलने) को हमारी समझ के मुताबिक दिखाया जाता है. आप इस बात से सहमत हैं और समझते हैं कि इस SafetyNet API suite से मिलने वाले नतीजों के हमेशा सटीक होने की गारंटी नहीं है.

SafetyNet API डिपेंडेंसी जोड़ना

Verify Apps API का इस्तेमाल करने से पहले, अपने प्रोजेक्ट में SafetyNet API जोड़ें. अगर Android Studio का इस्तेमाल किया जा रहा है, तो इस डिपेंडेंसी को अपने ऐप्लिकेशन-लेवल की Gradle फ़ाइल में जोड़ें. ज़्यादा जानकारी के लिए, SafetyNet API का सेटअप देखें.

ऐप्लिकेशन की पुष्टि करने की सुविधा चालू करना

SafetyNetVerify ऐप्लिकेशन API, ऐप्लिकेशन की पुष्टि करने की सुविधा को चालू करने के लिए दो तरीके देता है. isVerifyAppsEnabled() का इस्तेमाल करके, यह पता लगाया जा सकता है कि ऐप्लिकेशन की पुष्टि की सुविधा चालू है या नहीं. साथ ही, enableVerifyApps() का इस्तेमाल करके, ऐप्लिकेशन की पुष्टि की सुविधा चालू करने का अनुरोध किया जा सकता है.

इन दोनों तरीकों में अंतर यह है कि isVerifyAppsEnabled(), 'ऐप्लिकेशन की पुष्टि करें' सुविधा की मौजूदा स्थिति की जानकारी देता है, जबकि enableVerifyApps(), इस सुविधा का इस्तेमाल करने के लिए उपयोगकर्ता से साफ़ तौर पर सहमति मांगता है. अगर आपको अपने ऐप्लिकेशन को सिर्फ़ इस सुविधा की स्थिति के बारे में पता होना है, ताकि वह सुरक्षा से जुड़ा फ़ैसला ले सके, तो आपके ऐप्लिकेशन को isVerifyAppsEnabled() को कॉल करना चाहिए. हालांकि, अगर आपको यह पक्का करना है कि आपका ऐप्लिकेशन, इंस्टॉल किए गए ऐसे ऐप्लिकेशन की सूची बना सकता है जो नुकसान पहुंचा सकते हैं, तो आपको enableVerifyApps() को कॉल करना चाहिए.

यह पता लगाना कि ऐप्लिकेशन की पुष्टि करने की सुविधा चालू है या नहीं

असाइनोक्रोनस isVerifyAppsEnabled() तरीके की मदद से, आपके ऐप्लिकेशन यह तय कर सकते हैं कि उपयोगकर्ता, 'ऐप्लिकेशन की पुष्टि करें' सुविधा में रजिस्टर है या नहीं. यह तरीका, VerifyAppsUserResponse ऑब्जेक्ट दिखाता है. इसमें, उपयोगकर्ता ने ऐप्लिकेशन की पुष्टि करने की सुविधा को चालू करने के साथ-साथ, उससे जुड़ी सभी कार्रवाइयों की जानकारी होती है.

नीचे दिए गए कोड स्निपेट में, इस तरीके से जुड़ा कॉलबैक बनाने का तरीका बताया गया है:

Kotlin

SafetyNet.getClient(this)
        .isVerifyAppsEnabled
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                if (task.result.isVerifyAppsEnabled) {
                    Log.d("MY_APP_TAG", "The Verify Apps feature is enabled.")
                } else {
                    Log.d("MY_APP_TAG", "The Verify Apps feature is disabled.")
                }
            } else {
                Log.e("MY_APP_TAG", "A general error occurred.")
            }
        }

Java

SafetyNet.getClient(this)
    .isVerifyAppsEnabled()
    .addOnCompleteListener(new OnCompleteListener<VerifyAppsUserResponse>() {
        @Override
        public void onComplete(Task<VerifyAppsUserResponse> task) {
            if (task.isSuccessful()) {
                VerifyAppsUserResponse result = task.getResult();
                if (result.isVerifyAppsEnabled()) {
                    Log.d("MY_APP_TAG", "The Verify Apps feature is enabled.");
                } else {
                    Log.d("MY_APP_TAG", "The Verify Apps feature is disabled.");
                }
            } else {
                Log.e("MY_APP_TAG", "A general error occurred.");
            }
        }
    });

ऐप्लिकेशन की पुष्टि करने की सुविधा चालू करने का अनुरोध करना

असाइनोक्रोनस enableVerifyApps() तरीके की मदद से, आपका ऐप्लिकेशन एक डायलॉग बॉक्स दिखा सकता है. इसमें, उपयोगकर्ता से 'ऐप्लिकेशन की पुष्टि करें' सुविधा चालू करने का अनुरोध किया जाता है. यह तरीका, VerifyAppsUserResponse ऑब्जेक्ट दिखाता है. इसमें उन सभी कार्रवाइयों की जानकारी होती है जिन्हें उपयोगकर्ता ने 'ऐप्लिकेशन की पुष्टि करें' सुविधा के लिए किया है. इसमें यह जानकारी भी शामिल होती है कि उपयोगकर्ता ने इस सुविधा को चालू करने के लिए सहमति दी है या नहीं.

नीचे दिए गए कोड स्निपेट में, इस तरीके से जुड़ा कॉलबैक बनाने का तरीका बताया गया है:

Kotlin

SafetyNet.getClient(this)
        .enableVerifyApps()
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                if (task.result.isVerifyAppsEnabled) {
                    Log.d("MY_APP_TAG", "The user gave consent to enable the Verify Apps feature.")
                } else {
                    Log.d(
                            "MY_APP_TAG",
                            "The user didn't give consent to enable the Verify Apps feature."
                    )
                }
            } else {
                Log.e("MY_APP_TAG", "A general error occurred.")
            }
        }

Java

SafetyNet.getClient(this)
    .enableVerifyApps()
    .addOnCompleteListener(new OnCompleteListener<VerifyAppsUserResponse>() {
        @Override
        public void onComplete(Task<VerifyAppsUserResponse> task) {
            if (task.isSuccessful()) {
                VerifyAppsUserResponse result = task.getResult();
                if (result.isVerifyAppsEnabled()) {
                    Log.d("MY_APP_TAG", "The user gave consent " +
                          "to enable the Verify Apps feature.");
                } else {
                    Log.d("MY_APP_TAG", "The user didn't give consent " +
                          "to enable the Verify Apps feature.");
                }
            } else {
                Log.e("MY_APP_TAG", "A general error occurred.");
            }
        }
    });

इस तरीके का इस्तेमाल करने पर, आपके ऐप्लिकेशन को एक या उससे ज़्यादा असामान्य स्थितियों का सामना करना पड़ सकता है:

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

इंस्टॉल किए गए ऐसे ऐप्लिकेशन की सूची जो नुकसान पहुंचा सकते हैं

असिंक्रोनस listHarmfulApps() तरीके से, आपको उन सभी ऐप्लिकेशन की सूची मिल सकती है जो नुकसान पहुंचा सकते हैं और जिन्हें उपयोगकर्ता ने अपने डिवाइस पर इंस्टॉल किया है. इस सूची में, नुकसान पहुंचा सकने वाले उन ऐप्लिकेशन की कैटगरी शामिल होती हैं जिनकी पहचान की जा सकती है. इससे, आपका ऐप्लिकेशन सही कार्रवाई कर पाएगा.

नीचे दिए गए कोड स्निपेट में, इस तरीके से जुड़ा कॉलबैक बनाने का तरीका बताया गया है:

Kotlin

SafetyNet.getClient(this)
        .listHarmfulApps()
        .addOnCompleteListener { task ->
            Log.d(TAG, "Received listHarmfulApps() result")

            if (task.isSuccessful) {
                val result = task.result
                val scanTimeMs = result.lastScanTimeMs

                val appList = result.harmfulAppsList
                if (appList?.isNotEmpty() == true) {
                    Log.e("MY_APP_TAG", "Potentially harmful apps are installed!")

                    for (harmfulApp in appList) {
                        Log.e("MY_APP_TAG", "Information about a harmful app:")
                        Log.e("MY_APP_TAG", "  APK: ${harmfulApp.apkPackageName}")
                        Log.e("MY_APP_TAG", "  SHA-256: ${harmfulApp.apkSha256}")

                        // Categories are defined in VerifyAppsConstants.
                        Log.e("MY_APP_TAG", "  Category: ${harmfulApp.apkCategory}")
                    }
                } else {
                    Log.d("MY_APP_TAG", "There are no known potentially harmful apps installed.")
                }
            } else {
                Log.d(
                        "MY_APP_TAG",
                        "An error occurred. Call isVerifyAppsEnabled() to ensure that the user "
                                + "has consented."
                )
            }
        }

Java

SafetyNet.getClient(this)
    .listHarmfulApps()
    .addOnCompleteListener(new OnCompleteListener<HarmfulAppsResponse>() {
        @Override
        public void onComplete(Task<HarmfulAppsResponse> task) {
            Log.d(TAG, "Received listHarmfulApps() result");

            if (task.isSuccessful()) {
                HarmfulAppsResponse result = task.getResult();
                long scanTimeMs = result.getLastScanTimeMs();

                List<HarmfulAppsData> appList = result.getHarmfulAppsList();
                if (appList.isEmpty()) {
                    Log.d("MY_APP_TAG", "There are no known " +
                          "potentially harmful apps installed.");
                } else {
                    Log.e("MY_APP_TAG",
                          "Potentially harmful apps are installed!");

                    for (HarmfulAppsData harmfulApp : appList) {
                        Log.e("MY_APP_TAG", "Information about a harmful app:");
                        Log.e("MY_APP_TAG",
                              "  APK: " + harmfulApp.apkPackageName);
                        Log.e("MY_APP_TAG",
                              "  SHA-256: " + harmfulApp.apkSha256);

                        // Categories are defined in VerifyAppsConstants.
                        Log.e("MY_APP_TAG",
                              "  Category: " + harmfulApp.apkCategory);
                    }
                }
            } else {
                Log.d("MY_APP_TAG", "An error occurred. " +
                      "Call isVerifyAppsEnabled() to ensure " +
                      "that the user has consented.");
            }
        }
    });