Google berkomitmen untuk mendorong terwujudnya keadilan rasial bagi komunitas Kulit Hitam. Lihat caranya.

SafetyNet Verify Apps API

SafetyNet Verify Apps API memungkinkan aplikasi Anda berinteraksi secara terprogram dengan fitur Verify Apps di perangkat, sehingga melindungi perangkat dari aplikasi yang berpotensi membahayakan.

Jika aplikasi Anda menangani data pengguna yang sensitif, seperti informasi keuangan, sebaiknya pastikan bahwa perangkat terlindungi dari aplikasi berbahaya dan bebas dari aplikasi yang mungkin meniru identitas atau melakukan tindakan jahat lainnya. Jika keamanan perangkat tidak memenuhi persyaratan keamanan minimum, Anda dapat menonaktifkan fungsionalitas dalam aplikasi Anda sendiri untuk mengurangi bahaya bagi pengguna.

Sebagai bagian dari komitmen berkelanjutan untuk menjadikan ekosistem Android seaman mungkin, Google memantau dan memprofilkan perilaku aplikasi Android. Jika fitur Verifikasi Aplikasi mendeteksi aplikasi yang berpotensi membahayakan, semua pengguna yang telah menginstal aplikasi tersebut akan diberi tahu dan disarankan untuk segera meng-uninstal aplikasi. Proses ini melindungi keamanan dan privasi pengguna tersebut.

SafetyNet Verify Apps API memungkinkan Anda memanfaatkan fitur ini untuk melindungi data aplikasi. Dengan API ini, Anda dapat menentukan apakah perangkat pengguna dilindungi oleh fitur Verifikasi Aplikasi, mendorong pengguna yang belum menggunakan fitur ini untuk mengaktifkan perlindungannya, dan mengidentifikasi aplikasi apa pun yang berpotensi membahayakan yang terinstal di perangkat.

Perhatian: Meskipun SafetyNet memberi tahu pengguna tentang aplikasi yang berpotensi membahayakan, sebagian pengguna memilih untuk tidak meng-uninstal aplikasi ini, atau mereka tidak melihat notifikasi peringatan. Oleh karena itu, perangkat mungkin menginstal aplikasi yang berpotensi membahayakan, meskipun fitur Verifikasi Aplikasi diaktifkan.

Persyaratan layanan tambahan

Dengan mengakses atau menggunakan SafetyNet API, Anda menyetujui Persyaratan Layanan Google API, dan Persyaratan Tambahan berikut. Harap baca dan pahami semua persyaratan dan kebijakan yang berlaku sebelum mengakses API.

Persyaratan Layanan Verify Apps API

Analisis aplikasi yang mengidentifikasi aplikasi berpotensi membahayakan dapat menghasilkan positif palsu (PP) dan negatif palsu (NP). Hasil (atau ketiadaan hasil) dari rangkaian API ini disajikan sesuai dengan pemahaman terbaik kami. Anda menerima dan memahami bahwa hasil yang ditampilkan oleh SafetyNet API ini tidak dijamin akurat sepanjang waktu.

Mengaktifkan verifikasi aplikasi

SafetyNet Verify Apps API menyediakan dua metode untuk mengaktifkan fitur Verifikasi Aplikasi. Anda dapat menentukan apakah verifikasi aplikasi diaktifkan atau tidak menggunakan isVerifyAppsEnabled(), dan Anda dapat meminta pengaktifan verifikasi aplikasi menggunakan enableVerifyApps().

Perbedaan antara kedua metode ini adalah sementara isVerifyAppsEnabled() melaporkan status saat ini dari fitur Verifikasi Aplikasi, enableVerifyApps() secara eksplisit meminta persetujuan pengguna untuk menggunakan fitur tersebut. Jika Anda ingin aplikasi Anda sekadar mengenali status fitur ini untuk membuat keputusan yang didasarkan pada keamanan, sebaiknya aplikasi Anda memanggil isVerifyAppsEnabled(). Namun, jika Anda ingin memastikan bahwa aplikasi dapat mencantumkan aplikasi yang berpotensi membahayakan, sebaiknya panggil enableVerifyApps() saja.

Menentukan apakah verifikasi aplikasi diaktifkan atau tidak

Metode isVerifyAppsEnabled() asinkron memungkinkan aplikasi Anda menentukan apakah pengguna terdaftar dalam fitur Verifikasi Aplikasi. Metode ini menampilkan objek VerifyAppsUserResult, yang berisi informasi mengenai semua tindakan yang telah diambil pengguna terkait dengan fitur Verifikasi Aplikasi, termasuk mengaktifkannya.

Cuplikan kode berikut menunjukkan cara membuat callback yang terkait dengan metode ini:

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

Meminta pengaktifan verifikasi aplikasi

Metode enableVerifyApps() asinkron memungkinkan aplikasi Anda memanggil dialog yang meminta pengguna mengaktifkan fitur Verifikasi Aplikasi Metode ini menampilkan objek VerifyAppsUserResult, yang berisi informasi mengenai semua tindakan yang telah diambil pengguna terkait dengan fitur Verifikasi Aplikasi, termasuk apakah mereka telah memberikan izin untuk mengaktifkannya.

Cuplikan kode berikut menunjukkan cara membuat callback yang terkait dengan metode ini:

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

Aplikasi Anda dapat mengalami beberapa corner case saat menggunakan metode ini:

  • Jika fitur Verifikasi Aplikasi sudah diaktifkan, dialog tidak akan ditampilkan, dan API berperilaku seolah-olah pengguna memberikan izin untuk mengaktifkan fitur ini.
  • Jika pengguna menutup dialog, dialog akan dihapus, dan API berasumsi bahwa pengguna tidak memberikan izin untuk mengaktifkan fitur ini.
  • Jika aplikasi Anda dan aplikasi lain memanggil metode ini secara bersamaan, hanya satu dialog yang ditampilkan, dan semua aplikasi menerima nilai kembalian yang identik dari metode.

Membuat daftar aplikasi yang berpotensi membahayakan

Metode listHarmfulApps() asinkron memungkinkan Anda mendapatkan daftar aplikasi berpotensi membahayakan yang sudah diketahui, yang diinstal pengguna di perangkatnya. Daftar ini mencakup kategori untuk aplikasi berpotensi membahayakan yang telah diidentifikasi sehingga aplikasi Anda dapat mengambil tindakan yang tepat.

Cuplikan kode berikut menunjukkan cara membuat callback yang terkait dengan metode ini:

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