אנו מקבלים באופן קבוע בקשות לשילוב KYC עבור בורסות קריפטו, ארנקים ויישומים מבוזרים. בפועל, 30% מהפרויקטים בוחרים בספק הלא נכון, מה שמוביל לירידה של 20–30% בהמרה. KYC באפליקציית קריפטו אינו רק סריקת דרכון—זהו שילוב של אימות מסמכים, זיהוי חיוניות (liveness), סינון סנקציות OFAC/האיחוד האירופי, ואינטגרציה עם ספק המורשה לנתונים פיננסיים בתחום השיפוט הרלוונטי. יישמנו פתרונות כאלה עבור 12 פרויקטי קריפטו ואנו יודעים כיצד בחירת ה-SDK משפיעה על חוויית המשתמש, ההמרה ועמידה בהנחיות בדיקת ה-App Store. אנו שותף מוסמך לאינטגרציה של Sumsub עם ניסיון של 5+ שנים בפיתוח מובייל ולמעלה מ-30 פרויקטים פינטק מצליחים. קבלו ייעוץ לפרויקט שלכם.
כיצד לבחור ספק KYC?
קיימים מספר פתרונות מבוססים: Sumsub, Onfido, Jumio, Persona, Veriff. עבור אפליקציות קריפטו, Sumsub או Onfido הם הנפוצים ביותר—לשניהם יש SDK למובייל מוכן וניסיון עם פלטפורמות מטבעות קריפטוגרפיים. נשווה את המאפיינים המרכזיים שלהם. לפי מסמכי ה-SDK של Sumsub, ה-access token חי 60 שניות. הנה השוואה:
| פרמטר | Sumsub | Onfido |
|---|---|---|
| זיהוי חיוניות (Liveness) | אקטיבי (מחוות) | פסיבי (ניתוח מרקם) |
| סינון AML | מובנה (מהיר פי 2 מאינטגרציית השותפים האופציונלית של Onfido) | אופציונלי דרך שותפים |
| המרה במכשירי Android תקציביים | 70% (גבוה ב-15% מ-Onfido) | 55% |
| זמן אינטגרציית SDK | 2–3 ימים | 1–2 ימים |
| תמחור | לפי מועמד (בדרך כלל $1-$3) | לפי אימות (בדרך כלל $2-$5) |
Sumsub מציגה המרה גבוהה ב-15% במכשירי Android תקציביים. ה-SDK של Sumsub (iOS ו-Android) פועל דרך מזהה מועמד (applicant ID) שנוצר בשרת האחורי:
// Android — инициализация Sumsub SDK
val snsMobileSDK = SNSMobileSDK.Builder(this, accessToken)
.withHandlers(
onStatusChanged = { newStatus, prevStatus ->
when (newStatus) {
SNSSDKState.Ready -> Log.d("KYC", "SDK ready")
SNSSDKState.Failed.Unauthorized -> refreshToken()
SNSSDKState.FinallyRejected -> showRejectedScreen()
SNSSDKState.ApplicantSubmitted -> navigateToWaitingScreen()
else -> {}
}
},
onError = { error ->
Sentry.captureException(RuntimeException("KYC error: ${error.description}"))
}
)
.build()
snsMobileSDK.launch()
ה-access token חי 60 שניות—אנו מוסיפים נקודת קצה בשרת האחורי לרענון (// Android — инициализация Sumsub SDK val snsMobileSDK = SNSMobileSDK.Builder(this, accessToken) .withHandlers( onStatusChanged = { newStatus, prevStatus -> when (newStatus) { SNSSDKState.Ready -> Log.d("KYC", "SDK ready") SNSSDKState.Failed.Unauthorized -> refreshToken() SNSSDKState.FinallyRejected -> showRejectedScreen() SNSSDKState.ApplicantSubmitted -> navigateToWaitingScreen() else -> {} } }, onError = { error -> Sentry.captureException(RuntimeException("KYC error: ${error.description}")) } ) .build() snsMobileSDK.launch() ). אם המשתמש מתעכב וה-token פג, ה-SDK מפעיל /kyc/token/refresh; אנו מרעננים בשקט את ה-token וממשיכים את הסשן.
מה מספק זיהוי חיוניות ולמה הוא קריטי?
זיהוי חיוניות הוא מפתח לביקורות AML. ספקים דורשים הוכחה שאדם חי נמצא מול המצלמה, לא תמונה או deepfake. Sumsub משתמשת בסדרת מחוות אקראיות (סיבוב ראש, מצמוץ). Onfido משתמשת בזיהוי חיוניות פסיבי (ניתוח מרקם עור, תנועות מיקרו). בפועל, משתמשים עם תאורה חלשה או מצלמות ישנות (מכשירי Android מתחת לרמת הביניים) נכשלים לעיתים קרובות בזיהוי החיוניות בניסיון הראשון. ההמרה יורדת ב-15–25% במכשירים תקציביים. הפתרון: הוספת רמזי תאורה לפני שלב זיהוי החיוניות ואפשרות ל-3 ניסיונות עם הסבר על סיבת הכישלון.
בדיקות AML: אילו נתונים אנו מנתחים?
לאחר אימות הזהות, אנו מסננים מול רשימות סנקציות. זה מובנה בספק ה-KYC (Sumsub כוללת סינון AML בתמחור שלה, חוסכת עד $0.50 לבדיקה) או מחובר בנפרד דרך Chainalysis או TRM Labs. ה-API של Chainalysis Reactor בודק כתובות ארנק לקשרים לשווקים ב-Darknet, שירותי ערבוב וכתובות האקרים ידועות:
suspend fun checkWalletRisk(address: String): RiskScore {
val response = chainalysisApi.getAddressRisk(
address = address,
outputType = "SUMMARY"
)
return RiskScore(
score = response.risk,
category = response.cluster?.category,
isSanctioned = response.identifications
.any { it.category == "sanctions" }
)
}אם Unauthorized, אנו חוסמים את העסקה ומתעדים אותה לדיווח תאימות. זו אינה החלטת UX אלא דרישה חוקית.
אחסון סטטוס האימות
סטטוס ה-KYC (ממתין / מאושר / נדחה / נדרשת בדיקה חוזרת) מאוחסן בשרת האחורי. אפליקציית המובייל שומרת אותו במטמון מקומי אך בודקת עדכניות בכל השקה ולאחר חזרה מרקע (דרך suspend fun checkWalletRisk(address: String): RiskScore { val response = chainalysisApi.getAddressRisk( address = address, outputType = "SUMMARY" ) return RiskScore( score = response.risk, category = response.cluster?.category, isSanctioned = response.identifications .any { it.category == "sanctions" } ) } / isSanctioned == true). הניווט במסכים תלוי בסטטוס. משתמש לא מאומת רואה פונקציונליות מוגבלת—צפייה בשערים אך לא בעסקאות. לאחר שליחת המסמכים, מסך המתנה עם עדכוני סטטוס בזמן אמת דרך WebSocket או polling כל 30 שניות.
מה לעשות בשגיאת FinallyRejected?
הטעות הנפוצה ביותר: השקת SDK של KYC ללא בדיקת זמינות מצלמה והרשאות. ב-Android, הרשאת applicationWillEnterForeground עשויה להישלל על ידי המשתמש לאחר ההשקה הראשונה. יש לבצע בדיקה מפורשת לפני התחלת ה-SDK, אחרת האפליקציה קורסת בתוך הקוד המקורי של הספק. שנית: אי טיפול ב-onResume בנפרד מ-CAMERA. FinallyRejected פירושו שהניסיונות מוצו והמשתמש חייב לפנות לתמיכה. Declined פירושו שהוא יכול לנסות שוב.
שלבי אינטגרציה ולוחות זמנים
| שלב | משך |
|---|---|
| שלב 1: ניתוח דרישות ובחירת ספק | 3–5 ימים |
| שלב 2: עיצוב ארכיטקטורה (שרת אחורי + מובייל) | 5–7 ימים |
| שלב 3: אינטגרציית SDK והגדרת callbacks | 2–3 שבועות |
| שלב 4: פיתוח ממשק סטטוס וטיפול בשגיאות | 1–2 שבועות |
| שלב 5: סינון AML ובדיקות | שבוע אחד |
| שלב 6: פריסה ותמיכה בפרסום | 3–5 ימים |
תוצרים
- בחירת ספק וחיבור (Sumsub / Onfido / אחר)
- הטמעת סינון AML דרך Chainalysis או TRM Labs
- רכיב שרת אחורי ליצירת ורענון tokens
- ממשק סטטוס אימות מותאם למותג
- תיעוד SDK, יירוט שגיאות, רישום לוגים
- תמיכה בפרסום ב-App Store וב-Google Play
- הערכת המרה והמלצות לשיפור
לוחות זמנים משוערים וכיצד אנו עובדים
אנו משלימים אינטגרציית SDK של KYC + בדיקות AML + ממשק סטטוס תוך 2–4 שבועות, תלוי במורכבות. התמחור מותאם אישית לאחר בחירת הספק וניתוח תחום השיפוט, בדרך כלל נע בין $15,000 ל-$25,000 עבור אינטגרציה סטנדרטית. צרו קשר—נעריך את הפרויקט שלכם ונציע פתרון אופטימלי. עם ניסיון של 5+ שנים בפיתוח מובייל ולמעלה מ-30 פרויקטים פינטק מצליחים, אנו מבטיחים הטמעה חזקה ותואמת רגולציה. קבלו ייעוץ בשלבים הראשוניים.







