Реалізація конвертера валют у мобільних додатків
Конвертер валют здається простою функцією, доки не потрібно забезпечити актуальність курсів, коректно обробити округлення й запобігти крахам інтерфейсу при введенні дробових значень на різних локалях.
Джерела курсів валют
Вибір API залежить від вимог до частоти оновлення та наборів валют:
| API | Безплатний план | Частота оновлення | Особливості |
|---|---|---|---|
| ExchangeRate-API | 1500 запитів/місяць | Щоденно | Простий REST, 170+ валют |
| Open Exchange Rates | 1000 запитів/місяць | Щогодини | Історичні дані |
| Fixer.io | 100 запитів/місяць | Щогодини | EUR як базова валюта |
| ЦБ РФ XML | Безплатно | Щоденно | Офіційні курси для RUB |
| НБУ | Безплатно | Щоденно | Офіційні курси для UAH |
Для більшості додатків достатньо щоденного оновлення. Центральний банк РФ надає XML за адресою https://www.cbr.ru/scripts/XML_daily.asp, парсується через XMLParser на iOS або XmlPullParser на Android.
Ключові деталі реалізації
Кешування. Зберігайте курси локально за допомогою Core Data або Room для роботи офлайн з останніми відомими значеннями. Покажіть мітку часу останнього оновлення, щоб користувачі розуміли актуальність даних.
Арифметика. Ніколи не використовуйте Float або Double для фінансових розрахунків. На iOS використовуйте NSDecimalNumber або Decimal, на Android — BigDecimal. Різниця в копійках при конвертації великих сум буде помітною.
Введення числа. Користувачі вводять "1.5" або "1,5" залежно від локалі пристрою. Хоча NumberFormatter (iOS) і NumberFormat (Android) це обробляють, явно встановіть locale та maximumFractionDigits. Без цього на німецькій локалі кома сприймається як розділювач тисяч.
Оновлення в реальному часі. При введенні суми перерахуйте при кожній зміні символу, використовуючи debounce(300ms) щоб не перевантажувати API під час швидкого введення.
Період реалізації: 3-5 днів включаючи інтеграцію з API, кешування та реалізацію UI.







