সেফটিনেট ভেরিফাই অ্যাপস এপিআই

গুগল প্লে সার্ভিসেস দ্বারা চালিত একটি লাইব্রেরি, SafetyNet Verify Apps API, আপনার অ্যাপটিকে একটি ডিভাইসে Verify Apps বৈশিষ্ট্যের সাথে প্রোগ্রাম্যাটিকভাবে ইন্টারঅ্যাক্ট করতে দেয়, যা ডিভাইসটিকে সম্ভাব্য ক্ষতিকারক অ্যাপ থেকে রক্ষা করে।

যদি আপনার অ্যাপটি আর্থিক তথ্যের মতো সংবেদনশীল ব্যবহারকারীর ডেটা পরিচালনা করে, তাহলে নিশ্চিত করা গুরুত্বপূর্ণ যে ব্যবহারকারীর ডিভাইসটি ক্ষতিকারক অ্যাপ থেকে সুরক্ষিত এবং এতে এমন কোনও অ্যাপ নেই যা আপনার অ্যাপের ছদ্মবেশ ধারণ করতে পারে বা অন্যান্য ক্ষতিকারক কাজ সম্পাদন করতে পারে। যদি ডিভাইসের নিরাপত্তা ন্যূনতম নিরাপত্তা শর্ত পূরণ না করে, তাহলে ব্যবহারকারীর বিপদ কমাতে আপনি আপনার নিজস্ব অ্যাপের কার্যকারিতা অক্ষম করতে পারেন।

অ্যান্ড্রয়েড ইকোসিস্টেমকে যতটা সম্ভব নিরাপদ করার অঙ্গীকারের অংশ হিসেবে, গুগল অ্যান্ড্রয়েড অ্যাপগুলির আচরণ পর্যবেক্ষণ এবং প্রোফাইল করে। যদি ভেরিফাই অ্যাপস বৈশিষ্ট্যটি কোনও সম্ভাব্য বিপজ্জনক অ্যাপ সনাক্ত করে, তাহলে অ্যাপটি ইনস্টল করা সমস্ত ব্যবহারকারীকে অবহিত করা হয় এবং অবিলম্বে অ্যাপটি আনইনস্টল করতে উৎসাহিত করা হয়। এই প্রক্রিয়াটি এই ব্যবহারকারীদের নিরাপত্তা এবং গোপনীয়তা রক্ষা করে।

SafetyNet Verify Apps API আপনাকে আপনার অ্যাপের ডেটা সুরক্ষিত রাখার জন্য এই বৈশিষ্ট্যটি ব্যবহার করতে দেয়। এই API ব্যবহার করে, আপনি নির্ধারণ করতে পারেন যে কোনও ব্যবহারকারীর ডিভাইস Verify Apps বৈশিষ্ট্য দ্বারা সুরক্ষিত কিনা, যারা ইতিমধ্যে বৈশিষ্ট্যটি ব্যবহার করছেন না তাদের এর সুরক্ষা বেছে নিতে উৎসাহিত করতে পারেন এবং ডিভাইসে ইনস্টল করা কোনও পরিচিত সম্ভাব্য ক্ষতিকারক অ্যাপ সনাক্ত করতে পারেন।

অতিরিক্ত পরিষেবার শর্তাবলী

SafetyNet API গুলি অ্যাক্সেস করে বা ব্যবহার করে, আপনি Google API গুলির পরিষেবার শর্তাবলী এবং নিম্নলিখিত Verify Apps API পরিষেবার শর্তাবলীতে সম্মত হন। API গুলি অ্যাক্সেস করার আগে দয়া করে সমস্ত প্রযোজ্য শর্তাবলী এবং নীতিগুলি পড়ুন এবং বুঝুন।

অ্যাপস এপিআই পরিষেবার শর্তাবলী যাচাই করুন

সম্ভাব্য ক্ষতিকারক অ্যাপ শনাক্তকারী অ্যাপগুলির বিশ্লেষণ থেকে মিথ্যা ইতিবাচক এবং মিথ্যা নেতিবাচক উভয় ফলাফলই পাওয়া যেতে পারে। এই 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 অবজেক্ট প্রদান করে, যাতে ব্যবহারকারী Verify Apps বৈশিষ্ট্যের সাথে সম্পর্কিত সমস্ত পদক্ষেপ সম্পর্কে তথ্য থাকে, যার মধ্যে এটি সক্রিয় করাও অন্তর্ভুক্ত।

নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে এই পদ্ধতির সাথে সম্পর্কিত কলব্যাক তৈরি করতে হয়:

কোটলিন

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

জাভা

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() পদ্ধতিটি আপনার অ্যাপকে একটি ডায়ালগ শুরু করতে দেয় যেখানে ব্যবহারকারীকে Verify Apps বৈশিষ্ট্যটি সক্ষম করার অনুরোধ করা হয়। এই পদ্ধতিটি একটি VerifyAppsUserResponse অবজেক্ট প্রদান করে, যাতে ব্যবহারকারী Verify Apps বৈশিষ্ট্যের সাথে সম্পর্কিত সমস্ত পদক্ষেপ সম্পর্কে তথ্য থাকে, যার মধ্যে তারা এটি সক্ষম করার জন্য সম্মতি দিয়েছে কিনা তাও অন্তর্ভুক্ত থাকে।

নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে এই পদ্ধতির সাথে সম্পর্কিত কলব্যাক তৈরি করতে হয়:

কোটলিন

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

জাভা

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

এই পদ্ধতিটি ব্যবহার করার সময় আপনার অ্যাপটি এক বা একাধিক অস্বাভাবিক পরিস্থিতির সম্মুখীন হতে পারে:

  • যদি Verify Apps বৈশিষ্ট্যটি ইতিমধ্যেই সক্রিয় থাকে, তাহলে ডায়ালগটি প্রদর্শিত হবে না এবং API এমন আচরণ করবে যেন ব্যবহারকারী এই বৈশিষ্ট্যটি সক্ষম করার জন্য সম্মতি দিয়েছেন।
  • যদি ব্যবহারকারী ডায়ালগ থেকে দূরে সরে যান, তাহলে ডায়ালগটি নষ্ট হয়ে যাবে এবং API ধরে নেবে যে ব্যবহারকারী এই বৈশিষ্ট্যটি সক্ষম করার জন্য সম্মতি দেননি।
  • যদি আপনার অ্যাপ এবং অন্য একটি অ্যাপ একই সাথে এই পদ্ধতিতে কল করে, তাহলে শুধুমাত্র একটি ডায়ালগ প্রদর্শিত হবে এবং সমস্ত অ্যাপ পদ্ধতি থেকে একই রকম রিটার্ন মান পাবে।

সম্ভাব্য ক্ষতিকারক ইনস্টল করা অ্যাপগুলির তালিকা তৈরি করুন

অ্যাসিঙ্ক্রোনাস listHarmfulApps() পদ্ধতি আপনাকে ব্যবহারকারীর ডিভাইসে ইনস্টল করা সম্ভাব্য ক্ষতিকারক অ্যাপগুলির একটি তালিকা পেতে দেয়। এই তালিকায় চিহ্নিত সম্ভাব্য ক্ষতিকারক অ্যাপগুলির বিভাগ অন্তর্ভুক্ত রয়েছে যাতে আপনার অ্যাপ যথাযথ ব্যবস্থা নিতে পারে।

নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে এই পদ্ধতির সাথে সম্পর্কিত কলব্যাক তৈরি করতে হয়:

কোটলিন

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

জাভা

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