# Access in-meeting user information > The code on this page works with either the **default UI** or the **custom UI**. After joining a meeting, access information for each meeting participant through `MobileRTCMeetingService` and `MobileRTCMeetingServiceDelegate`. Use one of several different IDs, each serving its own purpose, to access user information. - Customer key - A developer-supplied identifier that may be passed in through the `MeetingOptions` instance used to join a meeting. - User ID - A nonpersistent, unique per-user identifier assigned by Zoom for the current meeting. If a user leaves and rejoins the same meeting, they get a new user ID assigned each time they join. This is also reassigned when switching between the main meeting and breakout rooms. - Persistent ID - A per-user identifier assigned by Zoom for the current meeting and all submeetings, such as breakout rooms. This per-user identifier will not be reassigned in the same meeting or submeeting, but users in different meetings may have the same ID value. - Participant ID - A unique per-user identifier assigned by Zoom to a user's account. This persists across all meetings for an account. You can't access this ID through the iOS SDK, but can retrieve it through the REST API. When a user joins a meeting, get their `InMeetingUserInfo` object. ```swift guard let meetingService = MobileRTC.shared().getMeetingService() else { return } meetingService.delegate = self extension ViewController: MobileRTCMeetingServiceDelegate { func onSinkMeetingUserJoin(_ userID: UInt) { guard let meetingService = MobileRTC.shared().getMeetingService() else { return } guard let userInfo = meetingService.userInfo(byID: userID) else { return } } } ``` ```objectivec // In your .m file @interface ViewController : UIViewController { } // In your .h file MobileRTCMeetingService *meetingService = [[MobileRTC sharedRTC] getMeetingService]; if (!meetingService) { return; } meetingService.delegate = self; - (void)onSinkMeetingUserJoin:(NSUInteger)userID { MobileRTCMeetingService *meetingService = [[MobileRTC sharedRTC] getMeetingService]; if (!meetingService) { return; } MobileRTCMeetingUserInfo *userInfo = [meetingService userInfoByID:userID]; if (!userInfo) { return; } } ``` Use the `InMeetingUserInfo` to access data specific to that user. Get the customer key. ```swift userInfo.customerKey ``` ```objectivec userInfo.customerKey; ``` Get the user's avatar picture path, if available. ```swift userInfo.avatarPath ``` ```objectivec userInfo.avatarPath; ``` Get the user ID. ```swift userInfo.userID ``` ```objectivec userInfo.userID; ``` Get the username. ```swift userInfo.userName ``` ```objectivec userInfo.userName; ``` Get the persistent ID. ```swift userInfo.persistentId ``` ```objectivec userInfo.persistentId; ``` Each user in a meeting or webinar has a role assigned to one of these values. - `MobileRTCUserRole_None` - No role has been assigned. - `MobileRTCUserRole_Host` - The host of the current meeting or webinar. - `MobileRTCUserRole_CoHost` - A co-host of the current meeting or webinar. - `MobileRTCUserRole_Panelist` - A panelist in the current meeting or webinar. - `MobileRTCUserRole_BreakoutRoom_Moderator` - The breakout room moderator. - `MobileRTCUserRole_Attendee` - An attendee of the current meeting or webinar. Get the user's role in the current meeting. ```swift userInfo.userRole ``` ```objectivec userInfo.userRole; ``` Determine whether a given user is the current user. ```swift userInfo.isMySelf ``` ```objectivec userInfo.isMySelf; ``` ---