SafetyNet Verify Apps API – это библиотека, которая работает на основе сервисов Google Play. Она позволяет вашему приложению программно взаимодействовать с функцией Проверка приложений на устройстве, защищая его от потенциально опасных приложений.
Если ваше приложение обрабатывает конфиденциальные пользовательские данные, например финансовую информацию, важно убедиться, что устройство пользователя защищено от вредоносных приложений и на нем нет приложений, которые могут выдавать себя за ваше или выполнять другие вредоносные действия. Если уровень безопасности устройства не соответствует минимальным требованиям, вы можете отключить функции в своем приложении, чтобы снизить риск для пользователя.
Google стремится сделать экосистему Android максимально безопасной, поэтому мы отслеживаем и анализируем поведение приложений Android. Если функция "Проверка приложений" обнаруживает потенциально опасное приложение, все пользователи, установившие его, получают уведомление с рекомендацией удалить приложение. Это позволяет защитить их конфиденциальность и безопасность.
SafetyNet Verify Apps API позволяет использовать эту функцию для защиты данных приложения. С помощью этого API можно определить, защищено ли устройство пользователя функцией "Проверка приложений", предложить пользователям, которые ещё не используют эту функцию, включить ее и выявить известные потенциально опасные приложения, установленные на устройстве.
Дополнительные условия использования
Получая доступ к SafetyNet API или используя их, вы принимаете Условия использования API Google и приведенные ниже Условия использования Verify Apps API. Прежде чем начать работу с API, внимательно прочитайте все применимые условия и правила.
Условия использования Verify Apps API
При анализе приложений, которые выявляют потенциально опасные приложения, могут возникать как ложноположительные, так и ложноотрицательные результаты. Результаты, возвращаемые этим набором API, представлены в соответствии с нашим пониманием. Вы признаете и понимаете, что результаты, возвращаемые этим набором API SafetyNet, не всегда могут быть точными.Добавьте зависимость SafetyNet API
Прежде чем использовать Verify Apps API, добавьте в проект SafetyNet API. Если вы используете Android Studio, добавьте эту зависимость в файл Gradle на уровне приложения. Подробнее о настройке SafetyNet API…
Включить проверку приложений
SafetyNet Verify Apps 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."); } } });
При использовании этого метода в приложении могут возникнуть следующие проблемы:
- Если функция уже включена, диалоговое окно не появляется, а API работает так, как будто пользователь дал согласие на ее включение.
- Если пользователь закроет диалоговое окно, оно будет удалено, а API посчитает, что пользователь не дал согласие на включение этой функции.
- Если ваше приложение и другое приложение вызовут этот метод одновременно, появится только одно диалоговое окно и все приложения получат одинаковые возвращаемые значения.
Список потенциально опасных установленных приложений
Асинхронный метод 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."); } } });