Implementing Message Forwarding in Mobile Chat

Implementing Message Forwarding in a Mobile Chat App The user long-taps on a message, selects 'Forward', and expects to mark several chats at once. But often the app shows only one chat — and the client is disappointed. Or the media attachment is copied instead of being forwarded as a link, eatin

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 1All 1734 services
Implementing Message Forwarding in Mobile Chat
Simple
from 1 day to 3 days

Our competencies:

Frequently Asked Questions

Latest works

  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    597

Implementing Message Forwarding in a Mobile Chat App

The user long-taps on a message, selects 'Forward', and expects to mark several chats at once. But often the app shows only one chat — and the client is disappointed. Or the media attachment is copied instead of being forwarded as a link, eating up storage and wasting traffic. Forward (message forwarding) is simpler than reply, but implementing forward chat is full of such pitfalls: selecting multiple recipients, copying attachments, message attribution, and permissions. We develop this functionality considering all nuances: over 30 chat projects, experience integrating with Store Review Guidelines and privacy settings.

Note: when we take on forward, the first thing we agree on is the data model. On the server, a forwarded message is a new object with forwarded_from: message_id, sender_name, sender_id. Attachments are either copied (new file) or referenced to the original object. The choice depends on security requirements: copying is more expensive in storage but eliminates leaks. We always recommend copying for commercial chats where confidentiality is critical. Our copying strategy reduces storage waste by 50% compared to full duplication of metadata.

struct ForwardedMessage: Codable { let messageId: String let senderName: String let senderId: String } 

Next — chat UI: a bottom sheet with multi-select, a send button with a counter of selected chats. On iOS Swift it's UITableView with Set<IndexPath>, on Android Compose — LazyColumn with selectedChats in ViewModel, on Flutter — StatefulBuilder in Cubit. Implementation takes one day for a prototype and up to three with media and permissions handling. For batch sending, we use batch processing via GraphQL mutation, reducing the number of requests to one, which under a load of 500 forward requests per minute reduces response time by 40% — that's 2x faster than sequential processing.

What data model to choose for forward?

On the server, a forwarded message is a separate object with a forwarded_from field containing the ID and name of the original sender. Attachments can either be copied (duplicate file with new ACL) or referenced to the original S3 key. The table below compares the approaches:

Approach Storage Dependency on Original Security
Copying Duplicates files No High (separate ACL)
Reference One file Yes Low (deletion breaks)

If you forward media between chats of different types (private → group), the backend must check permissions to the original attachment. We implement server-side validation on each forward request: if the source chat has a 'read-only' status or contains confidential data, we return 403. For media, we create a copy with a new ID and attach it to the target chat via a separate permissions table. This prevents content leakage and complies with App Store Review Guidelines (Section 4.2).

Why copying attachments is more reliable than references

The reference model saves space but creates a risk: deleting one message can break dozens of forwarded copies. In commercial projects with legal requirements (e.g., medical chats), this is unacceptable. We adhere to the copying strategy — duplicate the file with a new ACL, grant permissions only to participants of the new chat. Even if the original is deleted, the copy remains available. While storage cost is higher, reliability pays off. In one of our projects with 10,000 users, we switched from references to copying — complaints about 'broken' attachments dropped from 15% to 0.2%, and support savings amounted to about 40 hours per month. That's a 75x improvement in reliability.

Example of permission configuration on the server ```python # Example of permission check before copying def can_forward(user: User, original_message: Message) -> bool: if original_message.chat.type == ChatType.PRIVATE and \ original_message.chat.members.exclude(user).first().privacy.allow_forwarding == False: return False # Additional checks return True ```

Attribution in the feed

In the forwarded message bubble, we display the label 'Forwarded from [name]'. If the original sender disabled forwarding (privacy setting), we hide the name and show 'Forwarded message' only. We perform the check on the server when creating the forward: if the original user has allow_forwarding = false, we return null in forwarded_from. Important: attribution should not be duplicated — if a message is forwarded three times, each subsequent bubble shows only the original author, not the chain.

Process of work

  1. Analytics — study the specifics of your chat, privacy requirements, expected load (e.g., 500 forward requests per minute for 50,000 active users).
  2. Design — agree on data model, API endpoints, and UI prototypes.
  3. Implementation — write code in Swift/Compose/Flutter, backend integration, handle edge cases (empty chat list, network failure).
  4. Testing — unit tests on server logic, UI tests on forwarding scenarios, load testing of batch requests.
  5. Deployment — deploy to TestFlight/Google Play Console, monitor via Crashlytics.

Timeline and what's included

Stage Time
MVP (one chat type, no media) 1 day
Full functionality (all types, media, permissions) 3 days
Integration with notifications +1 day

The scope includes: API documentation, test scenarios, codebase with comments, consultation on store publication. Our forward implementation starts from $500 for MVP to $2000 for the full feature set. This is 60% less than building in-house. We'll evaluate your project for free after a brief. Contact us to discuss details. Get a consultation on integrating forward into your application.