Реалізація уведомлень про торги NFT в мобільному додатку
NFT продали на OpenSea за 2 ETH — власник не побачив сповіщення, тому що розпорядження на push не запросили при онбордингу, а polling кошелька працював з затримкою 5 хвилин. Для NFT-маркетплейсу це пряма втрата користувача.
Джерела подій для NFT-сповіщень
Основних сценаріїв кілька: продаж NFT з колекції в watchlist, листинг нового NFT за ціною нижче floor, прийняття офера, мінт нової колекції. Кожен потребує окремого джерела даних.
OpenSea надає Stream API (wss://stream.openseabeta.com/socket) з подіями item_listed, item_sold, offer_entered. Підписка по колекції або адресі кошелька. Це найчистіший варіант для Ethereum та Polygon.
Blur та Magic Eden мають власні API, але менш стабільні WebSocket-стрими — там частіше використовують polling через REST з частотою 15–30 секунд.
Для мультичейн-трекингу (Solana + ETH) зручніше агрегатори: Reservoir API (api.reservoir.tools) покриває більшість маркетплейсів та надає єдиний формат подій.
Архітектура доставки
Серверний підписник слухає WebSocket-стрім → при подієї перевіряє, є ли користувачи з цією адресою/колекцією в watchlist → формує персональний payload → надсилає через Firebase Admin SDK.
Підводний камінь — дубликати. OpenSea Stream може прислати одну подію кілька разів при переподключенні. Дедупликація через Redis: SET event:{event_id} 1 EX 300 NX — якщо ключ уже є, подію пропускаємо.
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.
Налаштування каналів сповіщень
На Android створюємо окремі notification channels:
-
nft_sales— продажі з watchlist -
nft_listings— новие листинги нижче floor -
nft_offers— офери на ваші NFT
Користувач може відключити кожен канал незалежно в системних налаштуваннях. Це стандартна практика для фінансових додатків.
На iOS використовуємо UNNotificationCategory з action buttons: "Подивитися" (відкриває маркетплейс) та "Видалити з watchlist".
Інтеграція в готовий додаток з існуючою серверною частиною займає 1–2 тижні. Якщо потрібна розробка серверного підписника з нуля — 3–4 тижні.







