![Add Fingerprint Authentication to WhatsApp on Android devices!](https://i.ytimg.com/vi/eyYQ5g8iJD0/hqdefault.jpg)
เนื้อหา
- เพิ่มไลบรารีไบโอเมตริกซ์
- เพิ่มสิทธิ์ USE_BIOMETRIC
- สร้างเลย์เอาต์ของแอปพลิเคชันของคุณ
- ตรวจสอบตัวตนของผู้ใช้
- สร้างอินสแตนซ์พรอมต์ไบโอเมตริกซ์
- จัดการการเรียกกลับการรับรองความถูกต้อง
- 1. onAuthenticationSucceeded ()
- 2. onAuthenticationFailed ()
- 3. onAuthenticationError
- 4. ในการตรวจสอบความช่วยเหลือ
- การใช้การรับรองความถูกต้องทางชีวภาพของ Android Pie
- ทดสอบโครงการของคุณ
- ห่อ
ลองใช้ 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”:
ตรวจสอบตัวตนของผู้ใช้
ทีนี้มาดูกันว่าคุณจะรับรองความเป็นตัวตนของผู้ใช้โดยใช้ 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 หรือไม่? แจ้งให้เราทราบในความคิดเห็นด้านล่าง!