SafetyNet Verify Apps API

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

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

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

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

شرایط خدمات اضافی

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

شرایط خدمات API برنامه‌ها را تأیید کنید

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

وابستگی API مربوط به SafetyNet را اضافه کنید

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

فعال کردن تأیید برنامه

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

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

تعیین کنید که آیا تأیید برنامه فعال است یا خیر

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

قطعه کد زیر نحوه ایجاد callback مرتبط با این متد را نشان می‌دهد:

کاتلین

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 انجام داده است، از جمله اینکه آیا آنها برای فعال کردن آن رضایت داده‌اند یا خیر.

قطعه کد زیر نحوه ایجاد callback مرتبط با این متد را نشان می‌دهد:

کاتلین

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() غیرهمزمان به شما امکان می‌دهد فهرستی از برنامه‌های بالقوه مضر شناخته‌شده‌ای که کاربر روی دستگاه خود نصب کرده است، دریافت کنید. این فهرست شامل دسته‌بندی‌هایی برای برنامه‌های بالقوه مضر شناسایی‌شده است تا برنامه شما بتواند اقدامات مناسب را انجام دهد.

قطعه کد زیر نحوه ایجاد callback مرتبط با این متد را نشان می‌دهد:

کاتلین

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