เพิ่มการตรวจสอบลายนิ้วมือไปยังแอปของคุณโดยใช้ BiometricPrompt

ผู้เขียน: Lewis Jackson
วันที่สร้าง: 13 พฤษภาคม 2021
วันที่อัปเดต: 1 กรกฎาคม 2024
Anonim
Add Fingerprint Authentication to WhatsApp on Android devices!
วิดีโอ: Add Fingerprint Authentication to WhatsApp on Android devices!

เนื้อหา


ลองใช้ BiometricPrompt API เพื่อสร้างแอปที่จะอนุญาตให้ผู้ใช้ยืนยันตัวตนโดยใช้ลายนิ้วมือ

เปิด Android Studio และสร้างโครงการใหม่โดยใช้เทมเพลต“ กิจกรรมที่ว่างเปล่า” เมื่อได้รับแจ้งให้ตั้งค่า SDK ขั้นต่ำของโครงการเป็น 28 หรือสูงกว่าเนื่องจากจะเป็นการป้องกันไม่ให้ติดตั้งแอปพลิเคชันของคุณในสิ่งใด ๆ ที่เร็วกว่า Android Pie

หากคุณต้องการให้แอปพลิเคชันของคุณเข้าถึงอุปกรณ์ Android ได้ในวงกว้างคุณต้องตรวจสอบว่าแอปพลิเคชันของคุณติดตั้งแอนดรอยด์รุ่นใดในปัจจุบันจากนั้นจัดการการรับรองความถูกต้องทางไบโอเมตริกซ์

เพิ่มไลบรารีไบโอเมตริกซ์

ในการเริ่มต้นให้เปิดไฟล์ build.gradle ในระดับโมดูลของคุณและเพิ่มไลบรารี Biometric เวอร์ชันล่าสุดเป็นการพึ่งพาโครงการ:

การพึ่งพา {การนำระบบ androidx.biometric: biometric: 1.0.0-alpha03

เพิ่มสิทธิ์ USE_BIOMETRIC

BiometricPrompt API ช่วยให้คุณสามารถใช้วิธีการตรวจสอบความถูกต้องทางชีวภาพที่แตกต่างกันทั้งหมดที่อุปกรณ์รองรับผ่านการอนุญาตเพียงครั้งเดียว

เปิดรายการของโครงการและเพิ่มสิทธิ์“ USE_BIOMETRIC”:


สร้างเลย์เอาต์ของแอปพลิเคชันของคุณ

ต่อไปมาสร้างเค้าโครงของแอปพลิเคชันของเรา ฉันจะเพิ่มปุ่มเดียวซึ่งเมื่อแตะจะเปิดใช้กล่องโต้ตอบการตรวจสอบลายนิ้วมือ:

เปิดไฟล์ strings.xml ของโครงการของคุณและเพิ่มทรัพยากรสตริง“ auth”:

BiometricPromptSample รับรองความถูกต้องด้วยลายนิ้วมือ

ตรวจสอบตัวตนของผู้ใช้

ทีนี้มาดูกันว่าคุณจะรับรองความเป็นตัวตนของผู้ใช้โดยใช้ BiometricPrompt อย่างไร


สร้างอินสแตนซ์พรอมต์ไบโอเมตริกซ์

คลาส BiometricPrompt มีคลาส Builder () ซึ่งคุณสามารถใช้เพื่อสร้างอินสแตนซ์ BiometricPrompt และเริ่มต้นการตรวจสอบสิทธิ์:

สุดท้าย BiometricPrompt.PromptInfo promptInfo = ใหม่ BiometricPrompt.PromptInfo.Builder ()

เมื่อสร้างอินสแตนซ์ BiometricPrompt ของคุณคุณจะต้องกำหนดข้อความที่ควรปรากฏในกล่องโต้ตอบการตรวจสอบสิทธิ์และกำหนด "ปุ่มลบ" ซึ่งเป็นปุ่มที่อนุญาตให้ผู้ใช้ยกเลิกการรับรองความถูกต้อง

ในการกำหนดค่ากล่องโต้ตอบการตรวจสอบสิทธิ์คุณจะต้องระบุสิ่งต่อไปนี้:

  • setTitle ชื่อของพรอมต์ตรวจสอบลายนิ้วมือ (จำเป็น)
  • setSubtitle คำบรรยายของพรอมต์การตรวจสอบลายนิ้วมือ (ไม่จำเป็น)
  • setDescription คำอธิบายเพิ่มเติมที่จะปรากฏในช่องโต้ตอบการตรวจสอบสิทธิ์ของคุณ (ไม่จำเป็น)
  • setNegativeButton (text, executor, listener) นี่คือป้ายกำกับของปุ่มลบเช่น "ยกเลิก" หรือ "ออกจาก" เมื่อกำหนดค่าปุ่มลบคุณจะต้องระบุอินสแตนซ์ผู้บริหารและ OnClickListener เพื่อให้ผู้ใช้สามารถปิดกล่องโต้ตอบการตรวจสอบสิทธิ์

ในขณะที่เขียนเป็นไปไม่ได้ที่จะปรับแต่งไอคอนหรือข้อผิดพลาดที่ใช้ในกล่องโต้ตอบการตรวจสอบสิทธิ์

สุดท้ายคุณจะต้องเรียก build () สิ่งนี้ทำให้เรามีดังต่อไปนี้:

สุดท้าย BiometricPrompt.PromptInfo promptInfo = ใหม่ BiometricPrompt.PromptInfo.Builder () .setTitle ("ข้อความหัวข้อไปที่นี่") .setSubtitle ("คำบรรยายไปที่นี่") .setDescription ("นี่คือคำอธิบาย") .สร้าง();

จัดการการเรียกกลับการรับรองความถูกต้อง

อินสแตนซ์ BiometricPrompt ได้รับการกำหนดชุดวิธีการตรวจสอบกลับที่จะแจ้งให้แอปของคุณทราบเกี่ยวกับผลลัพธ์ของกระบวนการตรวจสอบสิทธิ์

คุณจะต้องรวมการโทรกลับทั้งหมดในอินสแตนซ์ของคลาส BiometricPrompt.AuthenticationCallback:

final BiometricPrompt myBiometricPrompt = new BiometricPrompt (กิจกรรม, newExecutor, ใหม่ BiometricPrompt.AuthenticationCallback () {

ขั้นตอนต่อไปคือการนำบางส่วนหรือทั้งหมดของวิธีการโทรกลับต่อไปนี้:

1. onAuthenticationSucceeded ()

วิธีการนี้เรียกว่าเมื่อมีการจับคู่ลายนิ้วมือกับหนึ่งในลายนิ้วมือที่ลงทะเบียนบนอุปกรณ์เรียบร้อยแล้ว ในสถานการณ์สมมตินี้วัตถุ AuthenticationResult ถูกส่งผ่านไปยังการติดต่อกลับ onAuthenticationSucceeded จากนั้นแอปของคุณจะดำเนินงานตามการรับรองความถูกต้องที่สำเร็จ

เพื่อช่วยให้สิ่งต่าง ๆ เรียบง่ายแอพของเราจะตอบสนองโดยการพิมพ์ Logcat ของ Android Studio:

@Override โมฆะสาธารณะ onAuthenticationSucceeded (@NonNull BiometricPrompt.AuthenticationResult ผล) {super.onAuthenticationSucceeded (ผลลัพธ์); Log.d (TAG, "จดจำลายนิ้วมือได้สำเร็จ"); }

2. onAuthenticationFailed ()

วิธีการนี้จะถูกเรียกใช้เมื่อการสแกนเสร็จสมบูรณ์ แต่ลายนิ้วมือไม่ตรงกับงานพิมพ์ใด ๆ ที่ลงทะเบียนไว้ในอุปกรณ์ แอปของเราจะตอบสนองต่อเหตุการณ์การตรวจสอบความถูกต้องนี้อีกครั้งโดยพิมพ์ a ไปที่ Logcat:

@Override โมฆะสาธารณะ onAuthenticationFailed () {super.onAuthenticationFailed (); Log.d (TAG, "ไม่รู้จักลายนิ้วมือ"); }

3. onAuthenticationError

การเรียกกลับนี้จะถูกเรียกใช้ทุกครั้งที่เกิดข้อผิดพลาดที่ไม่สามารถกู้คืนได้และการตรวจสอบความถูกต้องไม่เสร็จสมบูรณ์ ตัวอย่างเช่นบางทีเซ็นเซอร์สัมผัสของอุปกรณ์ปกคลุมด้วยฝุ่นหรือไขมันผู้ใช้ไม่ได้ลงทะเบียนลายนิ้วมือบนอุปกรณ์นี้หรือมีหน่วยความจำไม่เพียงพอที่จะทำการสแกนไบโอเมตริกซ์แบบเต็ม

นี่คือรหัสที่ฉันจะใช้ในแอปของฉัน:

@Override โมฆะสาธารณะ onAuthenticationError (int errorCode, @NonNull CharSequence errString) {super.onAuthenticationError (errorCode, errString); if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {} else {Log.d (TAG "เกิดข้อผิดพลาดที่ไม่สามารถกู้คืนได้"); }}

4. ในการตรวจสอบความช่วยเหลือ

กระบวนการ onAuthenticationHelp มีเรียกวิธีเมื่อใดก็ตามที่มีข้อผิดพลาดที่ไม่ร้ายแรงเกิดขึ้นและรวมถึงรหัสช่วยเหลือและที่ให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด

เพื่อช่วยให้รหัสของเราตรงไปตรงมาฉันจะไม่ใช้ onAuthenticationHelp ในแอปของเรา แต่การใช้งานจะมีลักษณะดังนี้:

@Override โมฆะสาธารณะ onAuthenticationHelp (int helpCode, CharSequence helpString) {super.onAuthenticationHelp (helpCode, helpString); biometricCallback.onAuthenticationHelp (helpCode, helpString); }

สุดท้ายเราต้องเรียกเมธอด Authenticate () ของอินสแตนซ์ BiometricPrompt:

myBiometricPrompt.authenticate (promptInfo);

การใช้การรับรองความถูกต้องทางชีวภาพของ Android Pie

เมื่อคุณทำตามขั้นตอนข้างต้นเสร็จแล้ว MainActivity ของคุณควรมีลักษณะดังนี้:

นำเข้า androidx.appcompat.app.AppCompatActivity; นำเข้า androidx.biometric.BiometricPrompt; นำเข้า android.os.Bundle; นำเข้า java.util.concurrent.Executor; นำเข้า java.util.concurrent.Executors; นำเข้า androidx.fragment.app.FragmentActivity; นำเข้า android.util.Log; นำเข้า android.view.View; นำเข้า androidx.annotation.NonNull; MainActivity ระดับสาธารณะขยาย AppCompatActivity {ส่วนตัวคงสุดท้ายสตริง TAG = MainActivity.class.getName (); @Override ที่ได้รับการป้องกันเป็นโมฆะ onCreate (บันเดิลที่บันทึกไว้InstanceState) {super.onCreate (hiddenInstanceState) setContentView (R.layout.activity_main); // สร้างพูลเธรดด้วยเธรดเดี่ยว // Executor newExecutor = Executors.newSingleThreadExecutor (); กิจกรรม FragmentActivity = this; // เริ่มฟังเหตุการณ์การรับรองความถูกต้อง // สุดท้าย BiometricPrompt myBiometricPrompt = ใหม่ BiometricPrompt (กิจกรรม, newExecutor, ข้อผิดพลาดที่ไม่มีรหัสใหม่ @, BiometricPrompt.AuthenticationCallback () {@Override // onAuthenticationError ถูกเรียกเมื่อเกิดข้อผิดพลาดร้ายแรง // public void onAuthenticationError CharSequence errString) {super.onAuthenticationError (errorCode, errString) ถ้า (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {} อื่น {// พิมพ์ไปยัง Logcat // Log.d (TAG "เกิดข้อผิดพลาดที่ไม่สามารถกู้คืนได้"); // onAuthenticationSucceeded ถูกเรียกเมื่อจับคู่ลายนิ้วมือเรียบร้อยแล้ว // @Override โมฆะสาธารณะ onAuthenticationSucceeded (@NonNull BiometricPrompt.AuthenticationResult ผลลัพธ์) {super.onAuthenticationSucceeded (ผลลัพธ์); // พิมพ์ไปยัง Logcat // Log.d (แท็ก TAG, ลายนิ้วมือ รู้จักเรียบร้อยแล้ว ");} // onAuthenticationFailed ถูกเรียกเมื่อลายนิ้วมือไม่ตรงกับ // @Override โมฆะสาธารณะ onAuthenticationFailed () {super.onAuthenticationFailed (); // พิมพ์ a เข้าสู่ระบบ cat // Log.d (TAG, "ไม่รู้จักลายนิ้วมือ"); }}); // สร้างอินสแตนซ์ BiometricPrompt // สุดท้าย BiometricPrompt.PromptInfo promptInfo = ใหม่ BiometricPrompt.PromptInfo.Builder () // เพิ่มข้อความบางส่วนลงในกล่องโต้ตอบ // .setTitle ("ข้อความหัวข้อไปที่นี่") .setSubtitle ("คำบรรยายไปที่นี่") ) .setDescription ("นี่คือคำอธิบาย") .setNegativeButtonText ("ยกเลิก") // สร้างกล่องโต้ตอบ // .build (); // กำหนด onClickListener ให้กับปุ่ม“ การรับรองความถูกต้อง” ของแอป // findViewById (R.id.launchAuthentication) .setOnClickListener (View ViewClClListListener ใหม่) (@ vOverride โมฆะสาธารณะ (ดู v) {myBiometricPrompt.authenticate (promptInfo)); }); }}

ทดสอบโครงการของคุณ

ตอนนี้คุณได้สร้างโครงการแล้วถึงเวลาที่จะนำไปทดสอบและดูว่าจริง ๆ แล้วมันเพิ่มการรับรองความถูกต้องของลายนิ้วมือกับแอปของคุณหรือไม่!

ในการเรียกใช้โครงการนี้คุณจะต้องใช้สมาร์ทโฟนหรือแท็บเล็ตจริงที่ใช้ Android Pie หรือ Android Virtual Device (AVD) ที่ใช้หน้าตัวอย่าง Android P หรือสูงกว่า

คุณจะต้องลงทะเบียนลายนิ้วมืออย่างน้อยหนึ่งนิ้วบนอุปกรณ์ของคุณ หากคุณกำลังใช้อุปกรณ์ Android จริง:

  • รักษาความปลอดภัยหน้าจอล็อคด้วย PIN รหัสผ่านหรือรูปแบบหากยังไม่ได้ดำเนินการ (โดยไปที่ "การตั้งค่า> ล็อคหน้าจอและความปลอดภัย> ประเภทล็อคหน้าจอ> รูปแบบการล็อคหน้าจอ> รูปแบบ / PIN / รหัสผ่าน" จากนั้นทำตามคำแนะนำบนหน้าจอ)
  • เปิดแอปพลิเคชัน "การตั้งค่า" ของอุปกรณ์
  • เลือก“ ล็อคหน้าจอและความปลอดภัย”
  • เลือก“ สแกนลายนิ้วมือ”
  • ทำตามคำแนะนำเพื่อลงทะเบียนลายนิ้วมือตั้งแต่หนึ่งลายนิ้วมือขึ้นไป

อุปกรณ์เสมือน Android ไม่มีเซ็นเซอร์สัมผัสจริงดังนั้นคุณต้องจำลองเหตุการณ์สัมผัส:

  • เปิด AVD ของคุณถ้าคุณยังไม่ได้ทำ
  • ข้าง AVD คุณจะเห็นแถบปุ่ม ค้นหาปุ่ม“ เพิ่มเติม” สามจุด (ซึ่งเคอร์เซอร์อยู่ในตำแหน่งในภาพหน้าจอต่อไปนี้) และทำการคลิก สิ่งนี้จะเปิดหน้าต่าง“ การควบคุมเพิ่มเติม”
  • ในหน้าต่างการควบคุมแบบขยายให้เลือก“ ลายนิ้วมือ” ซึ่งจะเป็นการเปิดชุดควบคุมซึ่งคุณสามารถจำลองเหตุการณ์การสัมผัสต่างๆ
  • เปิดเมนูแบบเลื่อนลงและเลือกลายนิ้วมือที่คุณต้องการลงทะเบียนบนอุปกรณ์นี้ ฉันใช้“ Finger 1. ”
  • ทีนี้มาเปลี่ยนความสนใจของเราเป็นอุปกรณ์ที่จำลอง เปิดแอปพลิเคชัน "การตั้งค่า" ของ AVD และเลือก "ความปลอดภัยและตำแหน่ง"
  • หากคุณยังไม่ได้ตั้งค่า PIN รหัสผ่านหรือรูปแบบให้เลือก "ล็อคหน้าจอ" และทำตามคำแนะนำบนหน้าจอเพื่อรักษาความปลอดภัยล็อคหน้าจอจากนั้นนำทางกลับไปที่หน้าจอหลัก "การตั้งค่า> ความปลอดภัยและตำแหน่ง"
  • เลือก“ ลายนิ้วมือ” ตามด้วย“ เพิ่มลายนิ้วมือ”
  • ตอนนี้คุณจะได้รับแจ้งให้กดนิ้วของคุณไปยังเซ็นเซอร์สัมผัส ให้คลิก“ แตะเซ็นเซอร์” ต่อไปเรื่อย ๆ จนกว่าคุณจะเห็น“ เพิ่มลายนิ้วมือ”

  • คลิก“ เสร็จสิ้น”
  • หากคุณต้องการลงทะเบียนลายนิ้วมือเพิ่มเติมให้ล้างและทำซ้ำขั้นตอนข้างต้น

เมื่อคุณลงทะเบียนลายนิ้วมืออย่างน้อยหนึ่งลายนิ้วมือคุณพร้อมที่จะนำใบสมัครเข้ารับการทดสอบ ฉันจะทดสอบว่าแอปพลิเคชันของเราจัดการกับสามสถานการณ์ที่แตกต่างกันอย่างไร:

  • ผู้ใช้พยายามรับรองความถูกต้องโดยใช้ลายนิ้วมือที่ลงทะเบียน
  • ผู้ใช้พยายามรับรองความถูกต้องโดยใช้ลายนิ้วมือที่ไม่ได้ลงทะเบียนในอุปกรณ์นี้
  • ผู้ใช้พยายามพิสูจน์ตัวตนโดยใช้ลายนิ้วมือที่ไม่ได้ลงทะเบียนหลายครั้งและต่อเนื่องกันอย่างรวดเร็ว

ลองพิสูจน์ตัวตนโดยใช้ลายนิ้วมือที่เราเพิ่งลงทะเบียนในอุปกรณ์ของเรา:

  • ตรวจสอบให้แน่ใจว่าคุณกำลังดู Logcat Monitor ของ Android Studio เนื่องจากเป็นที่ที่แอปพลิเคชันของคุณจะปรากฏ

  • ติดตั้งแอปพลิเคชันของคุณบนอุปกรณ์ทดสอบ
  • แตะปุ่ม“ ตรวจสอบด้วยลายนิ้วมือ” แอปพลิเคชันของคุณ กล่องโต้ตอบการตรวจสอบลายนิ้วมือจะปรากฏขึ้น
  • หากคุณกำลังใช้อุปกรณ์ทางกายภาพจากนั้นกดปลายนิ้วค้างไว้กับเซ็นเซอร์สัมผัสของอุปกรณ์ หากคุณใช้ AVD ให้ใช้ปุ่ม "แตะเซ็นเซอร์" เพื่อจำลองเหตุการณ์การสัมผัส
  • ตรวจสอบ Logcat Monitor หากการรับรองความถูกต้องสำเร็จคุณควรเห็นสิ่งต่อไปนี้:“ จดจำลายนิ้วมือได้สำเร็จ”

ต่อไปมาดูกันว่าจะเกิดอะไรขึ้นถ้าเราพยายามตรวจสอบโดยใช้ลายนิ้วมือที่ไม่ได้ลงทะเบียนในอุปกรณ์นี้:

  • แตะปุ่ม“ รับรองความถูกต้องด้วยลายนิ้วมือ” ของแอปอีกครั้ง
  • หากคุณใช้ AVD ให้ใช้หน้าต่าง "การควบคุมเพิ่มเติม" เพื่อเลือกลายนิ้วมือ ไม่ใช่ ลงทะเบียนในอุปกรณ์นี้ ฉันกำลังใช้ "นิ้ว 2" ให้คลิกปุ่ม "เซ็นเซอร์สัมผัส"
  • หากคุณใช้สมาร์ทโฟนหรือแท็บเล็ต Android ที่มีอยู่จริงจากนั้นกดปลายนิ้วค้างไว้ที่เซ็นเซอร์สัมผัสของอุปกรณ์ - ตรวจสอบให้แน่ใจว่าคุณใช้นิ้วที่ไม่ได้ลงทะเบียนในอุปกรณ์นี้!
  • ตรวจสอบ Logcat ของ Android Studio ตอนนี้มันควรจะแสดง“ ลายนิ้วมือที่ไม่รู้จัก”

ดังที่ได้กล่าวมาแล้ว BiometricPrompt API จะจัดการกับความพยายามในการตรวจสอบสิทธิ์ที่ล้มเหลวโดยอัตโนมัติ วิธีทดสอบฟังก์ชันนี้:

  • แตะปุ่ม“ รับรองความถูกต้องด้วยลายนิ้วมือ” ของแอป
  • พยายามพิสูจน์ตัวตนหลาย ๆ ครั้งอย่างต่อเนื่องโดยใช้ลายนิ้วมือที่ไม่ได้ลงทะเบียน
  • หลังจากผ่านไปสองสามครั้งกล่องโต้ตอบควรปิดโดยอัตโนมัติ ตรวจสอบ Logcat ของ Android Studio และคุณควรเห็นสิ่งต่อไปนี้:“ เกิดข้อผิดพลาดที่ไม่สามารถกู้คืนได้”

คุณสามารถดาวน์โหลดแอปพลิเคชันที่สมบูรณ์จาก GitHub

ห่อ

ในบทความนี้เราได้สำรวจ BiometricPrompt API ใหม่ของ Android Pie ซึ่งช่วยให้คุณเพิ่มการตรวจสอบลายนิ้วมือในแอปของคุณได้อย่างง่ายดาย คุณคิดว่า BiometricPrompt เป็นการปรับปรุงวิธีตรวจสอบลายนิ้วมือก่อนหน้านี้ของ Android หรือไม่? แจ้งให้เราทราบในความคิดเห็นด้านล่าง!

ความคิดเห็น amung Galaxy Note 10 Plu ได้ตี ในขณะที่พวกเขาเป็นบวกผู้ตรวจทานก็พยายามคาดการณ์ว่าใครจะชอบโทรศัพท์สไตลัส $ 1,100 + นี้ สามารถแปลงแฟน ๆ ที่ไม่ใช่หมายเหตุได้ไหม? มันเกี่ยวกับ -Pen หรือเปล่า?...

เราเคยได้ยินว่า Eential กำลังทำงานกับอุปกรณ์ใหม่ เรามีข้อบ่งชี้ว่ามันผิดปกติ เราเห็นการรั่วไหลของสเปคที่แนะนำแนวคิดใหม่ แต่นี่เป็นสิ่งที่จริง:สมาร์ทโฟน Android ที่มีความบางและสูงมาก:...

สิ่งพิมพ์ที่น่าสนใจ