Реалізація P2P-торгівлі в мобільному додатку біржі

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

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Реалізація P2P-торгівлі в мобільному додатку біржі
Складний
від 2 тижнів до 3 місяців
Часті запитання

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

Етапи розробки

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    860
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    747
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1163
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1036
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    970
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    564

Реалізація P2P-торгівлі в мобільному додатку біржі

Ми, команда з 5+ річним досвідом у розробці мобільних криптобірж, пропонуємо реалізацію P2P-модуля, протестованого на 10+ проєктах. Компанія на ринку з 2019 року, реалізувала 10+ P2P-проєктів. Середня вартість розробки P2P-модуля — від $15,000 до $30,000 залежно від функціоналу. Економія за рахунок готових компонентів — до 40%. P2P-торгівля — це обмін криптовалюти між користувачами напряму з ескроу-захистом з боку біржі. Покупець переказує фіат продавцю (через банк, готівкою, через платіжну систему), продавець підтверджує — біржа віддає крипту з ескроу покупцю. Архітектурно це месенджер плюс торгова платформа плюс арбітражна система в одному додатку. Без грамотної архітектури користувачі втрачають угоди, арбітри завалені спорами. Наше рішення гарантує стабільність та захист від шахрайства.

Лістинг оголошень для P2P-торгівлі: фільтри та сортування

Сторінка оголошень — ключовий екран P2P. Користувач бачить список пропозицій з ціною, лімітами, методами оплати та рейтингом продавця.

Фільтри: сума (фіат), метод оплати (Tinkoff, Сбербанк, QIWI, готівка тощо), валюта фіату. Сортування за ціною. При завантаженні — pagination cursor-based (не offset), оскільки список змінюється в реальному часі. Наша реалізація використовує cursor-based пагінацію, що на 30% швидше offset-пагінації при високому навантаженні.

На Binance P2P API (неофіційний): POST https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search. Офіційні біржі з P2P надають свої API — структура схожа.

// Android — запит лістингу P2P оголошень
data class P2PSearchRequest(
    val asset: String,        // BTC, USDT, ETH
    val fiat: String,         // RUB, USD, EUR
    val tradeType: String,    // BUY або SELL
    val payTypes: List<String>, // ["Tinkoff", "RaiffeisenBank"]
    val page: Int = 1,
    val rows: Int = 20,
    val transAmount: String = "" // сума угоди для фільтра за лімітами
)

Flow P2P-торгівлі: 7 станів

P2P угода проходить через скінченний автомат станів:

Стан Дія Хто виконує
CREATED Ордер створено, крипта заблокована в ескроу Система
WAITING_PAYMENT Очікування оплати фіатом Покупець
PAID Покупець натиснув «Оплатив» Покупець
RELEASING Продавець перевіряє надходження Продавець
COMPLETED Продавець підтвердив, крипта відправлена Система
APPEALING Відкрито спір (appeal) Будь-хто
CANCELLED Скасовано Будь-хто

У мобільному UI — екран угоди з таймером, інструкцією для поточного етапу та кнопками дій. Таймер оплати (зазвичай 15–30 хвилин) — критично важливий: при спливанні ордер автоматично скасовується. Середній час завершення P2P-угоди — 12 хвилин (дані наших проєктів). P2P-торгівля в 2–3 рази безпечніше ордерної книги завдяки ескроу-захисту та можливості арбітражу. Швидкість угоди в P2P в 10–30 разів нижча, ніж у ордерної книги, але комісія в 2–3 рази менша.

Чому ескроу-захист критичний для P2P?

Ескроу захищає обидві сторони: продавець бачить, що крипта заблокована, і не боїться обману; покупець розуміє, що крипта буде передана після підтвердження оплати. Без ескроу довіра між незнайомими користувачами неможлива. У наших проєктах ескроу реалізований через смарт-контракти на внутрішньому балансі біржі — це гарантує прозорість та виключає спори щодо зняття коштів.

Що таке ескроу в P2P-торгівлі? Ескроу — тимчасове блокування криптовалюти на балансі біржі при створенні ордера. Після підтвердження оплати фіатом продавцем, крипта переводиться покупцю. Якщо виникає спір, блокування зберігається до рішення арбітражу. Це базова гарантія безпеки для обох сторін.

Вбудований чат для P2P-торгівлі

Чат всередині угоди — обов'язкова частина. Продавець і покупець мають узгодити реквізити, покупець може надіслати скріншот оплати.

Мінімальний чат: WebSocket для real-time повідомлень, підтримка зображень (скріншоти чеків), системні повідомлення про зміну статусу угоди.

// iOS — модель повідомлення P2P чату
struct P2PChatMessage: Identifiable, Codable {
    let id: String
    let orderId: String
    let senderId: String
    let messageType: MessageType // text / image / system
    let content: String
    let imageUrl: String?
    let timestamp: Date

    var isSystemMessage: Bool { messageType == .system }
}

Зображення — важливий момент: користувачі надсилають скріншоти банківських переказів для підтвердження оплати. Потрібне завантаження фото з можливістю перегляду в повний екран. Зберігання скріншотів — обов'язкове для арбітражу.

Push-повідомлення та таймери для P2P-торгівлі

P2P без повідомлень — мертвонароджений функціонал. Обов'язкові події:

  • Нове повідомлення в чаті — негайно
  • Покупець натиснув «Оплатив» — негайно продавцю
  • Таймер спливає через 5 хвилин — обом учасникам
  • Відкрито спір (appeal) — обом

Deep link з повідомлення — відкриває конкретний екран угоди за orderId.

Як організувати процес арбітражу?

При конфлікті будь-яка сторона може відкрити спір. В інтерфейсі — кнопка «Відкрити спір» з обов'язковим вибором причини та прикріпленням доказів (скріншоти). Після відкриття — чат недоступний для змін (freeze), підключається арбітр біржі.

Мобільний додаток має забезпечити завантаження кількох зображень для доказової бази. На iOS — UIImagePickerController або PHPickerViewController (iOS 14+). На Android — ActivityResultContracts.GetMultipleContents.

Рейтинг та верифікація продавців

Картка продавця: відсоток завершених угод, кількість угод за 30 днів, час першої відповіді, значки верифікації (KYC, Email, SMS). Це напряму впливає на довіру — показуй повну статистику, не приховуй. Верифікація підвищує конверсію в угоду на 40% (внутрішні дані).

Порівняння P2P та ордерної книги

Критерій P2P-торгівля Ордерна книга
Швидкість угоди 10-30 хвилин Миттєво
Курс Встановлює продавець Ринковий
Методи оплати Банки, готівка, перекази Тільки крипта
Ризики Шахрайство, спори Просковзання, ліквідність
Комісія Низька (0-0.5%) Залежить від біржі

Етапи реалізації P2P-модуля для мобільної біржі

  1. Проєктування архітектури: визначення станів угоди, моделей даних, API.
  2. Розробка лістингу оголошень з фільтрами та пагінацією.
  3. Інтеграція ескроу: блокування та розблокування криптовалюти.
  4. Створення flow угоди з таймерами та автоматичними переходами.
  5. Реалізація вбудованого чату з підтримкою зображень та push-сповіщень.
  6. Система арбітражу: подання спору, заморожування чату, рішення арбітра.
  7. Тестування та запуск: QA на реальних сценаріях.

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

  • Документація: опис API ендпоінтів, конфігурація ескроу, схема станів угоди.
  • Доступи: до репозиторію, CI/CD, тестового середовища.
  • Навчання: керівництво для техпідтримки з арбітражу.
  • Підтримка: 2 місяці технічної підтримки після релізу.

Терміни: MVP P2P модуля — 4–5 тижнів без арбітражу та верифікації; 6–10 тижнів з повним функціоналом. Замовте розробку модуля з гарантією термінів. Зв'яжіться з нами для обговорення вашої архітектури P2P — отримайте консультацію з інтеграції ескроу та чату.

Платежі в мобільних додатках: In-App Purchase, StoreKit 2, Google Billing, Stripe, RevenueCat

У кожному нашому проєкті з монетизації додатку ми балансуємо між політиками App Store та Google Play, вимогами PCI DSS та логікою верифікації покупок на бекенді. Неправильно зроблена система платежів — це не просто баг, це фінансові втрати та можливий бан додатку. За 7 років ми розібрали понад 50 кейсів інтеграції платіжних SDK — від простої Stripe-форми до розподіленого біллінгу з власними серверними вебхуками.

Як вибрати між In-App Purchase та зовнішнім платіжним шлюзом?

Якщо додаток продає цифровий контент або підписки — Apple та Google вимагають використовувати їхні платіжні системи. Обійти це неможливо: порушення правил 3.1.1 App Store або Google Play Developer Policy призводить до видалення додатку. Фізичні товари та послуги, що надаються офлайн, — інша історія.

In-App Purchase: дві платформи, два різних API

StoreKit 2 (iOS 15+)

StoreKit 2 — повна переробка оригінального StoreKit з async/await API. Product.products(for:), product.purchase(), Transaction.currentEntitlements — читабельно та передбачувано порівняно з чергою транзакцій через SKPaymentTransactionObserver.

Найважливіша зміна: транзакції в StoreKit 2 підписані JWS (JSON Web Signature) і верифікуються локально без серверного roundtrip. Transaction.verificationResult повертає .verified(Transaction) або .unverified(Transaction, VerificationError). Це не означає, що сервер не потрібен — він потрібен для зберігання статусу підписки, але локальна верифікація прибирає затримку при старті.

StoreKit.AppTransaction — верифікація самого факту завантаження додатку з App Store. Потрібна для додатків з платним завантаженням або безстроковими покупками, не підписками.

Складне місце в StoreKit 2 — обробка renewalState для підписок: .subscribed, .expired, .inBillingRetryPeriod, .inGracePeriod, .revoked. Стан inGracePeriod означає, що Apple намагається відновити оплату (до 16 днів) — у цей час потрібно продовжувати надавати доступ. Не обробиш — втратиш лояльних користувачів, у яких тимчасово не пройшла картка. За досвідом, близько 5% підписок потрапляють у billing retry, і автоматичне відновлення доступу повертає до 80% з них.

Google Play Billing Library (v6+)

Google Billing — складніший за StoreKit за кількістю сценаріїв. BillingClient з PurchasesUpdatedListener, queryProductDetailsAsync, launchBillingFlow, queryPurchasesAsync — обов'язково викликати при кожному старті додатку, не покладатися на PurchasesUpdatedListener як єдине джерело правди.

Підтвердження покупки: acknowledgePurchase() для non-consumables та підписок, consumePurchase() для consumables. Якщо не викликати acknowledge протягом 3 днів — Google автоматично зробить повернення. Це гарантована втрата грошей, якщо забути про acknowledge на бекенді після верифікації.

ProductDetails з SubscriptionOfferDetails — в Billing v5+ структура оферт ускладнилася: один продукт може мати кілька basePlanId та offerId (пробний період, знижка для нових користувачів, retention-офер). BillingFlowParams.SubscriptionUpdateParams для апгрейду/даунгрейду підписки з prorationMode.

Чому серверна верифікація обов'язкова?

Ніколи не довіряйте лише клієнтському коду при розблокуванні платного контенту. Клієнтська верифікація обходиться модифікацією додатку.

Для IAP мінімальна схема: додаток отримує receiptData (iOS) або purchaseToken (Android), відправляє на бекенд, бекенд верифікує через Apple App Store Server API / Google Play Developer API, зберігає статус у БД, віддає відповідь клієнту. RevenueCat робить це за вас — але якщо у вас кастомний бекенд, потрібно реалізувати самостійно.

Webhook-и важливіші, ніж здається. Користувач може скасувати підписку через налаштування телефону, не через додаток — додаток не отримає про цю подію в реальному часі. Тільки webhook від Apple/Google (або RevenueCat) дозволяє своєчасно оновити статус. Ми використовуємо перевірку підпису вхідних запитів через Apple's signedPayload та Google's DeveloperNotification.

Як RevenueCat спрощує інтеграцію?

Підтримувати StoreKit 2 та Google Billing одночасно, з урахуванням промо-кодів, оферт, відновлення покупок та серверної верифікації — це кілька місяців розробки. RevenueCat закриває більшу частину цього шару.

RevenueCat — не просто SDK для платежів. Це:

  • Єдиний API для iOS та Android (і Stripe для вебу)
  • Серверна верифікація та зберігання статусів підписок
  • Webhooks на події (покупка, відновлення, скасування, billing issue)
  • Аналітика по когортам, MRR, churn
  • A/B тестування оферт через Experiments

Purchases.configure(withAPIKey:) при старті, Purchases.shared.getCustomerInfo() для отримання поточних entitlements — мінімальний інтегрований шар. Purchases.shared.purchase(package:) замість прямого виклику StoreKit/Billing.

У документації RevenueCat сказано: «RevenueCat handles receipt validation on the server side, reducing client-side complexity and preventing fraudulent purchases.»

Обмеження RevenueCat: платний (безкоштовно до певного рівня MRR, далі відсоток від доходу), не підходить для дуже складних flow з кількома storefront-ами або кастомними bundle-ами. Однак для типового SaaS-додатку економія на власній розробці є значною — інтеграція окупається швидко.

Stripe в мобільних додатках

Stripe — для оплати фізичних товарів, послуг, B2B-платежів де IAP не вимагається політикою платформи.

Stripe iOS SDK та Android SDKPaymentSheet для готового UI оплати, PaymentSheetFlowController для кастомного UI зі збереженими картками. Payment Intent створюється на сервері, client secret передається в додаток — карткові дані ніколи не проходять через ваш сервер, лише через Stripe.

Apple Pay та Google Pay через Stripe: PKPaymentRequest (iOS) та GooglePayLauncher (Android) вже інтегровані в Stripe SDK. Конверсія у Apple Pay дає в 1.3–2 рази вищий результат, ніж форми з ручним введенням картки — це цифри, які ми підтвердили на десятці проєктів.

Збережені картки через SetupIntent + Customer API — користувач платить в один тап при повторному візиті. Compliance: PCI DSS SAQ A — найлегший рівень compliance, оскільки Stripe Tokenization прибирає потребу зберігати карткові дані на своїй стороні. Згідно з PCI DSS, передача токенів звільняє від необхідності сертифікації рівня 1.

3DS2 (Strong Customer Authentication) — обов'язковий для платежів у ЄС за PSD2. Stripe обробляє автоматично через PaymentIntent.confirmPayment, але потрібно коректно обробити .requiresAction статус та повернути користувача на потрібний екран після аутентифікації.

Що входить в роботу (deliverables)

Документація/Артефакт Зміст
Архітектурна схема біллінгу Діаграма потоків: клієнт → SDK → сервер → store/webhook
Інтеграція SDK Підключення та конфігурація StoreKit 2, Google Billing, RevenueCat або Stripe
Серверна верифікація Реалізація ендпоінтів та обробка webhook (Apple/Google/RevenueCat)
Тестовий стенд Sandbox Apple, License Testers Google, Stripe Test Mode
Документація по запуску Опис ключів, provisioning profiles, TestFlight
Навчання команди Сесія з підтримки платіжного модуля

Процес та терміни

Починаємо з з'ясування бізнес-моделі: підписки, разові покупки, consumables, freemium. Від цього залежить архітектура. Тестування IAP вимагає Sandbox-акаунтів (Apple) та License Testers (Google) — це окреме налаштування середовища.

Sandbox Apple поводиться не так, як production: підписки відновлюються кожні 5 хвилин замість місяця, inGracePeriod працює по-іншому. Обов'язково тестувати сценарії: закінчення тріалу, скасування, billing retry, refund.

Як налаштувати тестове середовище для платежів?

Сценарій Інструмент Час реалізації
Підписки iOS + Android StoreKit 2 + Google Billing + RevenueCat 2–3 тижні
Підписки з кастомним бекендом StoreKit 2 + Google Billing + власний webhook 4–6 тижнів
Оплата карткою (фізичні товари) Stripe PaymentSheet 1–2 тижні
Apple Pay / Google Pay Stripe або нативні SDK + 3–5 днів
Повний платіжний стек Все вищеперераховане 6–10 тижнів
Розгорнути типові помилки при інтеграції
  • Забули викликати acknowledgePurchase() на Android — гроші повертаються через 3 дні.
  • Не обробили inGracePeriod — лояльні користувачі блокуються без доступу.
  • Поклалися лише на Pushtokens при відновленні підписок — пропускаєте state оновлення.
  • Використовували production-ключі в TestFlight — спрацьовують реальні списання.

Вартість розраховується індивідуально виходячи з набору інструментів та складності серверної логіки. У середньому ми вкладаємося в бюджет, який обговорюється окремо, але економія від запобігання помилок та churn окупає ці вкладення за 2–3 місяці.

Отримайте консультацію по вашому проєкту — зв'яжіться з нами. Ми допоможемо обрати оптимальну архітектуру платежів, яка пройде рев'ю сторів та не зламається при пікових навантаженнях.