Interfejs API Bezpieczne przeglądanie w ramach SafetyNet

Interfejs API Bezpieczne przeglądanie SafetyNet to biblioteka obsługiwana przez Usługi Google Play, która umożliwia określenie, czy adres URL został oznaczony przez Google jako znane zagrożenie.

Aplikacja może używać tego interfejsu API do określenia, czy dany adres URL został sklasyfikowany przez Google jako znane zagrożenie. Wewnętrznie SafetyNet wdraża klienta dla protokołu sieciowego Bezpiecznego przeglądania w wersji 4 opracowanego przez Google. Zarówno kod klienta, jak i protokół sieciowy v4 zostały zaprojektowane tak, aby chronić prywatność użytkowników i minimalizować zużycie baterii oraz przepustowości. Używaj tego interfejsu API, aby w pełni korzystać z usługi Bezpieczne przeglądanie Google na Androidzie w najbardziej zoptymalizowany pod kątem zasobów sposób, bez konieczności wdrażania protokołu sieciowego.

Z tego dokumentu dowiesz się, jak używać interfejsu SafetyNet Safe Browsing Lookup API do sprawdzania adresów URL pod kątem znanych zagrożeń.

Warunki usługi

Korzystając z interfejsu Safe Browsing API, Użytkownik akceptuje Warunki korzystania z usługi. Zanim uzyskasz dostęp do interfejsu Safe Browsing API, przeczytaj i zapoznaj się ze wszystkimi obowiązującymi warunkami i zasadami.

Prośba o klucz interfejsu API Androida i jego rejestracja

Zanim użyjesz interfejsu API Bezpiecznego przeglądania, utwórz i zarejestruj klucz interfejsu API na Androida. Szczegółowe instrukcje znajdziesz na stronie Pierwsze kroki z Bezpiecznym przeglądaniem.

Dodaj zależność SafetyNet API

Zanim zaczniesz korzystać z interfejsu Safe Browsing 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 o ochronie przed zagrożeniami bezpieczeństwa przy użyciu SafetyNet.

Inicjowanie interfejsu API

Aby korzystać z interfejsu Safe Browsing API, musisz zainicjować ten interfejs API, wywołując metodę initSafeBrowsing() i zaczekując na jego zakończenie. Oto przykład:

Kotlin

Tasks.await(SafetyNet.getClient(this).initSafeBrowsing())

Java

Tasks.await(SafetyNet.getClient(this).initSafeBrowsing());

Poproś o sprawdzenie adresu URL

Aplikacja może sprawdzić adres URL, aby określić, czy stwarza ono znane zagrożenie. Niektóre typy zagrożeń mogą nie być istotne dla Twojej aplikacji. Interfejs API pozwala wybrać typy zagrożeń, które są dla Ciebie ważne. Możesz podać kilka znanych typów zagrożeń.

Wysyłanie prośby o sprawdzenie adresu URL

Interfejs API nie zależy od używanego schematu, więc możesz przekazać adres URL ze schematem lub bez niego. Na przykład:

Kotlin

var url = "https://www.google.com"

Java

String url = "https://www.google.com";

i

Kotlin

var url = "www.google.com"

Java

String url = "www.google.com";

są prawidłowe.

Ten kod pokazuje, jak wysłać żądanie sprawdzenia adresu URL:

Kotlin

SafetyNet.getClient(this).lookupUri(
       url,
       SAFE_BROWSING_API_KEY,
       SafeBrowsingThreat.TYPE_POTENTIALLY_HARMFUL_APPLICATION,
       SafeBrowsingThreat.TYPE_SOCIAL_ENGINEERING
)
       .addOnSuccessListener(this) { sbResponse ->
           // Indicates communication with the service was successful.
           // Identify any detected threats.
           if (sbResponse.detectedThreats.isEmpty()) {
               // No threats found.
           } else {
               // Threats found!
           }
       }
       .addOnFailureListener(this) { e: Exception ->
           if (e is ApiException) {
               // An error with the Google Play Services API contains some
               // additional details.
               Log.d(TAG, "Error: ${CommonStatusCodes.getStatusCodeString(e.statusCode)}")

               // Note: If the status code, s.statusCode,
               // is SafetyNetStatusCode.SAFE_BROWSING_API_NOT_INITIALIZED,
               // you need to call initSafeBrowsing(). It means either you
               // haven't called initSafeBrowsing() before or that it needs
               // to be called again due to an internal error.
           } else {
               // A different, unknown type of error occurred.
               Log.d(TAG, "Error: ${e.message}")
           }
       }

Java

SafetyNet.getClient(this).lookupUri(url,
         SAFE_BROWSING_API_KEY,
         SafeBrowsingThreat.TYPE_POTENTIALLY_HARMFUL_APPLICATION,
         SafeBrowsingThreat.TYPE_SOCIAL_ENGINEERING)
   .addOnSuccessListener(this,
       new OnSuccessListener<SafetyNetApi.SafeBrowsingResponse>() {
           @Override
           public void onSuccess(SafetyNetApi.SafeBrowsingResponse sbResponse) {
               // Indicates communication with the service was successful.
               // Identify any detected threats.
               if (sbResponse.getDetectedThreats().isEmpty()) {
                   // No threats found.
               } else {
                   // Threats found!
               }
        }
   })
   .addOnFailureListener(this, new OnFailureListener() {
           @Override
           public void onFailure(@NonNull Exception e) {
               // An error occurred while communicating with the service.
               if (e instanceof ApiException) {
                   // An error with the Google Play Services API contains some
                   // additional details.
                   ApiException apiException = (ApiException) e;
                   Log.d(TAG, "Error: " + CommonStatusCodes
                       .getStatusCodeString(apiException.getStatusCode()));

                   // Note: If the status code, apiException.getStatusCode(),
                   // is SafetyNetStatusCode.SAFE_BROWSING_API_NOT_INITIALIZED,
                   // you need to call initSafeBrowsing(). It means either you
                   // haven't called initSafeBrowsing() before or that it needs
                   // to be called again due to an internal error.
               } else {
                   // A different, unknown type of error occurred.
                   Log.d(TAG, "Error: " + e.getMessage());
               }
           }
   });

Czytanie odpowiedzi na sprawdzenie adresu URL

Korzystając z zwróconego obiektu SafetyNetApi.SafeBrowsingResponse, wywołaj jego metodę getDetectedThreats(), która zwraca listę obiektów SafeBrowsingThreat. Jeśli zwrócona lista jest pusta, oznacza to, że interfejs API nie wykrył żadnych znanych zagrożeń. Jeśli lista nie jest pusta, wywołaj funkcję getThreatType() dla każdego elementu na liście, aby określić, które znane zagrożenia wykrył interfejs API.

Sugerowany język ostrzeżeń znajdziesz w Przewodniku dla deweloperów interfejsu Safe Browsing API.

Określ interesujące Cię typy zagrożeń

Stałe w klasie SafeBrowsingThreat zawierają obecnie obsługiwane typy zagrożeń:

Typ zagrożenia Definicja
TYPE_POTENTIALLY_HARMFUL_APPLICATION Ten typ zagrożenia identyfikuje adresy URL stron oznaczonych jako zawierające potencjalnie szkodliwe aplikacje.
TYPE_SOCIAL_ENGINEERING Ten typ zagrożenia identyfikuje adresy URL stron oznaczonych jako zawierające zagrożenia socjotechniki.

Podczas korzystania z interfejsu API należy dodać stałe typu zagrożenia jako argumenty. Możesz dodać tyle stałych typów zagrożeń, ile wymaga Twoja aplikacja, ale możesz używać tylko tych stałych, które nie są oznaczone jako wycofane.

Zamykanie sesji Bezpiecznego przeglądania

Jeśli aplikacja nie musi używać interfejsu Bezpieczne przeglądanie przez dłuższy czas, sprawdź jej wszystkie niezbędne adresy URL, a następnie wyłącz sesję Bezpiecznego przeglądania, korzystając z metody shutdownSafeBrowsing():

Kotlin

SafetyNet.getClient(this).shutdownSafeBrowsing()

Java

SafetyNet.getClient(this).shutdownSafeBrowsing();

Zalecamy wywołanie funkcji shutdownSafeBrowsing() w metodzie onPause() aktywności oraz wywołanie funkcji initSafeBrowsing() w metodzie onResume() aktywności. Zanim wywołasz funkcję lookupUri(), upewnij się, że funkcja initSafeBrowsing() została już wykonana. Dbając o to, aby sesja była zawsze aktualna, zmniejszasz prawdopodobieństwo wystąpienia błędów wewnętrznych w aplikacji.

Dane zbierane przez interfejs API Bezpiecznego przeglądania SafetyNet

Interfejs SafetyNet Safe Browsing API zbiera automatycznie te dane podczas komunikacji z usługą Bezpieczne przeglądanie na Androidzie:

Dane Opis
Aktywność w aplikacji Zbiera prefiks skrótu adresów URL po dopasowaniu lokalnego prefiksu skrótu do wykrywania złośliwych adresów URL.

Dążymy do jak największej przejrzystości, ale to Ty ponosisz wyłączną odpowiedzialność za decyzje związane z formularzem Bezpieczeństwo danych w Google Play dotyczące zbierania, udostępniania i zabezpieczania danych użytkowników przez Twoją aplikację.