Read Receipts in Mobile App Chat

NOVASOLUTIONS.TECHNOLOGY is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
Read Receipts in Mobile App Chat
Medium
~2-3 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Implementation of Message Read Receipts in Mobile Chat

Checkmarks in a messenger are not just UI. Behind them is state synchronization across devices, conflict resolution on unstable connections, and proper pagination history handling. Without proper architecture you get classic bugs: message shows "read" though user didn't see it, or status doesn't update after app restart.

Status Architecture

Typical model: each message has statussent, delivered, read. Stored on server, synchronized via WebSocket or polling. Most common mistake — marking message as read on receipt (onMessage), not on actual visibility on screen.

Correct approach — track visibility via:

  • Android: RecyclerView.OnScrollListener + LinearLayoutManager.findFirstCompletelyVisibleItemPosition() / findLastCompletelyVisibleItemPosition(). Mark as read only messages in visible area.
  • iOS: UITableView.indexPathsForVisibleRows + delegate method tableView(_:willDisplay:forRowAt:).
  • Flutter: VisibilityDetector from visibility_detector package or custom ScrollNotification listener.

Request batching is critical: don't send read for each message separately. Collect array of IDs and send one request with debounce 500–1000 ms after scroll stops.

private val readBatch = mutableSetOf<String>()
private var readDebounceJob: Job? = null

fun markVisible(messageIds: List<String>) {
    readBatch.addAll(messageIds)
    readDebounceJob?.cancel()
    readDebounceJob = viewModelScope.launch {
        delay(700)
        if (readBatch.isNotEmpty()) {
            sendReadReceipts(readBatch.toList())
            readBatch.clear()
        }
    }
}

Display and Synchronization

Status indicators on sender side update via WebSocket event or Firebase listener. Important: in group chats "read" means "read by all" or "read by at least one" — this is a business decision that affects data schema. Telegram model stores read_by_count, WhatsApp model — read_by: [userId].

History loading via pagination creates separate problem: if user scrolls old messages, they shouldn't auto-mark as read — only current ones. Solved via isAtBottom flag and conditional visibility tracking launch.

Offline behavior. Statuses sent offline must cache locally (Room / CoreData / Hive) and send on connection restore. Otherwise user reads messages but sender never learns about it.

What's Included

Design status schema for your chat type (personal / group), implement visibility tracking, request batching, WebSocket updates on sender side, offline caching. Check correctness on edge cases: fast scroll, simultaneous open on multiple devices, connection breaks.

Timeline: 3–6 days depending on chat complexity and backend readiness.