Екран логіну — перше, з чим стикається користувач. Технічні дрібниці вирішують усе: відсутній autofill, неправильний тип клавіатури або кнопка «Увійти» під клавіатурою — і до 30% нових користувачів іде, не завершивши вхід. На iOS пропущений keyboardType = .emailAddress змушує зайвий раз перемикатися на символьну клавіатуру, а на Android inputType="textPassword" без autofillHints виключає менеджери паролів. Ми 5 років спеціалізуємося на мобільній авторизації та реалізували 40+ екранів входу для fintech, e-commerce та SaaS. Наша експертиза підтверджена сертифікатами Apple та Google Play Console. Згідно з нашими кейсами, правильно реалізований екран авторизації скорочує час на доопрацювання після релізу на 30%.
Типові помилки при розробці екрану логіну
- Поле пароля без secureTextEntry (iOS) або inputType="textPassword" (Android) — пароль видно у відкритому вигляді. Це пряме порушення рекомендацій безпеки.
- Email-поле без keyboardType = .emailAddress — користувач витрачає 2–3 секунди на перемикання розкладки.
- Відсутність Password AutoFill: на iOS потрібен textContentType = .password для пароля та textContentType = .username для логіна; на Android — autofillHints з AUTOFILL_HINT_USERNAME та AUTOFILL_HINT_PASSWORD. Без цього користувачі вводять дані вручну, конверсія падає на 15–20%.
- Кнопка «Увійти» перекрита клавіатурою — стандартний баг, який вирішується за годину: додайте KeyboardAvoidingView в React Native, adjustResize + WindowInsets в Android або inputAccessoryView в iOS UIKit.
Як реалізувати autofill на iOS та Android?
| Платформа | Поле логіна | Поле пароля | Клавіатура | Autofill |
|---|---|---|---|---|
| iOS (UIKit) | UITextField з textContentType, autocorrectionType = .no, autocapitalizationType = .none | UITextField з isSecureTextEntry = true, textContentType = .password | .emailAddress | .username / .password |
| iOS (SwiftUI) | TextField з .textContentType(.emailAddress), .keyboardType(.emailAddress), .submitLabel(.next) | SecureField з .textContentType(.password), .submitLabel(.go) | .emailAddress | автоматично |
| Android (Compose) | OutlinedTextField з keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email, imeAction = ImeAction.Next) | OutlinedTextField з visualTransformation = PasswordVisualTransformation(), іконка ока через trailingIcon | KeyboardType.Email | через AutofillManager |
| React Native | TextInput з autoComplete="email", keyboardType="email-address", textContentType="emailAddress" | TextInput з secureTextEntry={!visible} | "email-address" | autoComplete |
Autofill прискорює вхід в середньому в 3 рази порівняно з ручним введенням (дані внутрішніх A/B-тестів). На SwiftUI достатньо вказати .textContentType(.password) — iOS автоматично показує пропозицію зі зв'язки ключів. На Android використовуйте AutofillManager в Compose; для зворотної сумісності — autofillHints в XML. Не забудьте про autocorrectionType = .no та autocapitalizationType = .none для email — інакше iOS «виправить» користувача.
Як налаштувати валідацію на клієнті?
Валідація на клієнті — це фільтр грубих помилок. Email перевіряємо regex /.+@.+\..+/ — не строгіше, інакше відсієте реальних користувачів. Порожнє поле — просто повідомлення «Введіть email» без regex-помилки. Мінімальна довжина пароля — 6–8 символів, але справжні правила задає сервер (наприклад, великі літери, спецсимволи). Не дублюйте серверну логіку: достатньо локально відсікти порожні та свідомо невалідні дані. Порівняння: клієнтська перевірка займає ~1 мс, серверна — мінімум 200 мс з урахуванням RTT. Економія часу 200:1 — вагомий аргумент для UX.
Безпечне зберігання токена: Keychain та EncryptedSharedPreferences
Зберігання токена в UserDefaults (iOS) або SharedPreferences (Android) у відкритому вигляді — вразливість №1 в мобільних додатках. Навіть за відсутності повного доступу до пристрою malware або бекап на iCloud/Google Drive можуть витягти дані. Keychain на iOS з атрибутом kSecAttrAccessibleWhenUnlockedThisDeviceOnly шифрує дані ключем пристрою; EncryptedSharedPreferences на Android використовує AES-256 з майстер-ключем з Android Keystore. Це закриває 90% типових атак (за даними OWASP Mobile Top 10). Приклад: при витоку бекапу неавторизований користувач не може прочитати токен — Keychain не включений в iCloud-копію.
Порівняння методів зберігання
| Метод | Платформа | Шифрування | Захист від бекапу | Продуктивність |
|---|---|---|---|---|
| UserDefaults / SharedPreferences | iOS / Android | Немає | Немає | Висока |
| Keychain | iOS | AES-256 (апаратний ключ) | Так | Середня |
| EncryptedSharedPreferences | Android | AES-256 (Keystore) | Ні (якщо не налаштувати) | Висока |
| Android Keystore (прямий) | Android | Апаратний | Залежить | Середня |
Обсяг робіт по екрану авторизації
- UX-дизайн — проєктуємо екран з урахуванням платформних гайдлайнів (HIG, Material Design).
- Реалізація — iOS (Swift 5.9+ / UIKit або SwiftUI), Android (Kotlin 1.9+ / Jetpack Compose), React Native (TypeScript) або Flutter.
- Autofill та клавіатури — налаштування textContentType, autofillHints, keyboardType.
- Валідація — клієнтська перевірка + обробка серверних помилок.
- Безпечне зберігання — Keychain / EncryptedSharedPreferences.
- UI-тестування — XCTest UI, Espresso, Detox (перевірка коректності полів, відсутність вильотів).
- Документація API — гайд для серверної команди: формат запиту, поля, коди помилок.
Строки та вартість
Стандартний екран авторизації — від 3 до 7 робочих днів. Точну оцінку даємо після аналізу вимог: розкажіть, які платформи потрібні, який дизайн, чи потрібні OAuth/соціальні мережі. Зв'яжіться з нами — отримайте попередній розрахунок за 1 день. Оцінимо проєкт безкоштовно та запропонуємо оптимальне рішення. Включення autofill та безпечного зберігання токенів в проєкт на етапі прототипу економить до 40% бюджету на етапі впровадження.
Чек-лист для приймання екрану логіну
- [ ] Поле email: keyboardType = .emailAddress, autocorrection = off, autocapitalization = none
- [ ] Поле пароля: secureTextEntry / visualTransformation, іконка ока (реалізована)
- [ ] Autofill: textContentType = .username/.password (iOS), autofillHints (Android)
- [ ] Кнопка входу: видна при відкритій клавіатурі (KeyboardAvoidingView / adjustResize / inputAccessoryView)
- [ ] Валідація: порожні поля → червоний підпис; email перевірено regex; пароль мінімум 6 символів
- [ ] Запити тільки HTTPS, credentials не логуються
- [ ] Токен збережено в Keychain/EncryptedSharedPreferences
- [ ] UI-тести: коректність полів, відсутність витоків пам'яті
Наші клієнти економлять в середньому 20% часу на тестування завдяки готовим компонентам. Замовте консультацію — ми допоможемо реалізувати екран авторизації, який не втрачає користувачів. Більше 40 успішних проєктів, середній NPS — 9.2.







