Розробка мобільного додатку для цифрової візитки (vCard)
Цифрова візитка в мобільному додатку — це в основному три сценарії: створення/редагування свого профілю, поділ ним (через NFC, QR, посилання), отримання чужої візитки та збереження в контакти. Технічно не складно, але деталі — генерація vCard-файлу, робота з NFC Core Framework, deep linking при сканування QR — потребують обережної реалізації.
Формат vCard та стандарт
vCard 3.0 / 4.0 — стандарт для обміну контактними даними. При експорті в системні контакти формат має значення:
BEGIN:VCARD
VERSION:3.0
FN:Іван Петров
ORG:Назва компанії
TEL;TYPE=CELL:+38-055-1234567
EMAIL:[email protected]
URL:https://mycard.app/ivan
PHOTO;ENCODING=b;TYPE=JPEG:/9j/...base64...
END:VCARD
На iOS генеруємо через CNMutableContact → CNContactVCardSerialization.data(with:). На Android — ContactsContract або ручна генерація рядка vCard. Імпорт в системні контакти: iOS — CNContactStore.add(_:toContainerWithIdentifier:) з запитом дозволу Contacts; Android — Intent(ContactsContract.Intents.Insert.ACTION) з попередньо заповненими полями (без дозволів — користувач підтверджує).
QR-код
Генерація QR з посиланням на профіль — бібліотеки: CoreImage.CIFilter.qrCodeGenerator на iOS (вбудовано, без залежностей), ZXing або QRose на Android, qr_flutter у Flutter.
Розмір QR в UI: мінімум 200x200 dp. QR повинен містити HTTPS-посилання з deeplink на профіль, не vCard-файл напряму — інакше при сканування стандартною камерою не відкриється додаток.
Сканування QR: на iOS AVFoundation з AVCaptureMetadataOutput та metadataObjectTypes = [.qr]. На Android — CameraX з ImageAnalysis та BarcodeScanning з ML Kit. Сканування працює без спеціальних дозволів на iOS (тільки NSCameraUsageDescription).
NFC-шеринг
На iOS — CoreNFC. Запис NDEF-тегу:
let session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)
session.begin() // Запитує піднесення телефону до тегу
// У делегаті:
func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
let payload = NFCNDEFPayload.wellKnownTypeURIPayload(url: URL(string: "https://mycard.app/ivan")!)!
let message = NFCNDEFMessage(records: [payload])
tags.first?.writeNDEF(message) { error in ... }
}
Читання NFC — аналогічно, тип NFCNDEFReaderSession. Обмеження iOS: NFC-запис доступна тільки починаючи з iPhone 7, iOS 13+. Фоновое читання NFC-тегів (без відкриття додатку) — iOS 14+, тільки якщо тег містить Universal Link.
На Android — NfcAdapter, NdefMessage, NdefRecord.createUri. Android підтримує Android Beam (застаріле в Android 10) та пряме написання на фізичний NFC-тег. Також працює P2P через NfcAdapter.setNdefPushMessage для передачі даних між двома Android-пристроями.
Фізичні NFC-карточки (пластик з чипом) — програмуються через додаток. NTAG213/215 — популярні чипи для візиток.
Профіль та редактор
Поля візитки: ім'я, посада, компанія, телефони (кілька), email, сайт, соцмережі, аватар, фон карточки. Редактор — стандартні текстові поля + ImagePicker для аватара.
Аватар: завантаження через presigned S3 URL, збереження в CDN. На карточці показуємо через URLSession/Coil/CachedNetworkImage з placeholder.
Дизайн візитки: або один з шаблонів (вибір теми/кольору), або повний кастом з редактором. Кастомний редактор — окрема задача на 3-5 днів.
Посилання на візитку та web-fallback
https://mycard.app/ivan — при відкритті з мобільного з встановленим додатком → deep link в додаток. Без додатку → красива web-сторінка з кнопкою «Скачати vCard». SEO-значимі Open Graph теги для попереду в мессенджерах.
Терміни
Базовий додаток (профіль, QR, посилання, експорт в контакти) — 3-5 днів. З NFC-записом та читанням — ще 1-2 дня. Вартість розраховується індивідуально.







