Реалізація повідомлень про торги NFT у мобільному додатку
Уявіть: на OpenSea продається ваш рідкісний NFT за 2 ETH, але push-повідомлення не приходить. Користувач дізнається про це через 5 хвилин, коли polling гаманця підтягує баланс. Для трейдера це — втрата потенційної угоди, для маркетплейсу — зниження LTV. Ми будуємо систему push-повідомлень, яка доставляє події про продажі, лістинги та офери в реальному часі із затримкою менше 1 секунди. За плечима — понад 10 років мобільної розробки та 50+ інтеграцій з криптоплатформами. Замовте консультацію — і ми підберемо оптимальну архітектуру під ваш стек.
Які джерела даних про торги NFT існують?
Основних сценаріїв кілька: продаж NFT з колекції у watchlist, новий лістинг з ціною нижче floor, прийняття офера, мінт нової колекції. Кожен вимагає окремого джерела даних та різного підходу до polling.
OpenSea надає Stream API (wss://stream.openseabeta.com/socket) з подіями item_listed, item_sold, offer_entered. Підписка здійснюється за колекцією або адресою гаманця. Це найшвидший варіант для Ethereum і Polygon — затримка менше 1 секунди. Документація OpenSea рекомендує використовувати цей стрім як основне джерело реального часу.
Blur та Magic Eden мають власні API, але їхні WebSocket-стріми менш стабільні. Тому ми частіше використовуємо polling через REST з інтервалом 15–30 секунд, що дає достатню точність для більшості сценаріїв.
Для мультичейн-трекінгу (Solana + ETH) зручніші агрегатори: Reservoir API (api.reservoir.tools) покриває більшість маркетплейсів і надає єдиний формат подій. Навантаження на сервер при цьому знижується на 30% за рахунок агрегації.
Архітектура доставки повідомлень
Серверний підписник слухає WebSocket-стрім → при події перевіряє, чи є користувачі з цією адресою/колекцією у watchlist → формує персональний payload → відправляє через Firebase Admin SDK. Ми використовуємо Go для підписника — він витримує до 10 000 подій на хвилину з мінімальним споживанням пам'яті.
Підводний камінь — дублікати. OpenSea Stream може надіслати одну подію кілька разів при перепідключенні. Дедуплікація через Redis: SET event:{event_id} 1 EX 300 NX — якщо ключ вже існує, подія ігнорується. Це скорочує кількість фантомних повідомлень на 95%.
Payload повідомлення:
{ "title": "Продано: Azuki #4821", "body": "2.4 ETH · OpenSea · щойно", "image": "https://cdn.azuki.com/4821.png", "data": { "nft_contract": "0xed5af...", "token_id": "4821", "marketplace": "opensea", "price_eth": "2.4" } } Зображення NFT у повідомленні — важлива деталь. На iOS це mutable-content: 1 + UNNotificationServiceExtension, яке завантажує картинку та прикріплює як UNNotificationAttachment. На Android — BigPictureStyle через NotificationCompat. Це збільшує CTR повідомлення на 40%.
Як налаштувати канали повідомлень для різних платформ?
На Android створюємо окремі notification channels:
-
nft_sales— продажі з watchlist -
nft_listings— нові лістинги нижче floor -
nft_offers— офери на ваші NFT
Користувач може вимкнути кожен канал незалежно в системних налаштуваннях. Це стандартна практика для фінансових додатків.
На iOS використовуємо UNNotificationCategory з action buttons: «Дивитися» (відкриває маркетплейс) та «Видалити з watchlist». Також додаємо підтримку critical alerts (через ентаплемент): вони пробивають режим «Не турбувати» для дійсно важливих подій — наприклад, якщо ваша ставка збирається бути перебита.
| Тип повідомлення | Затримка | Ручне вимкнення | Action buttons |
|---|---|---|---|
| Продаж | <1 сек | Канал nft_sales |
Дивитися |
| Новий лістинг | <15 сек | Канал nft_listings |
Дивитися, Видалити |
| Офер | <1 сек | Канал nft_offers |
Дивитися, Прийняти |
| Мінт нової колекції | <1 сек | Канал nft_mints |
Дивитися |
Чому важлива дедуплікація та гарантія доставки?
При перепідключенні WebSocket відкривається кілька з'єднань, і кожне може надіслати одну й ту саму подію. Без дедуплікації користувач отримає 3–4 однакових повідомлення — це веде до роздратування та вимкнення каналу. Ми використовуємо Redis з атомарною операцією SET NX та TTL 5 хвилин, що виключає дублі. Додатково на клієнті ми впроваджуємо FIFO-чергу з таймстампом: якщо подія прийшла двічі з різницею менше 30 секунд, друга ігнорується.
Що входить в роботу
- Аудит поточної архітектури та вимог до джерела подій
- Проектування серверного підписника та дедуплікації
- Розробка інтеграції з OpenSea/Reservoir/Blur
- Налаштування каналів повідомлень під iOS та Android
- Тестування затримки та надійності на реальних подіях (пікове навантаження 5000 подій/хв)
- Документація з експлуатації та моніторингу
- Гарантія 3 місяці на безперебійну роботу
Типові помилки при інтеграції повідомлень NFT
- Відсутність дедуплікації: копії подій забивають канал.
- Ігнорування rate limit OpenSea Stream (максимум 10 підписок на один сокет).
- Невірне розпізнавання image URL: CDN може віддавати WebP — на iOS потрібно конвертувати в PNG/JPG.
- Забувають про
provisioning profileз Push Notifications capability.
Інтеграція в готовий додаток з існуючою серверною частиною займає 1–2 тижні. Якщо потрібна розробка серверного підписника з нуля — 3–4 тижні. Отримайте консультацію щодо вашого проекту — оцінимо обсяг та терміни безкоштовно. Зв'яжіться з нами для детального аудиту.







