SafetyNet Verify Apps API

Mit der SafetyNet Verify Apps API, einer Bibliothek, die auf den Google Play-Diensten basiert, kann Ihre App programmatisch mit der Funktion Apps überprüfen auf einem Gerät interagieren und das Gerät so vor potenziell schädlichen Apps schützen.

Wenn in Ihrer App vertrauliche Nutzerdaten wie Finanzinformationen verarbeitet werden, ist es wichtig, dass das Gerät des Nutzers vor schädlichen Apps geschützt ist und keine Apps darauf installiert sind, die Ihre App imitieren oder andere schädliche Aktionen ausführen könnten. Wenn die Sicherheit des Geräts nicht den Mindestanforderungen entspricht, können Sie Funktionen in Ihrer App deaktivieren, um die Gefahr für den Nutzer zu verringern.

Im Rahmen unseres kontinuierlichen Engagements, das Android-System so sicher wie möglich zu machen, überwacht und profiliert Google das Verhalten von Android-Apps. Wenn die Funktion „Apps überprüfen“ eine potenziell gefährliche App erkennt, werden alle Nutzer, die die App installiert haben, benachrichtigt und aufgefordert, die App umgehend zu deinstallieren. Dieser Prozess schützt die Sicherheit und den Datenschutz dieser Nutzer.

Mit der SafetyNet Verify Apps API können Sie diese Funktion nutzen, um die Daten Ihrer App zu schützen. Mit dieser API können Sie feststellen, ob das Gerät eines Nutzers durch die Funktion „Apps überprüfen“ geschützt ist, Nutzer, die die Funktion noch nicht verwenden, dazu anregen, den Schutz zu aktivieren, und bekannte potenziell schädliche Apps auf dem Gerät identifizieren.

Zusätzliche Nutzungsbedingungen

Durch den Zugriff auf oder die Verwendung der SafetyNet APIs stimmen Sie den Nutzungsbedingungen für Google APIs und den folgenden Nutzungsbedingungen für dieVerify Apps API zu. Lesen Sie sich alle anwendbaren Nutzungsbedingungen und Richtlinien durch, bevor Sie auf die APIs zugreifen.

Nutzungsbedingungen der Verify Apps API

Die Analysen von Anwendungen, die potenziell schädliche Anwendungen identifizieren, können sowohl falsch-positive als auch falsch-negative Ergebnisse liefern. Die Ergebnisse (oder das Fehlen von Ergebnissen), die von dieser API-Suite zurückgegeben werden, werden nach unserem besten Wissen und Gewissen präsentiert. Sie bestätigen und erklären sich damit einverstanden, dass die von dieser SafetyNet API-Suite zurückgegebenen Ergebnisse nicht immer korrekt sind.

SafetyNet API-Abhängigkeit hinzufügen

Bevor Sie die Verify Apps API verwenden können, müssen Sie Ihrem Projekt die SafetyNet API hinzufügen. Wenn Sie Android Studio verwenden, fügen Sie diese Abhängigkeit der Gradle-Datei auf App-Ebene hinzu. Weitere Informationen finden Sie unter SafetyNet API einrichten.

App-Überprüfung aktivieren

Die SafetyNet Verify Apps API bietet zwei Methoden, um die Funktion „Apps prüfen“ zu aktivieren. Sie können mit isVerifyAppsEnabled() feststellen, ob die Anwendungsüberprüfung aktiviert ist, und die Aktivierung der Anwendungsüberprüfung mit enableVerifyApps() anfordern.

Der Unterschied zwischen diesen beiden Methoden besteht darin, dass isVerifyAppsEnabled() zwar den aktuellen Status der Funktion „Apps überprüfen“ meldet, enableVerifyApps() aber den Nutzer ausdrücklich um seine Einwilligung zur Verwendung der Funktion bittet. Wenn Sie möchten, dass Ihre Anwendung nur den Funktionsstatus erkennt, um eine sicherheitsorientierte Entscheidung zu treffen, sollte Ihre Anwendung isVerifyAppsEnabled() aufrufen. Wenn Sie jedoch sicher sein möchten, dass Ihre App potenziell schädliche installierte Apps auflisten kann, sollten Sie stattdessen enableVerifyApps() aufrufen.

Prüfen, ob die App-Bestätigung aktiviert ist

Mit der asynchronen isVerifyAppsEnabled()-Methode kann Ihre App feststellen, ob der Nutzer für die Funktion „Apps prüfen“ registriert ist. Diese Methode gibt ein VerifyAppsUserResponse-Objekt zurück, das Informationen zu allen Aktionen enthält, die der Nutzer im Zusammenhang mit dem Feature „Apps überprüfen“ ausgeführt hat, einschließlich dessen Aktivierung.

Das folgende Code-Snippet zeigt, wie der mit dieser Methode verknüpfte Rückruf erstellt wird:

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

Aktivierung der App-Überprüfung beantragen

Mit der asynchronen Methode enableVerifyApps() kann Ihre App ein Dialogfeld aufrufen, in dem der Nutzer aufgefordert wird, die Funktion „Apps überprüfen“ zu aktivieren. Diese Methode gibt ein VerifyAppsUserResponse-Objekt zurück, das Informationen zu allen Aktionen enthält, die der Nutzer im Zusammenhang mit der Funktion „Apps überprüfen“ ausgeführt hat, einschließlich der Frage, ob er seine Einwilligung zur Aktivierung gegeben hat.

Das folgende Code-Snippet zeigt, wie der mit dieser Methode verknüpfte Callback erstellt wird:

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

Bei der Verwendung dieser Methode kann es zu einer oder mehreren ungewöhnlichen Situationen in Ihrer App kommen:

  • Wenn die Funktion „Apps überprüfen“ bereits aktiviert ist, wird das Dialogfeld nicht angezeigt und die API verhält sich so, als hätte der Nutzer seine Einwilligung zur Aktivierung dieser Funktion gegeben.
  • Wenn der Nutzer das Dialogfeld verlässt, wird es geschlossen und die API geht davon aus, dass der Nutzer nicht in die Aktivierung dieser Funktion eingewilligt hat.
  • Wenn Ihre App und eine andere App diese Methode gleichzeitig aufrufen, wird nur ein Dialogfeld angezeigt und alle Apps erhalten von der Methode identische Rückgabewerte.

Liste der potenziell schädlichen installierten Apps

Mit der asynchronen Methode listHarmfulApps() können Sie eine Liste aller bekannten potenziell schädlichen Apps abrufen, die der Nutzer auf seinem Gerät installiert hat. Diese Liste enthält Kategorien für die identifizierten potenziell schädlichen Apps, damit in Ihrer App entsprechende Maßnahmen ergriffen werden können.

Das folgende Code-Snippet zeigt, wie der mit dieser Methode verknüpfte Rückruf erstellt wird:

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