SafetyNet Verify Apps API ซึ่งเป็นไลบรารีที่ขับเคลื่อนโดย บริการ Google Play จะช่วยให้แอปของคุณโต้ตอบกับฟีเจอร์ตรวจสอบแอปในอุปกรณ์แบบเป็นโปรแกรมได้ ซึ่งจะช่วยปกป้องอุปกรณ์จากแอปที่อาจเป็นอันตราย
หากแอปของคุณจัดการข้อมูลที่ละเอียดอ่อนของผู้ใช้ เช่น ข้อมูลทางการเงิน คุณควรตรวจสอบว่าอุปกรณ์ของผู้ใช้ได้รับการปกป้องจากแอปที่เป็นอันตรายและไม่มีแอปที่อาจแอบอ้างเป็นแอปของคุณหรือดําเนินการอื่นๆ ที่อาจเป็นอันตราย หากการรักษาความปลอดภัยของอุปกรณ์ไม่ตรงตามระดับความปลอดภัยขั้นต่ำ คุณสามารถปิดฟังก์ชันการทำงานภายในแอปของตนเองเพื่อลดอันตรายต่อผู้ใช้
Google ตรวจสอบและสร้างโปรไฟล์พฤติกรรมของแอป Android เพื่อเป็นส่วนหนึ่งของความมุ่งมั่นอย่างต่อเนื่องที่จะทำให้ระบบนิเวศ Android ปลอดภัยมากที่สุด หากฟีเจอร์ยืนยันแอปตรวจพบแอปที่อาจเป็นอันตราย ระบบจะแจ้งเตือนผู้ใช้ทุกคนที่ติดตั้งแอปดังกล่าวและแนะนำให้ผู้ใช้ถอนการติดตั้งแอปโดยทันที กระบวนการนี้ช่วยปกป้องความปลอดภัยและความเป็นส่วนตัวของผู้ใช้เหล่านี้
SafetyNet Verify Apps API ช่วยให้คุณใช้ประโยชน์จากฟีเจอร์นี้เพื่อปกป้องข้อมูลของแอปได้ เมื่อใช้ API นี้ คุณจะระบุได้ว่าอุปกรณ์ของผู้ใช้ได้รับการปกป้องโดยฟีเจอร์ยืนยันแอปหรือไม่ กระตุ้นให้ผู้ใช้ที่ไม่ได้ใช้ฟีเจอร์นี้เลือกใช้การปกป้อง และระบุแอปที่อาจเป็นอันตรายซึ่งติดตั้งอยู่ในอุปกรณ์
ข้อกำหนดในการให้บริการเพิ่มเติม
การเข้าถึงหรือใช้ SafetyNet API หมายความว่าคุณยอมรับข้อกำหนดในการให้บริการของ Google APIs และข้อกำหนดในการให้บริการ Verify Apps API ต่อไปนี้ โปรดอ่านและทำความเข้าใจข้อกำหนดและนโยบายที่เกี่ยวข้องทั้งหมดก่อนเข้าถึง API
ข้อกำหนดในการให้บริการของ Verify Apps API
การวิเคราะห์แอปที่ระบุแอปที่อาจเป็นอันตรายอาจให้ผลลัพธ์ทั้งบวกเท็จและลบเท็จ ผลลัพธ์ (หรือไม่มี) ที่แสดงจากชุด API นี้จะแสดงตามความเข้าใจของเรา คุณรับทราบและเข้าใจว่าผลลัพธ์ที่ชุด SafetyNet API แสดงนั้นไม่รับประกันว่าถูกต้องเสมอไปเพิ่มข้อกําหนดของ SafetyNet API
ก่อนใช้ Verify Apps API ให้เพิ่ม SafetyNet API ลงในโปรเจ็กต์ หากคุณใช้ Android Studio ให้เพิ่มทรัพยากร Dependency นี้ลงในไฟล์ Gradle ระดับแอป ดูข้อมูลเพิ่มเติมได้ที่การตั้งค่า SafetyNet API
เปิดใช้การตรวจสอบแอป
SafetyNet Verify Apps API มี 2 วิธีในการเปิดใช้ฟีเจอร์ Verify Apps คุณสามารถตรวจสอบว่าเปิดใช้การยืนยันแอปหรือไม่โดยใช้ isVerifyAppsEnabled()
และขอเปิดใช้การยืนยันแอปได้โดยใช้ enableVerifyApps()
ความแตกต่างระหว่าง 2 วิธีการนี้คือ แม้ว่า isVerifyAppsEnabled()
จะรายงานสถานะปัจจุบันของฟีเจอร์ยืนยันแอป แต่ enableVerifyApps()
จะขอความยินยอมจากผู้ใช้อย่างชัดแจ้งเพื่อใช้ฟีเจอร์นี้ หากคุณต้องการให้แอปทราบถึงสถานะของฟีเจอร์เพื่อทำการตัดสินใจด้านความปลอดภัย แอปควรโทรหา isVerifyAppsEnabled()
อย่างไรก็ตาม หากต้องการแน่ใจว่าแอปจะแสดงรายการแอปที่ติดตั้งไว้ซึ่งอาจเป็นอันตรายได้ คุณควรเรียกใช้ enableVerifyApps()
แทน
ตรวจสอบว่าได้เปิดใช้การตรวจสอบแอปหรือไม่
วิธีการ isVerifyAppsEnabled()
แบบแอซิงโครนัสช่วยให้แอปของคุณระบุได้ว่าผู้ใช้ลงทะเบียนในฟีเจอร์ยืนยันแอปหรือไม่ เมธอดนี้จะแสดงผลออบเจ็กต์ VerifyAppsUserResponse
ซึ่งมีข้อมูลเกี่ยวกับการดำเนินการทั้งหมดที่ผู้ใช้ดำเนินการกับฟีเจอร์ยืนยันแอป รวมถึงการเปิดใช้
ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างการเรียกกลับที่เชื่อมโยงกับเมธอดนี้
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."); } } });
ขอเปิดใช้การตรวจสอบแอป
เมธอด enableVerifyApps()
แบบแอซิงโครนัสช่วยให้แอปเรียกใช้กล่องโต้ตอบเพื่อขอให้ผู้ใช้เปิดใช้ฟีเจอร์ตรวจสอบแอปได้ เมธอดนี้จะแสดงผลออบเจ็กต์ VerifyAppsUserResponse
ซึ่งมีข้อมูลเกี่ยวกับการดำเนินการทั้งหมดที่ผู้ใช้ดำเนินการกับฟีเจอร์ยืนยันแอป รวมถึงข้อมูลว่าผู้ใช้ให้ความยินยอมให้เปิดใช้ฟีเจอร์หรือไม่
ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างการเรียกกลับที่เชื่อมโยงกับเมธอดนี้
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."); } } });
แอปของคุณอาจพบเงื่อนไขที่ผิดปกติอย่างน้อย 1 ข้อเมื่อใช้วิธีการนี้
- หากฟีเจอร์ยืนยันแอปเปิดอยู่แล้ว กล่องโต้ตอบจะไม่ปรากฏ และ API จะทำงานเสมือนว่าผู้ใช้ให้ความยินยอมในการเปิดใช้ฟีเจอร์นี้
- หากผู้ใช้ออกจากกล่องโต้ตอบ ระบบจะปิดกล่องโต้ตอบนั้นและ API จะถือว่าผู้ใช้ไม่ได้ให้ความยินยอมในการเปิดใช้ฟีเจอร์นี้
- หากแอปของคุณและแอปอื่นเรียกใช้เมธอดนี้พร้อมกัน จะมีเพียงกล่องโต้ตอบเดียวปรากฏขึ้น และแอปทั้งหมดจะได้รับผลลัพธ์ที่เหมือนกันจากเมธอด
แสดงรายการแอปที่ติดตั้งไว้ซึ่งอาจเป็นอันตราย
เมธอดแบบแอซิงโครนัส listHarmfulApps()
ช่วยให้คุณดูรายการแอปที่อาจเป็นอันตรายซึ่งผู้ใช้ติดตั้งไว้ในอุปกรณ์ได้ รายการนี้ประกอบด้วยหมวดหมู่ของแอปที่อาจเป็นอันตรายซึ่งระบุไว้เพื่อให้แอปของคุณดำเนินการตามความเหมาะสม
ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้าง Callback ที่เชื่อมโยงกับเมธอดนี้
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."); } } });