הערה: בעת המרת 10,000 דולר לדולר, הפסד של $1–1 עקב עיגול Float נראה למשתמש כבאג—לא כתכונה. טכנית, ממיר הוא פשוט, אבל שגיאות בחשבון, במטמון או באינטגרציית API הופכות אותו למקור לתלונות. במאמר זה, אנו מפרקים כיצד לבנות מודול אמין מאפס: מבחירת ספק שערים ועד טיפול במקרי קצה עם לוקליזציה ועיגול. לצוות שלנו ניסיון של למעלה מ-10 שנים בפיתוח מובייל ויותר מ-40 מודולי פינטק עד כה—אנו מכירים את כל המלכודות ומבטיחים דיוק בכל המכשירים.
כיצד לבחור API לשערי מטבע?
בחירת API תלויה בדרישות לתדירות עדכון וכיסוי מטבעות. השוו אפשרויות פופולריות:
| API | תוכנית חינמית | תדירות עדכון | תכונות |
|---|---|---|---|
| ExchangeRate-API | 1500 בקשות/חודש | יומי | REST פשוט, 170+ מטבעות |
| Open Exchange Rates | 1000 בקשות/חודש | שעתי | נתונים היסטוריים |
| Fixer.io | 100 בקשות/חודש | שעתי | EUR כמטבע בסיס |
| הבנק המרכזי של רוסיה XML | חינם | יומי | שערים רשמיים לדולר |
| הבנק הלאומי של בלארוס | חינם | יומי | שערים רשמיים ל-BYN |
ExchangeRate-API זול פי 3 מ-Fixer.io בנפח בקשות ממוצע. עבור רוב האפליקציות, עדכונים יומיים מספיקים—ה-CBR מספק XML ב-https://www.cbr.ru/scripts/XML_daily.asp, שמנותח באמצעות XMLParser ב-iOS או XmlPullParser באנדרואיד. שימו לב: ה-CBR משתמש בקידוד windows-1251 ועשוי לשנות את פורמט התגובה. אנו תמיד מיישמים בדיקות רגרסיה אוטומטיות על נתוני ארגז חול ומספקים גיבוי לספק אחר.
למה Decimal, לא Float?
לעולם אל תשתמשו ב-Float או Double לחישובים פיננסיים. ההבדל באגורות הופך למורגש בעת המרת סכומים גדולים. השוו דיוק:
| סוג | דיוק | שגיאה לדוגמה |
|---|---|---|
| Float/Double | ~7-15 ספרות | 0.1 + 0.2 = 0.30000000000000004 |
| Decimal (iOS) / BigDecimal (אנדרואיד) | 28-38 ספרות | 0.1 + 0.2 = 0.3 |
עבור 1,000,000 דולר, פער של 0.01% מייצר שגיאה של 100 דולר. ב-iOS אנו משתמשים ב-Decimal, באנדרואיד ב-BigDecimal. הם מבטיחים דיוק ברמת האגורה ועיגול נכון לפי תקני מתמטיקה פיננסית. למידע נוסף על סוג נתונים Decimal.
מטמון לא מקוון וסנכרון רקע
השערים מאוחסנים מקומית: Core Data / Room כדי לאפשר שימוש לא מקוון עם הערכים האחרונים הידועים. אנו מציגים חותמת זמן של העדכון האחרון כך שהמשתמש יודע עד כמה הנתונים טריים. עבור השערים העדכניים ביותר, אנו משתמשים בסנכרון רקע דרך WorkManager (אנדרואיד) או BGTaskScheduler (iOS). בפרויקט אחד יישמנו TTL של 30 דקות ומטמון של 7 ימים. המשתמש תמיד רואה את טריות הנתונים, וכאשר לא מקוון—אזהרה.
דוגמת קוד לניתוח CBR ב-Swift
import Foundation
struct CurrencyRate: Decodable {
let code: String
let nominal: Int
let value: Decimal
}
class CBRParser: NSObject, XMLParserDelegate {
private var rates: [CurrencyRate] = []
private var currentElement = ""
private var currentCode = ""
private var currentNominal = ""
private var currentValue = ""
func parse(data: Data) -> [CurrencyRate] {
let parser = XMLParser(data: data)
parser.delegate = self
parser.parse()
return rates
}
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
currentElement = elementName
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
switch currentElement {
case "CharCode":
currentCode += string
case "Nominal":
currentNominal += string
case "Value":
currentValue += string
default:
break
}
}
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "Valute" {
let rate = CurrencyRate(
code: currentCode.trimmingCharacters(in: .whitespacesAndNewlines),
nominal: Int(currentNominal.trimmingCharacters(in: .whitespacesAndNewlines)) ?? 1,
value: Decimal(string: currentValue.trimmingCharacters(in: .whitespacesAndNewlines).replacingOccurrences(of: ",", with: ".")) ?? 0
)
rates.append(rate)
currentCode = ""
currentNominal = ""
currentValue = ""
}
}
} תהליך פיתוח הממיר
- ניתוח – איסוף דרישות (מטבעות, דיוק, תדירות עדכון) ובחירת API.
- עיצוב – ארכיטקטורה: שכבת נתונים, מאגר, מטמון, view model (MVVM + Clean Architecture).
- יישום – קוד עם בדיקות יחידה (20+ בדיקות לחשבון ומטמון).
- אינטגרציה – חיבור ה-API הנבחר, טיפול בשגיאות (אין רשת, מגבלות קצב, שינויי פורמט).
- בדיקות – בדיקה על 10 מכשירים אמיתיים עם לוקליזציות ואזורים שונים.
- השקה – פרסום ל-App Store / Google Play, מעבר בדיקת האישור.
מה כלול
- קוד מקור ב-Swift (iOS) או Kotlin (אנדרואיד) עם הערות.
- תיעוד API והוראות לחידוש מפתחות.
- תוכנית מטמון מוגדרת (מסד נתונים מקומי) עם TTL.
- דוח בדיקות עם כיסוי קוד >80%.
- תמיכה למשך שבועיים לאחר המסירה.
ציר זמן ועלות
ציר זמן היישום: 3 עד 7 ימי עסקים. המחיר קבוע לאחר הסכמה על ה-TOR ואינו משתנה. חסכו עד 30% מזמן הפיתוח בהזמנת פתרון מקיף. צרו קשר להערכת פרויקט—נמצא את הפתרון האופטימלי לתקציב שלכם.
טעויות אופייניות בפיתוח ממירים
- התעלמות מ-Decimal: 95% מבאגי הממירים קשורים לעיגול.
- חוסר טיפול בלוקליזציה: בלוקליזציה גרמנית הפסיק הוא מפריד אלפים, מה ששובר את הניתוח.
- תלות הדוקה ב-API אחד: תמיד תכננו למעבר בין ספקים.
- ללא בדיקת פקיעת מטמון: המשתמש רואה שערים בני שבוע ללא אזהרה.
הזמינו פיתוח ממיר מטבעות מפתח ביד והקבלו פתרון מוכן עם קוד מקור ותמיכה.







