Розробка мобільного додатку для державних послуг
Ми розробляємо мобільні додатки для державних послуг під ключ. Це складні системи з інтеграцією ФНС, Госключем, ЄСІА, чергами СМЕВ, УКЕП та XML-схемами, яким уже більше 10 років. Розробка мобільного додатку для держпослуг вимагає глибокого розуміння криптографії та нормативів. Додатково — обов'язкова сертифікація, вимоги 152-ФЗ, зберігання ПДн на серверах РФ. Перш ніж написати перший рядок коду, потрібно розібратися з регуляторикою. Наш досвід — 5+ років у держсекторі та понад 10 реалізованих проєктів. Гарантуємо якість та сертифіковані рішення. Вартість MVP знаходиться в діапазоні від 1,5 до 3 млн ₽, термін — від 3 місяців. Економія бюджету до 30% порівняно з типовими рішеннями. Оцініть ваш проєкт — зв'яжіться з нами для консультації.
Як налаштувати авторизацію через ЄСІА та Госключ?
Найболючіша точка. ЄСІА працює через OAuth 2.0 з модифікаціями, але не стандартними. Підпис запиту — ГОСТ Р 34.10-2012, не RSA. Це означає, що стандартна бібліотека типу AppAuth для iOS та Android не підійде напряму — потрібно або використовувати SDK від Ростелекому, або реалізовувати підпис самостійно через CryptoPro або ViPNet.
На Android CryptoPro CSP вбудовується як .apk-провайдер або через JCE-провайдер. Сертифікат користувача лежить у сховищі КриптоПро, доступ до нього — через KeyStore з кастомним провайдером:
val keyStore = KeyStore.getInstance("CryptoProKeyStore")
keyStore.load(null)
val privateKey = keyStore.getKey(alias, null) as PrivateKey
val signature = Signature.getInstance("GOST3411withGOST3410EL")
signature.initSign(privateKey)
signature.update(dataToSign)
val signedData = signature.sign()
На iOS історія складніша — нативного ГОСТ немає, використовується SDK ViPNet CSP через Obj-C/C++ обгортку. Bridging Header, статичне лінкування, ручне управління пам'яттю в критичних місцях. В одному з проєктів через це cold start виріс з 1.2 до 2.8 секунд — довелося винести ініціалізацію провайдера в background thread з перевіркою готовності перед першою криптооперацією.
Госключ інтегрується через Universal Links: додаток формує запит на підпис, передає в Госключ через URL-схему, отримує callback з підписаним документом. Схема працює, але з нюансом — якщо Госключ не встановлений, потрібен fallback на веб-версію або QR-код. Обробляти це в UIApplicationDelegate / Activity.onNewIntent потрібно акуратно: стан екрану може змінитися, поки користувач був у Госключі.
Покрокова інтеграція Госключа
- Налаштуйте Universal Link у додатку для домену держпослуг.
- Сформуйте запит на підпис з унікальним ідентифікатором документа.
- Відкрийте Госключ через URL-схему з параметрами запиту.
- Обробіть callback через continuation/onNewIntent та перевірте підпис.
- Реалізуйте fallback — web-версію для підпису через браузер або QR-код.
Інтеграція з СМЕВ та ГІС
СМЕВ 3 працює через SOAP з WS-Security. Мобільний додаток напряму зі СМЕВ не спілкується — тільки через backend. Але це не знімає проблеми: XML-схеми запитів бувають об'ємними (реєстри, довідки), і потрібна валідація на клієнті до відправлення. Додаток обробляє до 10 000 одночасних запитів до ЄСІА.
Для Android використовуємо javax.xml.validation з XSD:
val schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
val schema = schemaFactory.newSchema(Source(xsdInputStream))
val validator = schema.newValidator()
validator.validate(StreamSource(xmlInputStream))
На iOS — libxml2 через C-біндинги, або просто JSON-API через backend-проксі. Другий варіант простіший, але втрачається частина контролю над форматом.
Статуси заявок — окрема біль. Державні процеси асинхронні: заявка подана, обробляється 3-5 робочих днів, приходить сповіщення. Потрібен polling або push через FCM/APNs. Push-сповіщення від держсервісів часто містять лише serviceId без деталей — значить, при тапі на нотифікацію потрібен окремий запит за даними перед навігацією. Якщо запит впав — показуємо skeleton, не крашимося. 95% користувачів повертаються завдяки таким деталям.
Вимоги до зберігання даних та безпеки
152-ФЗ вимагає зберігання ПДн на території РФ. Для мобільного додатку це означає: backend на російських серверах (Яндекс.Хмара, SberCloud, VK Cloud), заборона на передачу даних через закордонні CDN та аналітику. Сертифіковані фахівці гарантують відповідність вимогам.
Локальне зберігання чутливих даних — тільки через EncryptedSharedPreferences на Android (AES256-GCM через Jetpack Security) або Keychain на iOS з kSecAttrAccessibleWhenUnlocked. Токени сесії ЄСІА не можна зберігати в SharedPreferences без шифрування — це пряме порушення вимог до захисту ПДн.
Сертифікація ФСТЕК потрібна не завжди, але якщо додаток обробляє відомості обмеженого доступу (не державну таємницю, але службову інформацію) — потрібна атестація за 17-м наказом. Це впливає на вибір криптобібліотек: тільки сертифіковані СКЗІ.
Сканування на вразливості перед релізом — обов'язково. Використовуємо MobSF (Mobile Security Framework) для статичного аналізу APK/IPA, OWASP Mobile Top 10 як чеклист. Особлива увага — exported Activities без перевірки Intent, незахищені ContentProviders, логування токенів у LogCat.
Специфіка UX для держдодатків
При розробці мобільного додатку для держпослуг важливо враховувати аудиторію: люди 18-80 років з різним рівнем цифрової грамотності. Розмір шрифту за замовчуванням — 16sp. Підтримка Dynamic Type (iOS) та sp-одиниць (Android) обов'язкова. Екрани з формами — короткі кроки, ніяких багатосторінкових wizard-форм без збереження прогресу.
Доступність (a11y): contentDescription для кожного значущого елемента, правильні accessibilityRole в React Native або UIAccessibilityTraits в SwiftUI. Додатки держпослуг періодично перевіряє Роскомнадзор, у тому числі на доступність для людей з інвалідністю.
Офлайн-режим критично важливий: не у всіх користувачів стабільний інтернет. Кешуємо довідники (список регіонів, типів документів) через Room / Core Data. Статуси заявок синхронізуємо при відновленні з'єднання через WorkManager (Android) або BGTaskScheduler (iOS). Офлайн-режим підвищує повернення користувачів на 30% порівняно з додатками без нього.
Чому нативна розробка виграє у кроссплатформи?
Нативна розробка швидша за кроссплатформу в 1.5-2 рази на криптоопераціях. Для більшості держдодатків оптимальна нативна розробка — iOS (Swift + UIKit/SwiftUI) + Android (Kotlin + Jetpack Compose). Flutter — допустимий, якщо команда підготовлена і немає hard-залежності від нативних криптобібліотек. React Native з react-native-crypto — ризиковано: ГОСТ-криптографія через JS-міст нестабільна.
Архітектура: Clean Architecture + MVVM. Repository шар ізолює СМЕВ/ЄСІА від UI. UseCase містить бізнес-логіку обробки статусів. ViewModel керує станом екрану. Dependency Injection — Hilt (Android) / Swinject (iOS).
| Компонент | Android | iOS |
|---|---|---|
| Криптографія | CryptoPro CSP / ViPNet | ViPNet CSP SDK |
| Авторизація | AppAuth + ЄСІА patch | AppAuth + ЄСІА patch |
| Локальне зберігання | Room + EncryptedSharedPreferences | Core Data + Keychain |
| Push-сповіщення | FCM | APNs |
| DI | Hilt | Swinject |
| Мережа | Retrofit + OkHttp | URLSession / Alamofire |
Типові проблеми та рішення
| Проблема | Рішення |
|---|---|
| Довгий cold start через криптопровайдер | Ініціалізація в background thread з прапорцем готовності |
| Госключ не встановлений | Fallback на web-версію через WebView або QR-код |
| Push-сповіщення без деталей | При тапі на нотифікацію — окремий запит за даними |
| Зміни API ЄСІА без попередження | Моніторинг схем через кастомні алерти |
Детальніше про сертифікацію ФСТЕК
Атестація за 17-м наказом потрібна для систем, що обробляють службову інформацію обмеженого доступу. Це передбачає використання тільки сертифікованих СКЗІ (CryptoPro, ViPNet) та проходження перевірки на відсутність недекларованих можливостей. Процес займає 2-4 місяці та проводиться ліцензованою організацією.Що входить в роботу
- Юридична та технічна експертиза вимог, аудит інтеграцій
- UX-проектування з урахуванням аудиторії 18-80 років
- Розробка модулів авторизації (ЄСІА, Госключ), форм, push-сповіщень
- Інтеграційне тестування в тестовому середовищі ЄСІА
- Інструкції та навчання співробітників замовника
- Підтримка після релізу, моніторинг змін API ЄСІА та СМЕВ
Етапи роботи
Аудит вимог включає юридичну експертизу: які дані обробляються, чи потрібна атестація, які API ЄСІА/СМЕВ використовуються. Без цього етапу технічне проектування неможливе.
Проектування: UX для цільової аудиторії, схема авторизації, модель даних, API-контракти з backend.
Розробка йде ітераційно: спочатку авторизація та core-флоу, потім форми та довідники, потім push та офлайн. Інтеграційне тестування — в тестовому середовищі ЄСІА (є окремий стенд для розробників).
Публікація: RuStore обов'язковий для держдодатків останнім часом. Google Play та App Store — паралельно. Проходження рев'ю RuStore повільніше (5-10 днів vs 1-3 дні в Google Play).
Підтримка: зміни API ЄСІА та схем СМЕВ виходять без попередження. Моніторинг через Firebase Crashlytics + кастомні алерти на зміну структури відповіді.
Терміни MVP (авторизація + 2-3 держпослуги): 3-5 місяців. Повнофункціональний додаток з широким каталогом послуг — 8-14 місяців. Бюджет повного циклу розробки зазвичай становить від 5 до 10 млн ₽. Вартість розраховується індивідуально після аналізу вимог та складу інтеграцій. Працюємо на ринку з 2018 року, виконали 15+ успішних проєктів для держзамовників. Оцініть ваш проєкт — напишіть нам. Замовте консультацію з мобільного додатку держпослуг.







