SafetyNet Verify Apps API

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

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

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

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

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

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

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

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

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

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

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

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

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

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

एसिंक्रोनस isVerifyAppsEnabled() तरीके से, आपका ऐप्लिकेशन यह पता लगा सकता है कि उपयोगकर्ता ने Verify Apps सुविधा के लिए रजिस्टर किया है या नहीं. यह तरीका, 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 ऑब्जेक्ट दिखाता है. इसमें Verify Apps सुविधा से जुड़ी उन सभी कार्रवाइयों के बारे में जानकारी होती है जो उपयोगकर्ता ने की हैं. इसमें यह भी शामिल है कि उपयोगकर्ता ने इस सुविधा को चालू करने की सहमति दी है या नहीं.

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

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.");
            }
        }
    });