# Join a meeting for any user > The code on this page works with either the **default UI** or the **custom UI**. This content applies to all user types. ## Join with a meeting number To join a meeting, retrieve a `MobileRTCMeetingService` instance from `ZoomSDK`. ```swift if let meetingService = MobileRTC.shared().getMeetingService() { } ``` ```objectivec MobileRTCMeetingService *meetingService = [[MobileRTC sharedRTC] getMeetingService]; if (meetingService != nil) { } ``` Then, configure the meeting settings in `MobileRTCMeetingSettings`. ```swift if let settings = MobileRTC.shared().getMeetingSettings() { /* For full list of meeting settings available, visit https://marketplacefront.zoom.us/sdk/meeting/ios/interface_mobile_r_t_c_meeting_settings.html */ settings.setAutoConnectInternetAudio(true) settings.setMuteAudioWhenJoinMeeting(true) settings.setMuteVideoWhenJoinMeeting(true) settings.setFaceBeautyEnabled(true) settings.enableMirrorEffect(true) settings.disableDriveMode(true) } ``` ```objectivec MobileRTCMeetingSettings *settings = [[MobileRTC sharedRTC] getMeetingSettings]; if (settings != nil) { /* For full list of meeting settings available, visit https://marketplacefront.zoom.us/sdk/meeting/ios/interface_mobile_r_t_c_meeting_settings.html */ [settings setAutoConnectInternetAudio:YES]; [settings setMuteAudioWhenJoinMeeting:YES]; [settings setMuteVideoWhenJoinMeeting:YES]; [settings setFaceBeautyEnabled:YES]; [settings enableMirrorEffect:YES]; [settings disableDriveMode:YES]; } ``` When the settings are set, prepare the meeting parameters to pass to the join meeting function. ```swift let joinMeetingParameters = MobileRTCMeetingJoinParam() joinMeetingParameters.userName = username // Display name joinMeetingParameters.meetingNumber = meetingNo joinMeetingParameters.password = meetingPassword joinMeetingParameters.noAudio = true // If required, to disable audio when join in meeting joinMeetingParameters.noVideo = true // If required, to disable video when join in meeting ``` ```objectivec MobileRTCMeetingJoinParam *joinMeetingParameters = [[MobileRTCMeetingJoinParam alloc] init]; joinMeetingParameters.userName = username; // Display name joinMeetingParameters.meetingNumber = meetingNo; joinMeetingParameters.password = meetingPassword; joinMeetingParameters.noAudio = YES; // If required, to disable audio when join in meeting joinMeetingParameters.noVideo = YES; // If required, to disable video when join in meeting ``` Once the options and parameters are ready, pass them to `joinMeeting` to join the meeting. ```swift let error = meetingService.joinMeeting(with: joinMeetingParameters) // Response will be MobileRTCMeetError. If error = 0 -> MobileRTCMeetError_Success ``` ```objectivec MobileRTCMeetError error = [meetingService joinMeetingWithJoinParam:joinMeetingParameters]; // Response will be MobileRTCMeetError. If error = 0 -> MobileRTCMeetError_Success ``` ## Join with a vanity ID A **vanity ID** is a special and personalized ID that uniquely belongs to a user. To join a meeting with vanity ID instead of meeting number, the process is exactly the same as joining a meeting with meeting number. Just store `vanityID` in `MobileRTCMeetingJoinParam` instead of storing `meetingNumber`. ```swift if let meetingService = MobileRTC.shared().getMeetingService() { let joinMeetingParameters = MobileRTCMeetingJoinParam() joinMeetingParameters.userName = username // Display name joinMeetingParameters.vanityID = vanityID joinMeetingParameters.password = meetingPassword let error = meetingService.joinMeeting(with: joinMeetingParameters) // Response will be MobileRTCMeetError. If error = 0 -> MobileRTCMeetError_Success } ``` ```objectivec MobileRTCMeetingService *meetingService = [[MobileRTC sharedRTC] getMeetingService]; if (meetingService != nil) { MobileRTCMeetingJoinParam *joinMeetingParameters = [[MobileRTCMeetingJoinParam alloc] init]; joinMeetingParameters.userName = username; // Display name joinMeetingParameters.vanityID = vanityID; joinMeetingParameters.password = meetingPassword; MobileRTCMeetError error = [meetingService joinMeetingWithJoinParam:joinMeetingParameters]; // Response will be MobileRTCMeetError. If error = 0 -> MobileRTCMeetError_Success } ``` ## Join Meeting status To know whether the join meeting action is a success or not, or to get the error message, implement both `onMeetingError` and the `onMeetingStateChange` method by confirming to the `MobileRTCMeetingServiceDelegate` protocol. ```swift func onMeetingError(_ error: MobileRTCMeetError, message: String?) { } func onMeetingStateChange(_ state: MobileRTCMeetingState) { } ``` ```objectivec - (void)onMeetingError:(MobileRTCMeetError)error message:(NSString*)message { } - (void)onMeetingStateChange:(MobileRTCMeetingState)state { } ``` ---