Change Mode - iOS
In a live stream, audience members usually join in RECV_ONLY mode, meaning they can only view and listen to the hosts. However, if a host invites an audience member to actively participate (e.g., to speak or present), the audience member can switch their mode to SEND_AND_RECV using the changeMode() method.
This guide explains how to use the changeMode() method and walks through a sample implementation where a host invites an audience member to become a host using PubSub.
changeMode()
- The 
changeMode()method from theMeetingclass allows a participant to switch between modes during a live stream—for example, from audience to host. 
Example
@IBAction func changeModeTapped(_ sender: UIButton) {
    meeting?.changeMode(to: "SEND_AND_RECV") { error in
        if let error = error {
            print("Failed to change mode: \(error.localizedDescription)")
        } else {
            print(" Mode changed to SEND_AND_RECV")
        }
    }
}
Implementation Guide
Step 1 : Create a Pubsub Topic
- Set up a PubSub topic to send a mode change request from the host to a specific audience member.
 
func inviteParticipantAsHost(participantId: String) {
    let topic = "REQUEST_TO_JOIN_AS_HOST_\(participantId)"
    let message = "SEND_AND_RECV"
    meeting?.pubSub.publish(topic: topic, message: message, options: nil)
    print("Invitation sent to participant: \(participantId)")
}
Step 2 : Create an Invite Button
- Add an "Invite on Stage" button for each audience member. When clicked, it publishes a PubSub message with the mode "SEND_AND_RECV" to that participant.
 
@objc func inviteButtonTapped(for participant: Participant) {
    // Only invite participants who are in RECV_ONLY mode
    guard participant.mode == "RECV_ONLY" else { return }
    inviteParticipantAsHost(participantId: participant.id)
}
Step 3 : Create a Listener to Change the Mode
- On the audience side, subscribe to the specific PubSub topic. When a mode request is received, update the participant’s mode using changeMode().
 
func setupModeChangeListener() {
    guard let localParticipantId = meeting?.localParticipant?.id else { return }
    
    // Subscribe to the specific topic for this participant
    let topic = "REQUEST_TO_JOIN_AS_HOST_\(localParticipantId)"
    
    meeting?.pubSub.subscribe(topic: topic) { message in
        if let mode = message.message as? String {
            // When a request is received, change the mode
            self.meeting?.changeMode(to: mode) { error in
                if let error = error {
                    print("Failed to change mode: \(error.localizedDescription)")
                } else {
                    print("Mode changed to \(mode)")
                }
            }
        }
    }
}
API Reference
The API references for all the methods and events utilized in this guide are provided below.
Got a Question? Ask us on discord

