אימות זיהוי פנים באנדרואיד: הטמעת התחברות ביומטרית
"אני רוצה התחברות עם פנים כמו באייפון, אבל באנדרואיד." נשמע מוכר? האתגר הוא שמערכת האקוסיסטם של אנדרואיד מפוצלת: ממכשירי דגל עם חיישני אינפרא-אדום ועד מכשירי תקציב עם מצלמה קדמית רגילה, שבה זיהוי פנים הוא רק תחליף נוח למחוות החלקה. במקום תקן אחד, יש גן חיות של הטמעות: BiometricPrompt, ביומטריה ייעודית של Huawei (HMS), ולפעמים אין תמיכת חומרה כלל.
הניסיון שלנו: במשך למעלה מ-7 שנים הטמענו אימות ביומטרי עם זיהוי פנים ביותר מ-20 פרויקטים, כולל אפליקציות בנקאות ושירותי פינטק. לפי BiometricPrompt API, מומלץ להשתמש ב-Class 3 לעסקאות פיננסיות. הטמעת אימות ביומטרי באנדרואיד עם זיהוי פנים דורשת התחשבות בפיצול.
הביומטריה של אנדרואיד מחולקת לשלוש רמות אבטחה. לפעולות פיננסיות, רק Class 3 מתאים — ערובה חומרתית עם אימות ב-TEE. שימוש ב-Class 1 או 2 הופך התקפות זיוף עם תמונה לבלתי נמנעות.
אילו רמות ביומטריות קיימות ולמה זה חשוב?
אנדרואיד מחלקת ביומטריה לשלוש רמות. הנה השוואה:
| רמה | סוג חיישן | רמת אבטחה | תרחישים מותרים |
|---|---|---|---|
| Class 1 (נוחות) | מצלמה קדמית ללא IR | נמוכה — אפשרות לזיוף עם תמונה | פתיחת מסך בלבד |
| Class 2 (חלש) | מצלמה עם אלגוריתם משופר | בינונית — הגנה חלקית | אימות באפליקציות שאינן פיננסיות |
| Class 3 (חזק) | חיישן IR + TEE | גבוהה — ערובה חומרתית | תשלומים, בנקאות, נתונים רגישים |
BiometricPrompt, בשימוש נכון, מאובטח פי 3 יותר מפתרונות מותאמים אישית מכיוון שהוא מסתמך על TEE. קריאה ל-BiometricManager.canAuthenticate(BIOMETRIC_STRONG) מחזירה את הרמה הנכונה רק אם קיים חיישן חומרתי. לאפליקציות פיננסיות, אנו מקבלים רק Class 3.
איך להטמיע BiometricPrompt לזיהוי פנים?
הקוד זהה לאימות טביעת אצבע — אותו BiometricPrompt, אותו CryptoObject. ההבדל הוא שהמערכת בוחרת את ההנחיה בהתאם לביומטריה הזמינה. עם זאת, בחלק מהקושחות (Honor, MIUI), ההנחיה עשויה להציג גם פנים וגם טביעת אצבע בו-זמנית — זו התנהגות תקינה.
val biometricManager = BiometricManager.from(context)
val canAuthenticate = biometricManager.canAuthenticate(
BiometricManager.Authenticators.BIOMETRIC_STRONG
)
when (canAuthenticate) {
BiometricManager.BIOMETRIC_SUCCESS -> launchBiometricPrompt()
BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> showFallback()
BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> showTemporaryError()
BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> promptEnrollment()
}val biometricManager = BiometricManager.from(context) val canAuthenticate = biometricManager.canAuthenticate( BiometricManager.Authenticators.BIOMETRIC_STRONG ) when (canAuthenticate) { BiometricManager.BIOMETRIC_SUCCESS -> launchBiometricPrompt() BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> showFallback() BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> showTemporaryError() BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> promptEnrollment() } פותח את הגדרות המערכת דרך promptEnrollment() עם פרמטרים נוספים. חשוב: כשהמסך מסתובב או שה-Activity נוצר מחדש, הנחיה פתוחה נעלמת ללא קריאה חוזרת. פתרון — עקוב אחר דגל Intent(Settings.ACTION_BIOMETRIC_ENROLL) ב-ViewModel והפעל מחדש את ההנחיה ב-isAuthenticating. לחלופין, השתמש ב-onResume ב-Jetpack Compose.
למה BiometricPrompt לא עובד על Huawei ללא GMS?
Huawei עם HMS היא כאב ראש נפרד. rememberLauncherForActivityResult הסטנדרטי אינו קיים. הפתרון: הוסף BiometricPrompt והשתמש ב-com.huawei.hms:base באמצעות reflection או קומפילציה מותנית תחת ה-flavor של HMS. זה מוסיף 2–3 ימים לזמן הפיתוח.
מידע נוסף על Huawei HMS
במכשירי Huawei ללא GMS, חבר את `com.huawei.hms:base` והשתמש ב-`HuaweiBiometricManager` באמצעות reflection או קומפילציה מותנית. זה מוסיף 2–3 ימים ללוח הזמנים.פיצול מכשירים: מה אנחנו בודקים ידנית
| יצרן | מאפיין מיוחד |
|---|---|
| Samsung (One UI 5+) | Face ID Strong במכשירי דגל, Weak במכשירי תקציב |
| Xiaomi / MIUI 14 | HuaweiBiometricManager עשוי להחזיר רמה שגויה — נדרשת בדיקה נוספת |
| Pixel 6+ | Strong מלא דרך חיישן מתחת למסך או IR קדמי |
| Huawei (HMS) | canAuthenticate API ייעודי כאשר GMS אינו קיים |
אבטחה: איך להגן מפני זיוף?
זיהוי מבוסס תמונה דו-ממדית (2D) פגיע להתקפות זיוף עם תמונה. אנחנו אף פעם לא משתמשים ב-Class 1 לפעולות הקשורות לכסף. אם הלקוח מתעקש על תמיכה במכשירי תקציב ישנים — אנו מציעים תוכנית דו-שלבית: פנים (Class 1) + PIN. זה עונה פורמלית על דרישות 2FA מבלי לפגוע באבטחה.
מה כלול בעבודה
- ביקורת על צי המכשירים היעד וקביעת הרמה הביומטרית המינימלית
- הטמעת זרימת KeyStore + CryptoObject עם אחסון מפתחות ב-TEE
- טיפול בתרחיש Huawei HMS (במידת הצורך)
- בדיקות על מכשירים פיזיים — לא פחות מ-10 דגמים מיצרנים שונים
- תיעוד המפרט את המגבלות לפי יצרן
- תמיכה לאחר השחרור למשך 14 יום
תהליך ולוחות זמנים
- אנליטיקה — הגדרת מכשירי יעד ורמה ביומטרית (1–2 ימים)
- עיצוב — תוכנית אימות עם שיטות גיבוי (יום אחד)
- הטמעה — שילוב BiometricPrompt, טיפול בשגיאות, ניהול מפתחות (3–5 ימים)
- בדיקות — על מכשירים אמיתיים מיצרנים שונים (2–3 ימים) — חוסך עד 30% באמצעות אוטומציה
- תיעוד — מגבלות דגמים והמלצות (יום אחד)
לוחות זמנים: בין 5 ל-10 ימי עבודה, תלוי בצורך בתמיכת HMS ובכמות הבדיקות. התקציב מחושב באופן אישי.
הזמינו פיתוח מפתח לתפנית: אנו מבטיחים פעולה תקינה על 95% מהמכשירים הפופולריים ועמידה מלאה בהמלצות האבטחה של BiometricPrompt API. קבלו ייעוץ לפרויקט שלכם — צרו קשר.







