SafetyNet Verify Apps API

SafetyNet Verify Apps API، کتابخانه‌ای که با خدمات Google Play کار می‌کند، به برنامه شما اجازه می‌دهد به‌طور برنامه‌نویسی‌شده با ویژگی درستی‌سنجی برنامه‌ها در دستگاه تعامل داشته باشد و از دستگاه دربرابر برنامه‌های بالقوه مضر محافظت کند.

اگر برنامه‌تان با داده‌های حساس کاربر، مثل اطلاعات مالی، سروکار دارد، مهم است که مطمئن شوید دستگاه کاربر دربرابر برنامه‌های مخرب محافظت می‌شود و هیچ برنامه‌ای ندارد که بتواند خودش را به‌جای برنامه شما جا بزند یا کنش‌های مخرب دیگری انجام دهد. اگر امنیت دستگاه حداقل وضعیت امنیتی را برآورده نمی‌کند، می‌توانید عملکرد را در برنامه خودتان غیرفعال کنید تا خطر برای کاربر کاهش یابد.

Google به‌عنوان بخشی از تعهد مستمر خود برای ایمن‌تر کردن بوم‌سازگان Android تا حد امکان، رفتار برنامه‌های Android را نظارت و نمایه‌سازی می‌کند. اگر ویژگی «تأیید برنامه‌ها» برنامه بالقوه خطرناکی را شناسایی کند، به همه کاربرانی که برنامه را نصب کرده‌اند اطلاع داده می‌شود و از آن‌ها خواسته می‌شود فوراً برنامه را حذف نصب کنند. این فرایند از امنیت و حریم خصوصی این کاربران محافظت می‌کند.

SafetyNet Verify Apps API به شما امکان می‌دهد از این ویژگی برای محافظت از داده‌های برنامه‌تان استفاده کنید. بااستفاده از این میانای برنامه‌سازی کاربردی، می‌توانید تعیین کنید که آیا دستگاه کاربر توسط ویژگی «درستی‌سنجی برنامه‌ها» محافظت می‌شود یا نه، کاربرانی را که درحال‌حاضر از این ویژگی استفاده نمی‌کنند تشویق کنید تا با محافظت آن موافقت کنند، و هرگونه برنامه احتمالاً مضر شناخته‌شده‌ای را که در دستگاه نصب شده است شناسایی کنید.

شرایط خدمات تکمیلی

با دسترسی به SafetyNet APIs یا استفاده از آن، با شرایط خدمات Google APIs و شرایط خدمات Verify Apps API زیر موافقت می‌کنید. لطفاً قبل‌از دسترسی به میاناهای برنامه‌سازی کاربردی، همه شرایط و خط‌مشی‌های ذی‌ربط را بخوانید و درک کنید.

شرایط خدمات میانای برنامه‌سازی کاربردی «درستی‌سنجی برنامه‌ها»

تجزیه‌وتحلیل برنامه‌ها که برنامه‌های بالقوه مضر را شناسایی می‌کند ممکن است هم مثبت کاذب و هم منفی کاذب داشته باشد. نتایج (یا عدم وجود آن‌ها) که از این مجموعه API برگردانده شده است، براساس بهترین درک ما ارائه شده است. شما تأیید می‌کنید و می‌پذیرید که نتایج برگردانده‌شده توسط این مجموعه SafetyNet API تضمین نمی‌شود که همیشه دقیق باشد.

افزودن وابستگی SafetyNet API

قبل‌از استفاده از Verify Apps API،‏ SafetyNet API را به پروژه‌تان اضافه کنید. اگر از Android Studio استفاده می‌کنید، این وابستگی را به فایل Gradle سطح برنامه‌تان اضافه کنید. برای اطلاعات بیشتر، راه‌اندازی SafetyNet API را ببینید.

فعال کردن درستی‌سنجی برنامه

SafetyNet Verify Apps API دو روش برای فعال کردن ویژگی «تأیید برنامه‌ها» ارائه می‌دهد. می‌توانید بااستفاده از isVerifyAppsEnabled() تعیین کنید که آیا درستی‌سنجی برنامه فعال است یا نه، و می‌توانید بااستفاده از enableVerifyApps() درخواست کنید که درستی‌سنجی برنامه فعال شود.

تفاوت بین این دو روش این است که درحالی‌که isVerifyAppsEnabled() وضعیت فعلی ویژگی «تأیید برنامه‌ها» را گزارش می‌کند، enableVerifyApps() صریحاً از کاربر برای استفاده از این ویژگی رضایت می‌خواهد. اگر می‌خواهید برنامه‌تان فقط از وضعیت ویژگی مطلع باشد تا تصمیمی مبتنی بر امنیت بگیرد، برنامه‌تان باید isVerifyAppsEnabled() را فراخوانی کند. بااین‌حال، اگر می‌خواهید مطمئن شوید که برنامه‌تان می‌تواند برنامه‌های نصب‌شده بالقوه مضر را فهرست کند، باید به‌جای آن enableVerifyApps() را فراخوانی کنید.

تعیین اینکه درستی‌سنجی برنامه فعال است یا نه

روش ناهمگام isVerifyAppsEnabled() به برنامه شما اجازه می‌دهد تعیین کند آیا کاربر در ویژگی «درستی‌سنجی برنامه‌ها» ثبت‌نام کرده است یا نه. این روش یک شیء VerifyAppsUserResponse برمی‌گرداند که حاوی اطلاعاتی درباره همه کنش‌هایی است که کاربر دررابطه‌با ویژگی «درستی‌سنجی برنامه‌ها» انجام داده است، ازجمله فعال کردن آن.

تکه‌کد زیر نحوه ایجاد فراخوانی برگشتی مرتبط با این روش را نشان می‌دهد:

کاتلین

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() به برنامه شما اجازه می‌دهد تا کادر گفتگویی را فراخوانی کند که از کاربر می‌خواهد ویژگی «تأیید برنامه‌ها» را فعال کند. این روش یک شیء VerifyAppsUserResponse را برمی‌گرداند که حاوی اطلاعاتی درباره همه کنش‌هایی است که کاربر دررابطه‌با ویژگی «درستی‌سنجی برنامه‌ها» انجام داده است، ازجمله اینکه آیا برای فعال کردن آن رضایت داده است یا نه.

تکه‌کد زیر نحوه ایجاد فراخوانی برگشتی مرتبط با این روش را نشان می‌دهد:

کاتلین

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

برنامه شما هنگام استفاده از این روش ممکن است با یک یا چند شرایط غیرمعمول مواجه شود:

  • اگر ویژگی «تأیید برنامه‌ها» ازقبل فعال شده باشد، کادر گفتگو نشان داده نمی‌شود و 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.");
            }
        }
    });