SafetyNet Verify Apps API

Mit der SafetyNet Verify Apps API, einer Bibliothek, die von den Google Play-Diensten unterstützt wird, 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 sich als Ihre App ausgeben 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 eigenen App deaktivieren, um die Gefahr für den Nutzer zu verringern.

Im Rahmen seiner kontinuierlichen Bemühungen, das Android-Ökosystem so sicher wie möglich zu machen, überwacht und analysiert 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. So werden die Sicherheit und der Datenschutz dieser Nutzer geschützt.

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 auffordern, sie zu aktivieren, und potenziell schädliche Apps erkennen, die auf dem Gerät installiert sind.

Zusatzbedingungen

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

Nutzungsbedingungen für die Verify Apps API

Bei der Analyse von Apps, bei der potenziell schädliche Apps identifiziert werden, kann es sowohl zu falsch positiven als auch zu falsch negativen Ergebnissen kommen. Die Ergebnisse (oder das Fehlen von Ergebnissen), die von dieser API-Suite zurückgegeben werden, werden nach bestem Wissen und Gewissen dargestellt. Sie bestätigen und verstehen, dass die von dieser SafetyNet API-Suite zurückgegebenen Ergebnisse nicht immer genau sind.

SafetyNet API-Abhängigkeit hinzufügen

Bevor Sie die Verify Apps API verwenden, müssen Sie die SafetyNet API Ihrem Projekt 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 zum Aktivieren der Funktion „Apps überprüfen“. Mit isVerifyAppsEnabled() können Sie feststellen, ob die App-Überprüfung aktiviert ist, und mit enableVerifyApps() können Sie die Aktivierung der App-Überprüfung beantragen.

Der Unterschied zwischen diesen beiden Methoden besteht darin, dass isVerifyAppsEnabled() den aktuellen Status der Funktion „Apps überprüfen“ meldet, während enableVerifyApps() den Nutzer explizit um die Einwilligung zur Nutzung der Funktion bittet. Wenn Ihre App nur den Status der Funktion kennen muss, um eine sicherheitsrelevante Entscheidung zu treffen, sollte sie isVerifyAppsEnabled() aufrufen. Wenn Sie jedoch sichergehen 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 Methode isVerifyAppsEnabled() kann Ihre App ermitteln, ob der Nutzer für die Funktion „Apps überprüfen“ registriert ist. 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 Aktivierung.

Das folgende Code-Snippet zeigt, wie der mit dieser Methode verknüpfte Callback 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 die Einwilligung zur Aktivierung erteilt 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 können in Ihrer App eine oder mehrere ungewöhnliche Bedingungen auftreten:

  • 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 der Aktivierung dieser Funktion zugestimmt.
  • 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 identische Rückgabewerte von der Methode.

Potenziell schädliche installierte Apps auflisten

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 ermittelten möglicherweise schädlichen Apps, damit Ihre App entsprechende Maßnahmen ergreifen kann.

Das folgende Code-Snippet zeigt, wie der mit dieser Methode verknüpfte Callback 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.");
            }
        }
    });