Google Play Hizmetleri tarafından desteklenen bir kitaplık olan SafetyNet Verify Apps API, uygulamanızın bir cihazdaki Uygulamaları Doğrula özelliğiyle programatik olarak etkileşime girmesini sağlayarak cihazınızı potansiyel zararlı uygulamalara karşı korur.
Uygulamanız finansal bilgiler gibi hassas kullanıcı verilerini işliyorsa kullanıcının cihazının kötü amaçlı uygulamalara karşı korunduğunu ve uygulamanızın kimliğine bürünebilecek veya başka kötü amaçlı işlemler gerçekleştirebilecek uygulamaların cihazda bulunmadığını doğrulamanız önemlidir. Cihazın güvenliği minimum güvenlik durumunu karşılamıyorsa kullanıcının karşı karşıya olduğu tehlikeyi azaltmak için kendi uygulamanızdaki işlevleri devre dışı bırakabilirsiniz.
Android ekosistemini olabildiğince güvenli hale getirme konusundaki kararlılığının bir parçası olarak Google, Android uygulamalarının davranışını izler ve profilleri gösterir. Uygulama Doğrulama özelliği, tehlikeli olabilecek bir uygulama tespit ederse uygulamayı yükleyen tüm kullanıcılara bildirim gönderilir ve uygulamayı hemen kaldırmaları istenir. Bu işlem, söz konusu kullanıcıların güvenliğini ve gizliliğini korur.
SafetyNet Verify Apps API, uygulamanızın verilerini korumak için bu özellikten yararlanmanıza olanak tanır. Bu API'yi kullanarak kullanıcının cihazının Uygulama Doğrulama özelliğiyle korunup korunmadığını belirleyebilir, özelliği kullanmayan kullanıcıları bu korumadan yararlanmaya teşvik edebilir ve cihaza yüklenmiş bilinen potansiyel zararlı uygulamaları tanımlayabilirsiniz.
Ek hizmet şartları
SafetyNet API'lerini kullanarak Google API'leri Hizmet Şartları'nı ve aşağıdaki Verify Apps API Hizmet Şartları'nı kabul etmiş olursunuz. API'lere erişmeden önce lütfen geçerli tüm şartları ve politikaları okuyup anlayın.
Verify Apps API Hizmet Şartları
Zararlı olabilecek uygulamaları tespit eden uygulamalara yönelik analizler hem yanlış pozitif hem de yanlış negatif sonuçlar verebilir. Bu API paketinden döndürülen sonuçlar (veya yokluğu) bilgimiz dahilinde sunulur. Bu SafetyNet API paketi tarafından döndürülen sonuçların her zaman doğru olacağının garanti edilmediğini kabul ve beyan edersiniz.SafetyNet API bağımlılığını ekleme
Verify Apps API'yi kullanmadan önce SafetyNet API'yi projenize ekleyin. Android Studio kullanıyorsanız bu bağımlılığı uygulama düzeyindeki Gradle dosyanıza ekleyin. Daha fazla bilgi için SafetyNet API kurulumu başlıklı makaleyi inceleyin.
Uygulama doğrulamayı etkinleştirme
SafetyNet Uygulamaları Doğrulama API'si, Uygulamaları Doğrulama özelliğini etkinleştirmek için iki yöntem sunar. Uygulama doğrulamanın etkinleştirilip etkinleştirilmediğini isVerifyAppsEnabled()
kullanarak belirleyebilir ve enableVerifyApps()
kullanarak uygulama doğrulamanın etkinleştirilmesini isteyebilirsiniz.
Bu iki yöntem arasındaki fark, isVerifyAppsEnabled()
'ün Uygulamaları Doğrula özelliğinin mevcut durumunu bildirmesi, enableVerifyApps()
'ün ise kullanıcıdan özelliği kullanma iznini açıkça istemesidir. Uygulamanızın, güvenlik odaklı bir karar vermek için yalnızca özelliğin durumundan haberdar olmasını istiyorsanız uygulamanız isVerifyAppsEnabled()
işlevini çağırmalıdır. Ancak, uygulamanızın yüklü zararlı olabilecek uygulamaları listeleyebildiğinden emin olmak istiyorsanız bunun yerine enableVerifyApps()
işlevini çağırmanız gerekir.
Uygulama doğrulamanın etkin olup olmadığını belirleme
Eşzamansız isVerifyAppsEnabled()
yöntemi, uygulamanızın, kullanıcının Uygulama Doğrulama özelliğine kayıtlı olup olmadığını belirlemesine olanak tanır. Bu yöntem, kullanıcının Uygulamaları Doğrula özelliğiyle ilgili olarak gerçekleştirdiği tüm işlemlerle (etkinleştirme dahil) ilgili bilgileri içeren bir VerifyAppsUserResponse
nesnesi döndürür.
Aşağıdaki kod snippet'inde, bu yöntemle ilişkili geri çağırma işlevinin nasıl oluşturulacağı gösterilmektedir:
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."); } } });
Uygulama doğrulamasının etkinleştirilmesini isteme
Asenkron enableVerifyApps()
yöntemi, uygulamanızın kullanıcıdan Uygulama Doğrulama özelliğini etkinleştirmesini isteyen bir iletişim kutusu çağırmasına olanak tanır. Bu yöntem, kullanıcının Uygulama Doğrulama özelliğiyle ilgili gerçekleştirdiği tüm işlemlerle ilgili bilgileri (etkinleştirmek için izin verip vermediği dahil) içeren bir VerifyAppsUserResponse
nesnesi döndürür.
Aşağıdaki kod snippet'i, bu yöntemle ilişkili geri çağırmanın nasıl oluşturulacağını gösterir:
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."); } } });
Uygulamanız bu yöntemi kullanırken bir veya daha fazla olağan dışı durumla karşılaşabilir:
- Uygulamaları Doğrula özelliği zaten etkinse iletişim kutusu görünmez ve API, kullanıcı bu özelliği etkinleştirmek için izin vermiş gibi davranır.
- Kullanıcı iletişim kutusundan uzaklaşırsa iletişim kutusu yok edilir ve API, kullanıcının bu özelliği etkinleştirmek için izin vermediğini varsayar.
- Uygulamanız ve başka bir uygulama bu yöntemi aynı anda çağırırsa yalnızca bir iletişim kutusu görünür ve tüm uygulamalar yöntemden aynı döndürülen değerleri alır.
Yüklü olan ve zararlı olabilecek uygulamaların listesini görüntüleme
Eşzamansız listHarmfulApps()
yöntemi, kullanıcının cihazına yüklediği bilinen, zararlı olabilecek tüm uygulamaların bir listesini almanıza olanak tanır. Bu listede, uygulamanızın uygun işlemleri yapabilmesi için tanımlanan potansiyel olarak zararlı uygulamaların kategorileri yer alır.
Aşağıdaki kod snippet'inde, bu yöntemle ilişkili geri çağırma işlevinin nasıl oluşturulacağı gösterilmektedir:
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."); } } });