# Send emoji reactions

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

> The code on this page works with either the **default UI** or the **custom UI**.

Send and receive emoji reactions and feedback with the SDK with the `MobileRTCMeetingService+Reaction.h` category.

```swift
let meetingService = MobileRTC.shared().getMeetingService()
```

```objectivec
MobileRTCMeetingService *meetingService = [[MobileRTC sharedRTC] getMeetingService];
```

To send reactions, first check that reactions are supported in the current meeting. Then, use `sendEmojiReaction`, which returns a `MobileRTCSDKError` object.

```swift
if (meetingService?.isEmojiReactionEnabled() == true) {
    let error = meetingService?.send(.clap)
    switch error {
    case .success:
        print("Send reaction succeeded.")
    default:
        print("Send error: \(String(describing: error))")
    }
}
```

```objectivec
if ([meetingService isEmojiReactionEnabled]) {
    [meetingService sendEmojiReaction:MobileRTCEmojiReactionType_Clap];
}
```

## Supported emojis and feedback

The `MobileRTCEmojiReactionType` enum currently supports only these unicode emojis.

-   `Clap`
-   `Thumbsup`
-   `Heart`
-   `Joy`
-   `Openmouth`
-   `Tada`

Emoji feedback is supported, but is done through a separate method.

```swift
meetingService?.send(.yes)
```

```objectivec
[meetingService sendEmojiFeedback:MobileRTCEmojiFeedbackType_Yes];
```

These feedback types are supported.

-   `MobileRTCEmojiFeedbackType_Yes`
-   `MobileRTCEmojiFeedbackType_No`
-   `MobileRTCEmojiFeedbackType_SpeedUp`
-   `MobileRTCEmojiFeedbackType_SlowDown`
-   `MobileRTCEmojiFeedbackType_Away`

## Get reaction and feedback updates

To get updates related to emoji reaction and feedback, implement the relevant callbacks for the `MobileRTCMeetingServiceDelegate` protocol and set it as the delegate property.

```swift
func onEmojiReactionReceived(_ userId: UInt, reactionType type: MobileRTCEmojiReactionType, reactionSkinTone skinTone: MobileRTCEmojiReactionSkinTone) {
    // emoji reaction received: userID=\(userId) type=\(type), SkinTone=\(skinTone)
}

func onEmojiReactionReceived(inWebinar type: MobileRTCEmojiReactionType) {
    // emoji reaction received in webinar: type=\(type)
}

func onEmojiFeedbackReceived(_ userId: UInt, feedbackType type: MobileRTCEmojiFeedbackType) {
    // emoji feedback received: userID=\(userId) type=\(type)
}

func onEmojiFeedbackCanceled(_ userId: UInt) {
    emoji canceled: userID=\(userId)
}

…

meetingService.delegate = self
```

```objectivec
- (void)onEmojiReactionReceived:(NSUInteger)userId reactionType:(MobileRTCEmojiReactionType)type reactionSkinTone:(MobileRTCEmojiReactionSkinTone)skinTone
{
    NSLog(@"Emoji reaction received: userID=%@ type=%@, SkinTone=%@",@(userId), @(type), @(skinTone));
}

- (void)onEmojiReactionReceivedInWebinar:(MobileRTCEmojiReactionType)type
{
    NSLog(@"Emoji reaction received in webinar: type=%@", @(type));
}

- (void)onEmojiFeedbackReceived:(NSUInteger)userId feedbackType:(MobileRTCEmojiFeedbackType)type
{
    NSLog(@"Emoji feedback received: userID=%@ type=%@",@(userId), @(type));
}

- (void)onEmojiFeedbackCanceled:(NSUInteger)userId
{
    NSLog(@"Emoji canceled: userID=%@",@(userId));
}

…

meetingService.delegate = self;
```

These callbacks are triggered when any participant sends a reaction or feedback in a meeting with the user ID of the participant who sent or canceled the reaction or feedback. There is also a dedicated callback for when webinar attendees anonymously send reactions.

---
