> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-ios-ui-kit-sdk-fixes.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Transient Messages

> Guide to sending real-time only transient messages using the CometChat iOS SDK that are not persisted.

<Info>
  **Quick Reference for AI Agents & Developers**

  * **Send transient:** `CometChat.sendTransientMessage(message:)` — pass `TransientMessage(receiverID:receiverType:data:)`
  * **Receive transient:** `onTransientMessageReceived(_:)` in message listener delegate
  * **Note:** Transient messages are NOT saved — receiver must be online
  * **Use cases:** Live location sharing, real-time indicators, ephemeral data
  * **Related:** [Send Message](/sdk/ios/send-message) · [Typing Indicators](/sdk/ios/typing-indicators) · [Messaging Overview](/sdk/ios/messaging-overview)
</Info>

## Key Characteristics

| Characteristic  | Description                      |
| --------------- | -------------------------------- |
| Fire-and-forget | No success/failure callbacks     |
| NOT persisted   | Cannot be retrieved from history |
| Real-time only  | Receiver must be online          |
| No receipts     | No delivery/read receipts        |

***

## Use Cases

| Use Case              | Description                            |
| --------------------- | -------------------------------------- |
| Live reactions        | Heart, thumbs up, emoji animations     |
| Live location         | Real-time location sharing             |
| Ephemeral indicators  | Temporary status updates               |
| Custom real-time data | Any data that doesn't need persistence |

***

## Send Transient Message (User)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let data: [String: Any] = ["LIVE_REACTION": "heart", "timestamp": Date().timeIntervalSince1970]
    let transientMessage = TransientMessage(receiverID: "cometchat-uid-2", receiverType: .user, data: data)
    CometChat.sendTransientMessage(message: transientMessage)

    // Note: Fire-and-forget - no success/failure callback
    // Message is NOT persisted - receiver must be online
    ```
  </Tab>

  <Tab title="Objective C">
    ```objc theme={null}
    NSDictionary *data = @{@"LIVE_REACTION": @"heart"};
    TransientMessage *transientMessage = [[TransientMessage alloc] initWithReceiverID:@"cometchat-uid-2" receiverType:ReceiverTypeUser data:data];
    [CometChat sendTransientMessageWithMessage:transientMessage];
    ```
  </Tab>
</Tabs>

<Accordion title="Sample Payloads - Transient Message (User)">
  <Tabs>
    <Tab title="Request">
      **Method:** `CometChat.sendTransientMessage(message:)`

      | Parameter    | Type                     | Value                                                        |
      | ------------ | ------------------------ | ------------------------------------------------------------ |
      | receiverID   | `String`                 | `"cometchat-uid-2"`                                          |
      | receiverType | `CometChat.ReceiverType` | `.user`                                                      |
      | data         | `[String: Any]`          | `["LIVE_REACTION": "heart", "timestamp": 1772028567.875231]` |
    </Tab>

    <Tab title="Sent">
      **Message Sent:**

      | Parameter    | Type            | Value                                                        |
      | ------------ | --------------- | ------------------------------------------------------------ |
      | receiverID   | `String`        | `"cometchat-uid-2"`                                          |
      | receiverType | `String`        | `"user"`                                                     |
      | data         | `[String: Any]` | `["LIVE_REACTION": "heart", "timestamp": 1772028567.875231]` |

      **Receiver Will Get:**

      | Delegate Method                   | Description                         |
      | --------------------------------- | ----------------------------------- |
      | `onTransisentMessageReceived(_:)` | Called with TransientMessage object |
    </Tab>
  </Tabs>
</Accordion>

***

## Send Transient Message (Group)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let data: [String: Any] = ["LIVE_REACTION": "thumbsup", "timestamp": Date().timeIntervalSince1970]
    let transientMessage = TransientMessage(receiverID: "cometchat-guid-1", receiverType: .group, data: data)
    CometChat.sendTransientMessage(message: transientMessage)
    ```
  </Tab>
</Tabs>

<Accordion title="Sample Payloads - Transient Message (Group)">
  <Tabs>
    <Tab title="Request">
      **Method:** `CometChat.sendTransientMessage(message:)`

      | Parameter    | Type                     | Value                                                            |
      | ------------ | ------------------------ | ---------------------------------------------------------------- |
      | receiverID   | `String`                 | `"cometchat-guid-1"`                                             |
      | receiverType | `CometChat.ReceiverType` | `.group`                                                         |
      | data         | `[String: Any]`          | `["LIVE_REACTION": "thumbsup", "timestamp": 1772028570.0602489]` |
    </Tab>

    <Tab title="Sent">
      **Message Sent:**

      | Parameter    | Type            | Value                                                            |
      | ------------ | --------------- | ---------------------------------------------------------------- |
      | receiverID   | `String`        | `"cometchat-guid-1"`                                             |
      | receiverType | `String`        | `"group"`                                                        |
      | data         | `[String: Any]` | `["LIVE_REACTION": "thumbsup", "timestamp": 1772028570.0602489]` |

      **Receiver Will Get:**

      | Delegate Method                   | Description                         |
      | --------------------------------- | ----------------------------------- |
      | `onTransisentMessageReceived(_:)` | Called with TransientMessage object |
    </Tab>
  </Tabs>
</Accordion>

***

## Send Live Reaction

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let data = ["LIVE_REACTION": "heart", "type": "live_reaction"]
    let transientMessage = TransientMessage(receiverID: "cometchat-uid-2", receiverType: .user, data: data)
    CometChat.sendTransientMessage(message: transientMessage)
    ```
  </Tab>
</Tabs>

<Accordion title="Sample Payloads - Live Reaction">
  <Tabs>
    <Tab title="Request">
      **Method:** `CometChat.sendTransientMessage(message:)`

      | Parameter           | Type                     | Value               |
      | ------------------- | ------------------------ | ------------------- |
      | receiverID          | `String`                 | `"cometchat-uid-2"` |
      | receiverType        | `CometChat.ReceiverType` | `.user`             |
      | data.LIVE\_REACTION | `String`                 | `"heart"`           |
      | data.type           | `String`                 | `"live_reaction"`   |
    </Tab>

    <Tab title="Sent">
      **Message Sent:**

      | Parameter    | Type            | Value                                                 |
      | ------------ | --------------- | ----------------------------------------------------- |
      | receiverID   | `String`        | `"cometchat-uid-2"`                                   |
      | receiverType | `String`        | `"user"`                                              |
      | data         | `[String: Any]` | `["LIVE_REACTION": "heart", "type": "live_reaction"]` |
    </Tab>
  </Tabs>
</Accordion>

### Common Live Reactions

| Reaction    | Value          |
| ----------- | -------------- |
| Heart       | `"heart"`      |
| Thumbs Up   | `"thumbsup"`   |
| Thumbs Down | `"thumbsdown"` |
| Laugh       | `"laugh"`      |
| Wow         | `"wow"`        |
| Sad         | `"sad"`        |
| Angry       | `"angry"`      |

***

## Send Live Location

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let data: [String: Any] = [
        "type": "live_location",
        "latitude": 37.7749,
        "longitude": -122.4194,
        "accuracy": 10.0,
        "timestamp": Date().timeIntervalSince1970
    ]
    let transientMessage = TransientMessage(receiverID: "cometchat-uid-2", receiverType: .user, data: data)
    CometChat.sendTransientMessage(message: transientMessage)
    ```
  </Tab>
</Tabs>

<Accordion title="Sample Payloads - Live Location">
  <Tabs>
    <Tab title="Request">
      **Method:** `CometChat.sendTransientMessage(message:)`

      | Parameter      | Type                     | Value               |
      | -------------- | ------------------------ | ------------------- |
      | receiverID     | `String`                 | `"cometchat-uid-2"` |
      | receiverType   | `CometChat.ReceiverType` | `.user`             |
      | data.type      | `String`                 | `"live_location"`   |
      | data.latitude  | `Double`                 | `37.7749`           |
      | data.longitude | `Double`                 | `-122.4194`         |
      | data.accuracy  | `Double`                 | `10.0`              |
      | data.timestamp | `Double`                 | `1772028575.777206` |
    </Tab>

    <Tab title="Sent">
      **Message Sent:**

      | Parameter    | Type            | Value                    |
      | ------------ | --------------- | ------------------------ |
      | receiverID   | `String`        | `"cometchat-uid-2"`      |
      | receiverType | `String`        | `"user"`                 |
      | data         | `[String: Any]` | Location data dictionary |
    </Tab>
  </Tabs>
</Accordion>

### Live Location Data Properties

| Property  | Type     | Description                 |
| --------- | -------- | --------------------------- |
| type      | `String` | `"live_location"`           |
| latitude  | `Double` | Latitude coordinate         |
| longitude | `Double` | Longitude coordinate        |
| accuracy  | `Double` | Location accuracy in meters |
| timestamp | `Double` | Unix timestamp              |

***

## Real-time Transient Message Events

To receive transient messages, implement `CometChatMessageDelegate`:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension YourViewController: CometChatMessageDelegate {
        
        func onTransisentMessageReceived(_ message: TransientMessage) {
            print("Transient message received")
            print("Sender UID: \(message.sender?.uid ?? "")")
            print("Sender Name: \(message.sender?.name ?? "")")
            print("Receiver ID: \(message.receiverID)")
            print("Receiver Type: \(message.receiverType)")
            print("Data: \(message.data)")
            
            // Handle specific data types
            if let reaction = message.data["LIVE_REACTION"] as? String {
                print("Live Reaction: \(reaction)")
                // Show reaction animation
            }
            
            if let type = message.data["type"] as? String, type == "live_location" {
                let lat = message.data["latitude"] as? Double ?? 0
                let lon = message.data["longitude"] as? Double ?? 0
                print("Live Location: \(lat), \(lon)")
                // Update map marker
            }
        }
    }

    // Register the delegate:
    CometChat.messagedelegate = self
    ```
  </Tab>

  <Tab title="Objective C">
    ```objc theme={null}
    - (void)onTransisentMessageReceived:(TransientMessage *)message {
        NSLog(@"TransientMessage received: %@", [message stringValue]);
    }
    ```
  </Tab>
</Tabs>

<Accordion title="Sample Payloads - Receive Transient Message">
  <Tabs>
    <Tab title="Delegate Payload">
      **Method:** `onTransisentMessageReceived(_ message: TransientMessage)`

      **TransientMessage Object:**

      | Parameter    | Type            | Value                        |
      | ------------ | --------------- | ---------------------------- |
      | sender.uid   | `String`        | `"cometchat-uid-1"`          |
      | sender.name  | `String`        | `"John Doe"`                 |
      | receiverID   | `String`        | `"cometchat-uid-2"`          |
      | receiverType | `ReceiverType`  | `.user`                      |
      | data         | `[String: Any]` | `["LIVE_REACTION": "heart"]` |
    </Tab>
  </Tabs>
</Accordion>

***

## TransientMessage Object Properties

| Property       | Type            | Description                         |
| -------------- | --------------- | ----------------------------------- |
| `sender`       | `User?`         | User who sent the transient message |
| `receiverID`   | `String`        | UID of user or GUID of group        |
| `receiverType` | `ReceiverType`  | `.user` or `.group`                 |
| `data`         | `[String: Any]` | Custom data dictionary              |

<Note>
  Transient messages are NOT persisted and cannot be retrieved later. The receiver must be online to receive them. There are no delivery/read receipts for transient messages.
</Note>
