Реализация сканирования QR-кода криптоадреса в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация сканирования QR-кода криптоадреса в мобильном приложении
Простой
~1 день
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация сканирования QR-кода криптоадреса в мобильном приложении

Сканер QR — точка входа адреса получателя. Задача не только распознать QR, но и распарсить URI-схему, провалидировать адрес и автоматически заполнить поля формы отправки. Ошибка в парсинге — пользователь вводит неверные данные, теряет средства.

Выбор библиотеки сканирования

iOSAVFoundation с AVCaptureMetadataOutput нативно. Для более удобного API — VisionKit (iOS 16+) с DataScannerViewController. Последний требует меньше кода и поддерживает одновременно QR и текст.

// iOS 16+ — DataScannerViewController
import VisionKit

let scanner = DataScannerViewController(
    recognizedDataTypes: [.barcode(symbologies: [.qr])],
    qualityLevel: .balanced,
    recognizesMultipleItems: false,
    isHighFrameRateTrackingEnabled: false,
    isPinchToZoomEnabled: true,
    isGuidanceEnabled: true,
    isHighlightingEnabled: true
)
scanner.delegate = self
present(scanner, animated: true)
try? scanner.startScanning()

Android — ML Kit Barcode Scanning (com.google.mlkit:barcode-scanning). Работает on-device, без интернета, быстрее ZXing на современных устройствах.

// Android — ML Kit сканирование
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
    .build()
val scanner = BarcodeScanning.getClient(options)
// Передать ImageProxy из CameraX в scanner.process()
scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        barcodes.firstOrNull()?.rawValue?.let { parseQRContent(it) }
    }

Парсинг URI и автозаполнение

Сканер возвращает строку. Может быть чистый адрес, может быть URI по BIP-21/EIP-681. Парсер должен понимать оба случая.

// Android — парсинг крипто-URI
fun parseQRContent(content: String): QRParseResult {
    // Чистый Ethereum адрес (EIP-55 checksum или lowercase)
    if (content.matches(Regex("^0x[0-9a-fA-F]{40}$"))) {
        return QRParseResult(chain = "ethereum", address = content)
    }
    // EIP-681: ethereum:0xAddress@chainId?value=...
    if (content.startsWith("ethereum:")) {
        val uri = URI(content)
        val address = uri.schemeSpecificPart.substringBefore("@").substringBefore("?")
        val chainId = uri.schemeSpecificPart.substringAfter("@").substringBefore("?").toLongOrNull() ?: 1
        val params = parseQueryParams(uri.query)
        return QRParseResult(
            chain = "ethereum",
            address = address,
            chainId = chainId,
            value = params["value"],
            contractAddress = params["address"] // для ERC-20 transfer
        )
    }
    // BIP-21: bitcoin:address?amount=...
    if (content.startsWith("bitcoin:")) {
        val address = content.removePrefix("bitcoin:").substringBefore("?")
        val amount = parseQueryParams(content.substringAfter("?"))["amount"]
        return QRParseResult(chain = "bitcoin", address = address, amount = amount)
    }
    return QRParseResult(error = "Неизвестный формат")
}

Валидация адреса после парсинга

После извлечения адреса — проверка корректности до заполнения поля:

  • Ethereum/EVM: checksum через EIP-55, длина 42 символа (с 0x)
  • Bitcoin: декодировать base58check или bech32 — невалидная checksum вернёт ошибку
  • Solana: base58, 32 байта (43–44 символа)

Невалидный адрес — показать ошибку прямо на экране сканера, не позволять переходить дальше.

Предупреждение о подмене

После вставки адреса из QR показывать сокращённый вид (первые 6 + последние 4 символа) с просьбой визуально сверить. Это занимает 2 секунды, но предотвращает потери от qrshing-атак (подмена QR в физическом пространстве).

Сроки: 1 день: сканирование через ML Kit / DataScannerViewController, парсинг BIP-21 и EIP-681 URI, валидация адреса, автозаполнение полей формы отправки.