SafetyNet Verify Apps API

Interfejs API weryfikacji aplikacji SafetyNet to biblioteka oparta na usługach Google Play, która umożliwia Twojej aplikacji interakcję programową z funkcją Weryfikacja aplikacji na urządzeniu. Dzięki temu aplikacja chroni urządzenie przed potencjalnie szkodliwymi aplikacjami.

Jeśli aplikacja używa poufnych danych użytkownika, takich jak informacje finansowe, ważne jest, aby sprawdzić, czy urządzenie użytkownika jest chronione przed złośliwymi aplikacjami i czy nie ma na nim żadnych aplikacji, które mogłyby podszywać się pod Twoją aplikację lub wykonywać inne szkodliwe działania. Jeśli zabezpieczenia urządzenia nie spełniają minimalnych wymagań, możesz wyłączyć funkcje w swojej aplikacji, aby zmniejszyć zagrożenie dla użytkownika.

W ramach stałego dążenia do tego, aby ekosystem Androida był jak bezpieczny, Google monitoruje i profiluje zachowanie aplikacji na Androida. Jeśli funkcja Weryfikacja aplikacji wykryje potencjalnie niebezpieczną aplikację, wszyscy użytkownicy, którzy ją zainstalowali, zostaną o niej powiadomieni i zachęceni do jej natychmiastowego odinstalowania. Ten proces zapewnia bezpieczeństwo i prywatność tych użytkowników.

Interfejs API weryfikacji aplikacji SafetyNet umożliwia korzystanie z tej funkcji do ochrony danych aplikacji. Za pomocą tego interfejsu API możesz sprawdzić, czy urządzenie użytkownika jest chronione przez funkcję weryfikacji aplikacji, zachęcić użytkowników, którzy nie korzystają jeszcze z tej funkcji, do korzystania z tej ochrony, oraz zidentyfikować znane potencjalnie szkodliwe aplikacje zainstalowane na urządzeniu.

Dodatkowe warunki korzystania z usługi

Korzystając z interfejsów API SafetyNet lub uzyskując do nich dostęp, akceptujesz Warunki korzystania z interfejsów API Google oraz te Warunki korzystania z interfejsu API Verify Apps. Zanim uzyskasz dostęp do interfejsów API, przeczytaj i zapoznaj się ze wszystkimi obowiązującymi warunkami oraz zasadami.

Warunki korzystania z interfejsu API Verify Apps

Analiza aplikacji w celu wykrycia potencjalnie szkodliwych aplikacji może prowadzić do fałszywych wyników pozytywnych i fałszywych wyników negatywnych. Wyniki zwracane przez ten pakiet interfejsu API (lub ich brak) są prezentowane zgodnie z naszą najlepszą wiedzą. Użytkownik przyjmuje do wiadomości i rozumie, że nie zawsze można zagwarantować, że wyniki zwrócone przez interfejs API SafetyNet będą prawidłowe.

Dodaj zależność SafetyNet API

Zanim użyjesz interfejsu Verify Apps API, dodaj interfejs SafetyNet API do projektu. Jeśli używasz Android Studio, dodaj tę zależność do pliku Gradle na poziomie aplikacji. Więcej informacji znajdziesz w artykule Konfigurowanie interfejsu SafetyNet API.

Włączanie weryfikacji aplikacji

Interfejs SafetyNet Verify Apps API udostępnia 2 metody włączania funkcji Weryfikacja aplikacji. Aby sprawdzić, czy weryfikacja aplikacji jest włączona, użyj isVerifyAppsEnabled(). Aby poprosić o włączenie weryfikacji aplikacji, użyj enableVerifyApps().

Różnica między tymi 2 metodami polega na tym, że podczas gdy isVerifyAppsEnabled() informuje o bieżącym stanie funkcji weryfikacji aplikacji, enableVerifyApps() wyraźnie prosi użytkownika o zgodę na korzystanie z tej funkcji. Jeśli chcesz, aby aplikacja wiedziała o stanie funkcji, aby podjąć decyzję dotyczącą bezpieczeństwa, powinna wywołać funkcję isVerifyAppsEnabled(). Jeśli jednak chcesz mieć pewność, że Twoja aplikacja może wyświetlać listę potencjalnie szkodliwych zainstalowanych aplikacji, wywołaj enableVerifyApps().

Sprawdzanie, czy weryfikacja aplikacji jest włączona

Asymetryczna metoda isVerifyAppsEnabled() pozwala aplikacji określić, czy użytkownik jest zarejestrowany w funkcji weryfikacji aplikacji. Ta metoda zwraca obiekt VerifyAppsUserResponse, który zawiera informacje o wszystkich działaniach użytkownika związanych z funkcją weryfikacji aplikacji, w tym o jej włączeniu.

Ten fragment kodu pokazuje, jak utworzyć wywołanie zwrotne powiązane z tą metodą:

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

Prośba o włączenie weryfikacji aplikacji

Asynchroniczna metoda enableVerifyApps() pozwala aplikacji wywołać okno z prośbą o włączenie funkcji Weryfikacja aplikacji przez użytkownika. Ta metoda zwraca obiekt VerifyAppsUserResponse, który zawiera informacje o wszystkich działaniach użytkownika związanych z funkcją weryfikacji aplikacji, w tym o tym, czy użytkownik wyraził zgodę na jej włączenie.

Ten fragment kodu pokazuje, jak utworzyć wywołanie zwrotne powiązane z tą metodą:

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

Podczas korzystania z tej metody aplikacja może napotkać co najmniej 1 nietypową sytuację:

  • Jeśli funkcja weryfikacji aplikacji jest już włączona, okno dialogowe się nie wyświetli, a interfejs API zachowuje się tak, jakby użytkownik wyraził zgodę na włączenie tej funkcji.
  • Jeśli użytkownik zamknie okno dialogowe, zostanie ono usunięte, a interfejs API uzna, że użytkownik nie wyraził zgody na włączenie tej funkcji.
  • Jeśli Twoja aplikacja i inna aplikacja wywołują tę metodę jednocześnie, pojawi się tylko jedno okno i wszystkie aplikacje otrzymają identyczne wartości zwracane przez metodę.

Lista potencjalnie szkodliwych zainstalowanych aplikacji

Asymetryczna metoda listHarmfulApps() umożliwia uzyskanie listy wszystkich znanych potencjalnie szkodliwych aplikacji zainstalowanych na urządzeniu użytkownika. Lista zawiera kategorie zidentyfikowanych potencjalnie szkodliwych aplikacji, dzięki którym aplikacja będzie mogła podjąć odpowiednie działania.

Ten fragment kodu pokazuje, jak utworzyć wywołanie zwrotne powiązane z tą metodą:

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