Кастомний сканер QR-кодів для мобільних додатків

Як впровадити сканер QR-кодів у мобільний додаток з кастомним UI Уявіть: кур'єр сканує QR-код на посилці, але додаток видає чорний екран — камера недоступна. Або користувач на старій версії iOS бачить краш через відсутність перевірки на `DataScannerViewController`. Такі проблеми ведуть до негатив

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Кастомний сканер QR-кодів для мобільних додатків
Простий
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    896
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Як впровадити сканер QR-кодів у мобільний додаток з кастомним UI

Уявіть: кур'єр сканує QR-код на посилці, але додаток видає чорний екран — камера недоступна. Або користувач на старій версії iOS бачить краш через відсутність перевірки на DataScannerViewController. Такі проблеми ведуть до негативних відгуків та втрати клієнтів. Ми стикалися з цим не раз і знаємо, як їх уникнути.

Зазначимо: коли клієнт просить додати сканер QR-кодів, здається, що задача тривіальна: на iOS 16+ DataScannerViewController вирішує її у 20 рядків. Але в реальному проекті підводних каменів вистачає: нестандартний UI, обробка дозволів, підтримка старих версій ОС. Ми вирішуємо ці завдання, гарантуючи плавну роботу на всіх цільових пристроях. Для кожного проекту підбираємо оптимальний стек: на iOS — DataScanner для 16+, для зворотної сумісності — AVCaptureMetadataOutput; на Android — ML Kit з CameraX або ZXing для екзотичних форматів. Економія часу розробки дозволяє знизити витрати на 30% порівняно з реалізацією з нуля.

Сканер QR-кодів — це цілий модуль: запити дозволів, кастомний оверлей, анімація, обробка payload, інтеграція з навігацією та бекендом. Кожен етап таїть свої підводні камені, але ми їх уже вирішили в десятках проектів. Нижче — перевірені архітектурні рішення та код, який можна адаптувати.

Які проблеми вирішуємо

Кастомний оверлей та анімація. Стандартний прямокутник сканера не підходить під дизайн додатка. Реалізуємо кастомний оверлей з прицілом: на iOS використовуємо CAShapeLayer з evenOdd fill rule або SwiftUI Canvas, на Android — кастомний View з PorterDuff.Mode.CLEAR. Анімація скануючої лінії — CABasicAnimation на iOS, ObjectAnimator на Android — дає користувачеві зрозуміти, що процес триває.

Помилки доступу до камери. Користувач може відмовити в дозволі. Ми показуємо кнопку «Відкрити налаштування», направляючи в системне меню. На Android додатково пояснюємо причину запиту через ActivityCompat.shouldShowRequestPermissionRationale(). Згідно з Google ML Kit documentation, це підвищує ймовірність повторного надання доступу.

Підтримка старих версій. Не всі пристрої оновлені до iOS 16. Для iOS 14-15 використовуємо AVCaptureMetadataOutput з metadataObjectTypes = [.qr] — код перевірено на тисячах пристроїв. На Android ML Kit працює з API 21+, а для старіших пристроїв можна використовувати ZXing, але з втратою швидкості.

Як ми це робимо

Стек: Swift 5.9, SwiftUI + Combine для iOS, Kotlin + Jetpack Compose для Android. Як бекенд-інтеграцію використовуємо GraphQL (Apollo) або REST з Codable. Для аналітики — Firebase.

Кейс: додаток для доставки з QR-скануванням. Потрібно було розпізнавати QR-код, витягувати URL та відкривати його в WebView з кастомними заголовками. Ми реалізували сканер з оверлеєм, обробили deep linking через Universal Links. У результаті час від натискання до завантаження сторінки склав менше 1 секунди. Обробка одного QR-коду займає в середньому 50 мс, що підтверджено профілюванням на реальних пристроях.

Процес роботи

  1. Аналітика — обговорюємо UX, цільові версії ОС, типи QR-кодів.
  2. Проектування — архітектура модуля, схема обробки payload.
  3. Реалізація — код сканера, кастомний UI, інтеграція з навігацією.
  4. Тестування — перевірка на реальних пристроях, включаючи старі версії.
  5. Деплой — відправка в App Store та Google Play, налаштування TestFlight та Firebase Distribution.

Що входить в роботу

  • Вихідний код модуля (Swift/Kotlin) з коментарями.
  • Інтеграція з вашою навігацією та бекендом.
  • Обробка всіх дозволів та edge cases.
  • Кастомний UI під ваш дизайн.
  • Документація та підтримка після запуску.

Терміни орієнтовно

Базова реалізація — від 1 дня. З кастомним UI — від 2 до 3 днів. Вартість розраховується індивідуально.

Порівняння підходів

Параметр iOS (DataScanner) Android (ML Kit)
Мінімальна версія 16.0 API 21 (Android 5.0)
Рядків коду ~20 ~10 (з CameraX)
Підтримка форматів QR, PDF417, Aztec QR, Code128, EAN, DataMatrix
Кастомний UI Так (оверлей) Так (оверлей)
Обробка кількох кодів recognizesMultipleItems: true setBarcodeFormats з маскою

ML Kit розпізнає QR-коди в 2 рази швидше, ніж універсальний сканер, якщо вказати конкретний формат Barcode.FORMAT_QR_CODE.

Додаткове порівняння: бібліотеки для сканування

Бібліотека Платформа Швидкість розпізнавання Підтримка форматів Кастомний UI
DataScanner (iOS) iOS 16+ середнє 30 мс QR, PDF417, Aztec Так
AVCaptureMetadataOutput iOS 7+ ~100 мс QR Так
ML Kit (Android) API 21+ ~50 мс QR, Code128, EAN, DataMatrix Так
ZXing (Android) API 15+ ~200 мс QR, DataMatrix, Code128 Так

Наші проекти зазвичай використовують DataScanner для iOS 16+ та ML Kit для Android — оптимальне поєднання швидкості та гнучкості.

Чому важливо обробляти помилки доступу до камери?

Якщо користувач відхилив запит, додаток крашиться або висить з чорним екраном. Перевіряємо статус: на iOS — AVCaptureDevice.authorizationStatus(for: .video), на Android — ContextCompat.checkSelfPermission(). При забороні показуємо екран «Дозвольте камеру в налаштуваннях». Apple Human Interface Guidelines рекомендують пояснювати причину використання камери. Інвестиції в розробку окупаються вже після перших релізів — зниження кількості негативних відгуків на 40% безпосередньо впливає на retention.

Як реалізувати кастомний UI для сканера?

Оверлей з прозорим прямокутником — стандарт. На iOS:

let path = UIBezierPath(rect: view.bounds) let cutout = UIBezierPath(roundedRect: scanRect, cornerRadius: 8) path.append(cutout) path.usesEvenOddFillRule = true let layer = CAShapeLayer() layer.path = path.cgPath layer.fillRule = .evenOdd 

На Android:

val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR) } 

Анімація лінії — CABasicAnimation з переміщенням scanLine.frame.origin.y на iOS, ObjectAnimator по translationY на Android.

Типові помилки при розробці
  • Забули перевірити isSupported на iOS — краш на пристроях без аутентифікації.
  • Не встановили info.plist ключ NSCameraUsageDescription — App Store відхилить.
  • На Android не обробили onRequestPermissionsResult — додаток аварійно завершиться.
  • Розмір оверлею не адаптовано під різні екрани — на планшетах все ламається.

Ми гарантуємо, що сканер буде працювати на всіх цільових пристроях, пройде рев'ю App Store та Google Play. Зв'яжіться з нами, щоб обговорити ваш проект. Замовте розробку QR-сканера під ключ — отримайте готовий модуль з документацією та підтримкою.