IOS how can i do CustomizeMeetingUI in Swift

sdc opens in full screen, I need to show video from the joing conference only in the view configured by me, but how to do this on Swift is not clear to me from the instructions.

it open on full screen , i need to open in some view. like in image

Hi @simpotyashka.27.08,

Thanks for using Zoom SDK. Based on the screenshot, it seems like you are using Zoom default UI. If you would like to have the meeting UI looks like the 2nd screenshot, you will need to use the Custom UI mode and draw your own meeting UI.

Thanks!

Please help,
i find institution

@implementation SDKStartJoinMeetingPresenter (CustomizedUIMeetingDelegate)

- (void)onInitMeetingView
{
  // Create & Present View Controller
  NSLog(@"onInitMeetingView....");

  CustomMeetingViewController *vc = [[CustomMeetingViewController alloc] init];
  self.customMeetingVC = vc;
  [vc release];

  [self.rootVC addChildViewController:self.customMeetingVC];
  [self.rootVC.view addSubview:self.customMeetingVC.view];
  [self.customMeetingVC didMoveToParentViewController:self.rootVC];

  self.customMeetingVC.view.frame = self.rootVC.view.bounds;
  ...
}

what is self.customMeetingVC = vc; i don’t t have customMeetingVC in my controller, could you help me how create it in swift ?
I need joing a meeting and see video in custom small view

Hi @simpotyashka.27.08,

Thanks for the reply. If you are using the Custom UI mode, you have full control of how to draw your UI. The code in the sample app is just for demo purposes so you could refer to the implementation and modify them based on your project.

Thanks!

let getservice = mobileRTC.getMeetingService()
if let service = getservice {
service.delegate = self
service.customizedUImeetingDelegate = self
}
extension ViewController: MobileRTCMeetingServiceDelegate, MobileRTCAuthDelegate, MobileRTCCustomizedUIMeetingDelegate {

func onInitMeetingView() {

}

func onDestroyMeetingView() {

}
}

onInitMeetingView , onDestroyMeetingView not called

Hi @simpotyashka.27.08,

Thanks for the reply. Did you enable the custom UI before using the 2 callbacks you are mentioning?

After successfully authenticated the SDK, call the following interface to enable the Custom UI mode:

/*!
 @brief Enable Custom In-Meeting UI in meeting.
 */
@property (assign, nonatomic) BOOL enableCustomMeeting;

Then you could use the following callback to init/destroy your UI

/*!
 @brief Notify user to create a custom in-meeting UI. 
 */
- (void)onInitMeetingView;

/*!
 @brief Notify user to destroy the custom in-meeting UI. 
 */
- (void)onDestroyMeetingView;

Hope this helps. Thanks!

I tried to enable the custom meeting. However I am not able to get reference to meeting settings.

guard let meetingSettings = MobileRTC.shared().getMeetingSettings() else {
	return
}
meetingSettings.enableCustomMeeting = true

meetingSettings is returning nil. Is the above the right way to enable the custom meeting.

SDK Version I am using is 5.2.1 (41739.1022)

iOS is 14.4.

Hi @pgudivada,

Typically if this method is returning nil, it is because the SDK has not properly been setup yet. Please ensure that you have already successfully initialized the SDK following the steps outlined here. Let me know if you have any additional questions. :slightly_smiling_face:

Thanks!

if the initialization is not successful, I should not be able to show the Zoom View Controller. I am able to participate in the zoom meetings via the app I built.
Also the delegate call back in MobileRTCAuthDelegate

func onMobileRTCAuthReturn(_ returnValue: MobileRTCAuthError)

returns successful state (MobileRTAuthError_Success)

Hi @pgudivada,

Yes, if you are able to join meetings, that does mean that you are successfully initializing the SDK. However, since this initialization is an synchronous process, you must ensure that you are trying to call getMeetingSettings after the successful callback in the delegate. Can you please confirm that you are calling this method after receiving that callback?

Thanks!

@jon, Thanks for that info. I did not find explicit reference to that in the SDK doc.. I thought initializing the class is sufficient to get access to these services.

Hi @pgudivada,

Thank you for the feedback on our documentation. We are currently working on major improvements for our SDK docs, so I will make note of this in order to ensure it is absolutely clear in the future. :slightly_smiling_face:

Thanks!

@jon.zoom On a related note with regards to documenation, is there a page that talks about the delegate call backs in the sample app of yours MobileRTCSample. I am looking at your customization page, I do not find any reference how various callbacks of MeetingDelegate, VideoServiceDelegate etc., are getting triggered. Any pointers in that direction will help.

Hey @pgudivada,

To assign a class as the MobileRTCMeetingServiceDelegate you would do the following:

class yourClass: MobileRTCMeetingServiceDelegate {


MobileRTC.shared()?.getMeetingService.delegate = self


}

In the sample app there is an objective-c version of this code in the SDKStartJoinMeetingPresent.m file in the initDelegate function.

MobileRTCVideoServiceDelegate is also a MobileRTCMeetingServiceDelegate, so whatever class you assigned to be the meeting delegate will also be the video delegate. You would just have to add the extra conformance:

class yourClass: MobileRTCMeetingServiceDelegate, MobileRTCVideoServiceDelegate {


MobileRTC.shared()?.getMeetingService.delegate = self


}

Thanks!
Michael

Custom UI feature is very very poorly documented.
Will it be updated in near future or Zoom is giving up on legacy SDKs and APIs?

There is absolutely no mention of really building custom UI (only how to ENABLE it), what are the video views, how to align them, what protocols or classes they need to relate or conform to?
onInitMeetingView and onDestroyMeetingView does say absolutely nothing about custom UI, has no parameters or reqire return views, or whatsoever, and their functional purposes are very questionable.
Custom UI at least means custom video views, sizing and alignment, with custom buttons. So how and where to connect those views to Zoom API, how to get specific user to connect to specific UIView? Any material that slightly mentions that would be highly useful, documentation page is already messed up with very legacy and barely useful sample project description is very hard to grind useful pieces of puzzle for building custom UI as if someone intentionally trying to make it complicated. @Michael_Condon

Please can we have info about actually building custom ui, even if its poorly aligned video views on an empty page. At least we’d get idea of further requirements after enabling it how to actually get the video on a screen. Not always FullScreenVC. Not always on NavigationController.

Hey @Ras,

Thanks for using the dev forum!

We are aware that our custom UI docs are in need of attention and we are working on updating/re-writing them as we speak. In the meantime, I have a thread where I explain how to set it up here: I want to add a custom button in the meeting option toolbar in my zoom app in ios. I see there are provisions to hide or show the toolbar or even specific buttons. But is there any way to add a custom button in the toolbar under more in IOS? - #11 by Michael_Condon

Can you take a look and let me know if you have any questions?

Thanks!
Michael

Thank you, I was able to set the logic but unfortunately it doesnt work well.
While not custom ui works well, enabling custom ui creating several critical issues as:
onSinkMeetingUserJoin is being called but

if let meetingService =  MobileRTC.shared().getMeetingService(){
connectedUsers = meetingService.getInMeetingUserList() ?? []
}

is returning nil on getInMeetingUserList() although I know there are users in room from onSinkMeetingUserJoin.

guard let meetingService = MobileRTC.shared().getMeetingService() else { return false }
let isHost = meetingService.isHostUser(userID)

Always returns false (isHost).
Also,

let showAttendeeVideoSuccessful = remoteUserVideoView.showAttendeeVideo(withUserID: userID)
		
		if showAttendeeVideoSuccessful {
			print("Started showing remote user video.")
		} else {
			print("Failed to show remote user video.")
		}

Always prints “Failed to show remote user video.” and calling remoteUserVideoView.getUserID() afterwards always shows 0

I joineed room with meetingNumber, password and displayName.
Disabling meetingSettings.enableCustomMeeting to false magically shows new viewcontroller with everyhting functioning perfectly.

Its not webinar, but I guess part of the issues related to: Unable to Get In-Meeting User List as a Webinar Attendee

Hey @Ras,

Since this is the same issue described in your comment here: Unable to Get In-Meeting User List as a Webinar Attendee, let’s move the conversation over there to keep things organized :slight_smile:

Thanks!
Michael