<!--
{
  "availability" : [
    "iOS: 26.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "TelephonyMessagingKit",
  "identifier" : "/documentation/TelephonyMessagingKit/RCSService",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "TelephonyMessagingKit"
    ],
    "preciseIdentifier" : "s:21TelephonyMessagingKit10RCSServiceC"
  },
  "title" : "RCSService"
}
-->

# RCSService

A class that provides an interface for performing RCS operations.

```
final class RCSService
```

## Overview

Use the [`TelephonyMessagingSession`](/documentation/TelephonyMessagingKit/TelephonyMessagingSession) property [`rcsService`](/documentation/TelephonyMessagingKit/TelephonyMessagingSession/rcsService) to get an instance of this class.

An `RCSService` sends and receives different kinds of messages, distinguished by the [`content`](/documentation/TelephonyMessagingKit/RCSMessage/content-swift.property) property of [`RCSMessage`](/documentation/TelephonyMessagingKit/RCSMessage):

- [`RCSMessage.Text`](/documentation/TelephonyMessagingKit/RCSMessage/Text): Plain text.
- [`RCSMessage.FileTransfer`](/documentation/TelephonyMessagingKit/RCSMessage/FileTransfer): Incoming or outgoing file transfer. To send a file to a receipient, call the [`upload(_:)`](/documentation/TelephonyMessagingKit/RCSService/upload(_:)): method, then send a message of this type. To receive a file, handle the incoming message from the [`incomingMessageNotifications`](/documentation/TelephonyMessagingKit/RCSService/incomingMessageNotifications) asynchronous sequence, and use its metadata to call [`download(_:)`](/documentation/TelephonyMessagingKit/RCSService/download(_:)).
- [`RCSMessage.GeolocationPush`](/documentation/TelephonyMessagingKit/RCSMessage/GeolocationPush): The sender’s location, as indicated by a latitude and longitude pair.
- [`RCSMessage.ComposingIndicator`](/documentation/TelephonyMessagingKit/RCSMessage/ComposingIndicator): An indicator that the sender is currently composing a message. Use this content type to provide “is typing” indicators to recipients.
- [`RCSMessage.DispositionNotification`](/documentation/TelephonyMessagingKit/RCSMessage/DispositionNotification): An update regarding the processing of a message by the recipient app. This includes things like whether delivery suceeded or failed, and whether the app displayed the message to the recipient.

Use the various overloads of `sendMessage(_:to:using:messageID)` to send messages of these types to recipients.
The following example shows how to send a plain text message with [`sendMessage(_:to:using:messageID:)`](/documentation/TelephonyMessagingKit/RCSService/sendMessage(_:to:using:messageID:)-70q7h):

```swift
let service = TelephonyMessagingSession.shared.rcsService

let cellularServices = try TelephonyMessagingSession.shared.cellularServices
let cellularServiceID = cellularServices[0].id

guard service.isViable(for: cellularServiceID) else { return }

let message = RCSMessage.Text("Hello there.")
guard let handle = RCSHandle.phoneNumber(SAMPLE_PHONE_NUMBER) else { return }
try await service.sendMessage(message,
                   to: handle,
                   using:cellularServiceID,
                   messageID: RCSMessageID(rawValue: SAMPLE_RCS_MESSAGE_ID))
```

To receive messages, iterate over the [`incomingMessageNotifications`](/documentation/TelephonyMessagingKit/RCSService/incomingMessageNotifications) asynchronous sequence with a `for`-`await`-`in` loop, then handle each notification based on its message content type, like this:

```swift
let service = TelephonyMessagingSession.shared.rcsService

let incomingMessageNotifications = try service.incomingMessageNotifications
Task {
    for await notification in incomingMessageNotifications {
        let receivedMessage = notification.message
        switch receivedMessage.content {
            case .text(let text): // ...
            case .fileTransfer(let fileTransfer): // ...
            case .geolocationPush(let geolocationPush): // ...
            case .dispositionNotification(let dispositionNotification): // ...
            case .composingIndicator(let composingIndicator): // ...
        }
    }
}
```

## Topics

### Determining service viabililty

[`isViable(for:)`](/documentation/TelephonyMessagingKit/RCSService/isViable(for:))

Queries whether the device can perform RCS operations at this time.

[`viabilityNotifications`](/documentation/TelephonyMessagingKit/RCSService/viabilityNotifications)

An asynchronous sequence of service viability notifications produced by the service.

[`RCSService.ViabilityNotification`](/documentation/TelephonyMessagingKit/RCSService/ViabilityNotification)

A notification that indicates whether RCS is viable for a given cellular service.

### Managing RCS configuration

[`configuration(for:)`](/documentation/TelephonyMessagingKit/RCSService/configuration(for:))

Retrieves the RCS configuration for the specified cellular service.

[`RCSService.Configuration`](/documentation/TelephonyMessagingKit/RCSService/Configuration)

A structure that contains RCS configuration parameters, such as timing and size limits.

### Sending messages

[`sendMessage(_:to:using:messageID:)`](/documentation/TelephonyMessagingKit/RCSService/sendMessage(_:to:using:messageID:)-70q7h)

Sends a text message to a specified destination.

[`RCSMessage.Text`](/documentation/TelephonyMessagingKit/RCSMessage/Text)

A structure that represents text content in an RCS message.

[`sendMessage(_:to:using:messageID:)`](/documentation/TelephonyMessagingKit/RCSService/sendMessage(_:to:using:messageID:)-63zct)

Sends a file transfer message to a specified destination.

[`RCSMessage.FileTransfer`](/documentation/TelephonyMessagingKit/RCSMessage/FileTransfer)

A structure that represents file transfer content in an RCS message.

[`sendMessage(_:to:using:messageID:)`](/documentation/TelephonyMessagingKit/RCSService/sendMessage(_:to:using:messageID:)-9i178)

Sends a composing indicator message to a specified destination.

[`RCSMessage.ComposingIndicator`](/documentation/TelephonyMessagingKit/RCSMessage/ComposingIndicator)

A structure that represents RFC 3994 composing indicator content in an RCS message.

[`sendMessage(_:to:using:messageID:)`](/documentation/TelephonyMessagingKit/RCSService/sendMessage(_:to:using:messageID:)-y1z)

Sends a geolocation push message to a specified destination.

[`RCSMessage.GeolocationPush`](/documentation/TelephonyMessagingKit/RCSMessage/GeolocationPush)

A structure that represents geolocation push content in an RCS message.

[`sendMessage(_:to:using:messageID:group:)`](/documentation/TelephonyMessagingKit/RCSService/sendMessage(_:to:using:messageID:group:))

Sends the disposition for an incoming message.

[`RCSMessage.DispositionNotification`](/documentation/TelephonyMessagingKit/RCSMessage/DispositionNotification)

A structure that represents disposition notification content in an RCS message, such as whether delivery succeeded or failed.

[`RCSHandle`](/documentation/TelephonyMessagingKit/RCSHandle)

An enumeration that represents an RCS destination or sender.

[`CellularServiceID`](/documentation/TelephonyMessagingKit/CellularServiceID)

An opaque identifier that represents the cellular service for which to provide operations.

[`RCSMessageID`](/documentation/TelephonyMessagingKit/RCSMessageID)

A structure that represents an RCS message identifier.

### Sending encrypted messages

[`sendEncryptedMessageRequest(_:)`](/documentation/TelephonyMessagingKit/RCSService/sendEncryptedMessageRequest(_:))

Sends an encrypted message to a specified destination.

[`RCSService.SendEncryptedMessageRequest`](/documentation/TelephonyMessagingKit/RCSService/SendEncryptedMessageRequest)

A structure that represents a request to send an encrypted message.

[`RCSService.SendEncryptedMessageRequest.Result`](/documentation/TelephonyMessagingKit/RCSService/SendEncryptedMessageRequest/Result)

A structure that represents the result of sending an encrypted message.

### Receiving messages

[`incomingMessageNotifications`](/documentation/TelephonyMessagingKit/RCSService/incomingMessageNotifications)

An asynchronous sequence of incoming message notifications produced by this service.

[`RCSService.IncomingMessageNotification`](/documentation/TelephonyMessagingKit/RCSService/IncomingMessageNotification)

A structure that contains information about an incoming RCS message.

[`RCSMessage`](/documentation/TelephonyMessagingKit/RCSMessage)

A structure that contains an RCS message’s content and metadata.

### Revoking messages

[`revokeMessage(_:)`](/documentation/TelephonyMessagingKit/RCSService/revokeMessage(_:))

Requests revocation of an RCS message.

[`RCSService.RevokeMessageRequest`](/documentation/TelephonyMessagingKit/RCSService/RevokeMessageRequest)

A structure that respresents a request to revoke a previously sent message.

### Transferring files

[`upload(_:)`](/documentation/TelephonyMessagingKit/RCSService/upload(_:))

Uploads a file to the RCS content server.

[`RCSService.FileUploadRequest`](/documentation/TelephonyMessagingKit/RCSService/FileUploadRequest)

A structure that represents an RCS file upload request.

[`RCSService.FileUploadRequest.Metadata`](/documentation/TelephonyMessagingKit/RCSService/FileUploadRequest/Metadata)

A structure that contains upload metadata from the content server.

[`download(_:)`](/documentation/TelephonyMessagingKit/RCSService/download(_:))

Downloads a file from the RCS content server.

[`RCSService.FileDownloadRequest`](/documentation/TelephonyMessagingKit/RCSService/FileDownloadRequest)

A structure that represents an RCS file download request.

[`RCSService.FileDownloadRequest.Metadata`](/documentation/TelephonyMessagingKit/RCSService/FileDownloadRequest/Metadata)

A structure that contains download metadata from the content server.

### Receiving handle updates

[`remoteHandleUpdates`](/documentation/TelephonyMessagingKit/RCSService/remoteHandleUpdates)

An asynchronous sequence of remote handle updates produced by this service.

[`RCSService.RemoteHandleUpdate`](/documentation/TelephonyMessagingKit/RCSService/RemoteHandleUpdate)

A structure that contains information about an update to a remote handle.

### Reporting spam

[`reportSpam(_:)`](/documentation/TelephonyMessagingKit/RCSService/reportSpam(_:))

Reports an RCS message as spam to the carrier and to partners.

[`RCSService.ReportSpamRequest`](/documentation/TelephonyMessagingKit/RCSService/ReportSpamRequest)

A structure that contains information about a spam reporting request for an RCS message.

### Managing group chats

[`createGroupChat(_:)`](/documentation/TelephonyMessagingKit/RCSService/createGroupChat(_:))

Creates a group with a list of participants and a specified subject.

[`RCSService.CreateGroupChatRequest`](/documentation/TelephonyMessagingKit/RCSService/CreateGroupChatRequest)

Structure representing a request for creating a group chat.

[`leaveGroupChat(_:)`](/documentation/TelephonyMessagingKit/RCSService/leaveGroupChat(_:))

Leave a group chat.

[`RCSService.LeaveGroupChatRequest`](/documentation/TelephonyMessagingKit/RCSService/LeaveGroupChatRequest)

Structure representing a request to leave a group chat.

[`addGroupChatParticipants(_:)`](/documentation/TelephonyMessagingKit/RCSService/addGroupChatParticipants(_:))

Adds participants to a group chat.

[`RCSService.AddGroupChatParticipantsRequest`](/documentation/TelephonyMessagingKit/RCSService/AddGroupChatParticipantsRequest)

Structure representing a request for adding participants to a group chat.

[`removeGroupChatParticipants(_:)`](/documentation/TelephonyMessagingKit/RCSService/removeGroupChatParticipants(_:))

Removes participants from a group chat.

[`RCSService.RemoveGroupChatParticipantsRequest`](/documentation/TelephonyMessagingKit/RCSService/RemoveGroupChatParticipantsRequest)

Structure representing a request for removing participants from a group chat.

[`changeGroupChatSubject(_:)`](/documentation/TelephonyMessagingKit/RCSService/changeGroupChatSubject(_:))

Changes subject of a group.

[`RCSService.ChangeGroupChatSubjectRequest`](/documentation/TelephonyMessagingKit/RCSService/ChangeGroupChatSubjectRequest)

Structure representing a request for changing a group chat’s subject.

[`groupChatEvents`](/documentation/TelephonyMessagingKit/RCSService/groupChatEvents)

Returns an asynchronous sequence of incoming group chat notifications produced by this service.

[`RCSService.GroupChatEvent`](/documentation/TelephonyMessagingKit/RCSService/GroupChatEvent)

Enumeration representing an RCS group chat event.

### Discovering remote capabilities

[`remoteCapabilities(for:)`](/documentation/TelephonyMessagingKit/RCSService/remoteCapabilities(for:))

Requests remote capability discovery for a given handle

[`RCSService.RemoteCapabilitiesRequest`](/documentation/TelephonyMessagingKit/RCSService/RemoteCapabilitiesRequest)

A structure representing a request to retrieve the capabilities of a remote handle.

[`RCSService.RemoteCapabilities`](/documentation/TelephonyMessagingKit/RCSService/RemoteCapabilities)

Structure representing the capabilities of a remote handle.

### Responding to business suggestions

[`sendSuggestionResponse(_:)`](/documentation/TelephonyMessagingKit/RCSService/sendSuggestionResponse(_:))

Sends a response for a business suggestion.

[`RCSService.SuggestionResponse`](/documentation/TelephonyMessagingKit/RCSService/SuggestionResponse)

Structure representing a response to a business suggestion.

[`sendDeviceSpecifics(to:using:messageID:)`](/documentation/TelephonyMessagingKit/RCSService/sendDeviceSpecifics(to:using:messageID:))

Sends device specifics in response to a suggested action to send device specifics.

### Retrieving business information

[`businessInformation(for:)`](/documentation/TelephonyMessagingKit/RCSService/businessInformation(for:))

Requests business information for a specified handle.

[`RCSService.BusinessInformationRequest`](/documentation/TelephonyMessagingKit/RCSService/BusinessInformationRequest)

A structure representing a request to retrieve information about a business.

[`RCSService.Business`](/documentation/TelephonyMessagingKit/RCSService/Business)

Structure containing details about a business.

### Handling errors

[`RCSService.Error`](/documentation/TelephonyMessagingKit/RCSService/Error)

A type to define errors that can occur when performing RCS operations.

### Supporting types

[`RCSService.GroupChatEndedEvent`](/documentation/TelephonyMessagingKit/RCSService/GroupChatEndedEvent)

Event triggered when a group chat is ended.

[`RCSService.GroupChatParticipantsAddedEvent`](/documentation/TelephonyMessagingKit/RCSService/GroupChatParticipantsAddedEvent)

Event triggered when participants are added to a group.

[`RCSService.GroupChatParticipantsRemovedEvent`](/documentation/TelephonyMessagingKit/RCSService/GroupChatParticipantsRemovedEvent)

Event triggered when participants are removed from a group.

[`RCSService.GroupChatStartedEvent`](/documentation/TelephonyMessagingKit/RCSService/GroupChatStartedEvent)

Event triggered when group chat is started.

[`RCSService.GroupChatSubjectUpdatedEvent`](/documentation/TelephonyMessagingKit/RCSService/GroupChatSubjectUpdatedEvent)

Event triggered when a group’s subject is updated.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)