# Event Delegate

MeetTalk iOS SDK listens to various events on the client app. The event delegate **MeetTalkDelegate** replaces the usage of TapTalkDelegate from PowerTalk iOS SDK and also contains all the callbacks that TapTalkDelegate has.

All other [delegates from PowerTalk SDK](https://docs.taptalk.io/powertalk-chat-sdk-documentation/powertalk-ios/event-delegate) can still be implemented normally.

### MeetTalkDelegate

MeetTalkDelegate notifies general events from PowerTalk SDK and call/conference related events from MeetTalk SDK.

Not all of the delegate callbacks are required to be handled, but we strongly suggest to override `tapTalkRefreshTokenExpired` to handle authentication when the user's session has expired.

{% hint style="info" %}
**Note:** Make sure to add **`#import <MeetTalk/MeetTalk.h>`** before registering the delegate
{% endhint %}

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
#import <MeetTalk/MeetTalk.h>

@interface AppDelegate() <MeetTalkDelegate, ...>

...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [[MeetTalk sharedInstance] initWithAppKeyID: ...
  }];
  [[MeetTalk sharedInstance] setDelegate:self];
}

#pragma mark - Delegate
#pragma mark MeetTalkDelegate

#=============================================================================================
#pragma mark TapTalkDelegate callbacks
#=============================================================================================
- (void)tapTalkRefreshTokenExpired {
    // Authentication is needed
}

- (void)tapTalkDidTappedNotificationWithMessage:(TAPMessageModel *_Nonnull)message fromActiveController:(nullable UIViewController *)currentActiveController {
    // Handle tapped notification message
}

- (void)userLogout {
    // User has finished logging out from TapUI or TapTalk.logoutAndClearAllTapTalkData() process has completed
}

- (void)tapTalkUnreadChatRoomBadgeCountUpdated:(NSInteger)numberOfUnreadRooms {
    // Returns number of unread messages from the application
}

- (void)tapTalkDidRequestRemoteNotification {
    // Register for remote notification
    [[UIApplication sharedApplication] registerForRemoteNotifications];
}

#=============================================================================================
#pragma mark Call/conference notification callbacks
#=============================================================================================
- (void)meetTalkDidReceiveCallInitiatedNotificationMessage:(TAPMessageModel *_Nonnull)message
                                            conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Call Initiated" notification message is received
    // Will show incoming call by default if not implemented
}
                                            
- (void)meetTalkDidReceiveCallCancelledNotificationMessage:(TAPMessageModel *_Nonnull)message
                                            conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Call Cancelled" notification message is received                                        
}

- (void)meetTalkDidReceiveCallEndedNotificationMessage:(TAPMessageModel *_Nonnull)message
                                        conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Call Ended" notification message is received                                     
}

- (void)meetTalkDidReceiveRecipientAnsweredCallNotificationMessage:(TAPMessageModel *_Nonnull)message
                                                    conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Recipient Answered Call" notification message is received                           
}

- (void)meetTalkDidReceiveRecipientBusyNotificationMessage:(TAPMessageModel *_Nonnull)message
                                            conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Recipient is Busy" notification message is received                                 
}

- (void)meetTalkDidReceiveRecipientRejectedCallNotificationMessage:(TAPMessageModel *_Nonnull)message
                                                    conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Recipient Rejected Call" notification message is received
}

- (void)meetTalkDidReceiveRecipientMissedCallNotificationMessage:(TAPMessageModel *_Nonnull)message
                                                  conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Recipient Missed Call" notification message is received                                                  
}

- (void)meetTalkDidReceiveRecipientUnableToReceiveCallNotificationMessage:(TAPMessageModel *_Nonnull)message
                                                           conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Recipient is Unable to Receive Call" notification message is received                                                       
}

- (void)meetTalkDidReceiveActiveUserRejectedCallNotificationMessage:(TAPMessageModel *_Nonnull)message
                                                     conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Current/Active User Rejected Call" notification message is received 
}

- (void)meetTalkDidReceiveParticipantJoinedConferenceNotificationMessage:(TAPMessageModel *_Nonnull)message
                                                          conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Participant Joined Conference" notification message is received 
}

- (void)meetTalkDidReceiveParticipantLeftConferenceNotificationMessage:(TAPMessageModel *_Nonnull)message
                                                        conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Participant Left Conference" notification message is received 

}

- (void)meetTalkDidReceiveConferenceInfoUpdatedNotificationMessage:(TAPMessageModel *_Nonnull)message
                                                    conferenceInfo:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // A "Conference Info" notification message is received 
}

#=============================================================================================
#pragma mark Incoming call callbacks
#=============================================================================================
- (void)meetTalkDidReceiveIncomingCall:(TAPMessageModel *_Nonnull)message {
    // A new incoming call is received
}

- (void)meetTalkShowIncomingCallFailed:(TAPMessageModel *_Nonnull)message errorMessage:(NSString *)errorMessage {
    // MeetTalk SDK failed to show incoming call
}

- (void)meetTalkDidAnswerIncomingCall {
    // Current/active user answers the incoming call
    // Will join the incoming call by default if not implemented
}

- (void)meetTalkDidRejectIncomingCall {
    // Current/active user rejects the incoming call
    // Will close the incoming call by default if not implemented
}

- (void)meetTalkIncomingCallDisconnected {
    // Incoming call was closed
}

#=============================================================================================
#pragma mark Conference callbacks
#=============================================================================================
- (void)meetTalkDidDisconnectFromConference:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // Current/active user was disconnected from an ongoing conference call
}

- (void)meetTalkDidReconnectToConference:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // Current/active user successfully reconnected to ongoing conference call
}

- (void)meetTalkDidJoinConference:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // Current/active user successfully joined conference call
}

- (void)meetTalkConferenceTerminated:(MeetTalkConferenceInfo *_Nullable)conferenceInfo {
    // Ongoing conference call was terminated
}

#=============================================================================================
#pragma mark UI callbacks
#=============================================================================================
- (void)meetTalkChatBubbleCallButtonDidTapped:(TAPMessageModel *_Nonnull)message {
    // Call button in TapUI's chat room message bubble was tapped by user
    // Will initiate a new conference call by default if not implemented
}

...
  
@end
```

{% endtab %}
{% endtabs %}
