Implement features


In the previous section, you learned how to set up the first scene of your app.

This section demonstrates how to make the buttons interactive by adding functions that enable the Join Meeting and Start a Meeting features. You will enable these features by using the MeetingService interface provided by Zoom Client SDK.

1. Join a meeting

The Join a Meeting feature of this demo app should allow a participant to join an existing meeting once they enter the Meeting Number and Meeting Passcode for the meeting.

In ViewController.m, add a joinMeeting function that accepts meeting number and meeting passcode as parameters and passes the parameters to joinMeetingWithJoinParam method.

ViewController.m
- (void)joinMeeting:(NSString *)meetingNumber meetingPassword:(NSString *)meetingPassword {
// Get MobileRTCMeetingService instance from sharedRTC
    MobileRTCMeetingService *meetService = [[MobileRTC sharedRTC] getMeetingService];

    if (meetService) {
// Create a joinParams object from the MobileRTCMeetingJoinParam class to provide the MobileRTCMeetingService with the necessary info (Meeting Number and Meeting Passcode) to join a meeting.

        MobileRTCMeetingJoinParam *joinParams = [[MobileRTCMeetingJoinParam alloc] init];
        joinParams.meetingNumber = meetingNumber;
        joinParams.password = meetingPassword;

/* Call the joinMeeting function in MobileRTCMeetingService. The Zoom SDK will handle the UI for you, unless told otherwise.
 If the meeting number and meeting password are valid, the user will be put into the meeting. A waiting room UI will be presented or the meeting UI will be presented.
*/

      [meetService joinMeetingWithJoinParam:joinParams];

    }
}

2. Handle meeting callbacks

MobileRTCMeetingServiceDelegate is a protocol implemented in the Zoom SDK to handle meeting events. To update ViewController.m to handle some of the events, you first need to set the ViewController as the delegate of the MobileRTCMeetingServiceDelegate instance.

To do so, first, change the interface declaration in ViewController.h to conform to the Meeting Service delegate as follows:

ViewController.h
#import <UIKit/UIKit.h>

//Import the Zoom SDK library
#import <MobileRTC/MobileRTC.h>
// Change the interface declaration to conform to the Meeting Service Delegate
@interface ViewController : UIViewController <MobileRTCMeetingServiceDelegate>

Next, in ViewController.m, make the following changes to handle the events:

  1. Add “meetService.delegate = self;” line inside the if(meetingService) conditional within the joinMeeting Method.

  2. Use the delegate methods to listen for updates from the SDK about meeting connections and meeting states.

ViewController.m
- (void)joinMeeting:(NSString *)meetingNumber meetingPassword:(NSString *)meetingPassword {
    // Obtain the MobileRTCMeetingService from the Zoom SDK, this service can start meetings, join meetings, leave meetings, etc.
    MobileRTCMeetingService *meetService = [[MobileRTC sharedRTC] getMeetingService];
  

		if (meetService) {
 		 // Set the ViewContoller to be the MobileRTCMeetingServiceDelegate
 
        meetService.delegate = self

        MobileRTCMeetingJoinParam *joinParams = [[MobileRTCMeetingJoinParam alloc] init];
        joinParams.meetingNumber = meetingNumber;
        joinParams.password = meetingPassword;


        [meetService joinMeetingWithJoinParam:joinParams];
  }
}
/**
 MobileRTCMeetingServiceDelegate provides methods that listen for updates about meetings, such as meeting state changes, join attempt status, meeting errors, etc.

**/
#pragma mark - MobileRTCMeetingServiceDelegate

- (void)onMeetingError:(MobileRTCMeetError)error message:(NSString *)message {
    switch (error) {
        case MobileRTCMeetError_PasswordError:
            NSLog(@"Could not join or start meeting because the meeting password was incorrect.");
        default:
            NSLog(@"Could not join or start meeting with MobileRTCMeetError: %u %@", error, message);
    }
}


- (void)onJoinMeetingConfirmed {
    NSLog(@"Join meeting confirmed.");
}


- (void)onMeetingStateChange:(MobileRTCMeetingState)state {
    NSLog(@"Current meeting state: %u", state);
}


@end

3. Login and start a meeting

When a user clicks on the Start an Instant Meeting button, your app should prompt them to login with their Zoom login credentials if they are not already logged in. This is done so that only an authenticated user can host the meeting

To include this feature, implement the logIn and startMeeting functions in the ViewController.m file.

ViewController.m
// 1. Implement the login function
- (void)logIn:(NSString *)email password:(NSString *)password {
    
 // 2. Obtain the MobileRTCAuthService from the Zoom SDK, this service can log in a Zoom user, log out a Zoom user, authorize the Zoom SDK etc.

    MobileRTCAuthService *authService = [[MobileRTC sharedRTC] getAuthService];
 // 3. Call the login function in MobileRTCAuthService. This will attempt to log in the user.
    if (authService)
        [authService loginWithEmail:email password:password rememberMe:false];
}

// 1. Implement the startMeeting function
- (void)startMeeting {
    /** Obtain the MobileRTCMeetingService from the Zoom SDK, this service can start meetings, join meetings, leave meetings, etc. **/
   MobileRTCMeetingService *meetService = [[MobileRTC sharedRTC] getMeetingService];

   if (meetService) {
  // 2. Set the ViewContoller to be the MobileRTCMeetingServiceDelegate
        meetService.delegate = self;

  /** 3. Create a MobileRTCMeetingStartParam to provide the MobileRTCMeetingService with the necessary info to start an instant meeting. In this case we will use MobileRTCMeetingStartParam4LoginlUser, since the user has logged into Zoom. **/
        MobileRTCMeetingStartParam * startParams = [[MobileRTCMeetingStartParam4LoginlUser alloc] init];

 // 4. Call the startMeeting function in MobileRTCMeetingService. The Zoom SDK will handle the UI for you, unless told otherwise.
        [meetService startMeetingWithStartParam:startParams];

       
        }
}

Lastly, in AppDelegate.m, call the logoutRTC method to log the user out of the app if the app is terminated.

AppDelegate.m

- (void)applicationWillTerminate:(UIApplication *)application {
    MobileRTCAuthService *authService = [[MobileRTC sharedRTC] getAuthService];

    if (authService)
        [authService logoutRTC];
}

4. Create alerts and handle user inputs

Use Alert View to provide interfaces for users to enter meeting details (meeting number and meeting passcode) and login details (Zoom user email and password).

Create an alert function called presentJoinMeetingAlert in the ViewController.m file to display a meeting alert where users can enter their meeting number and meeting passcode.

ViewController.m

- (void)presentJoinMeetingAlert {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Join meeting" message:@"" preferredStyle:UIAlertControllerStyleAlert];

    [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"Meeting number";
    }];
    [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"Meeting password";
    }];

    UIAlertAction *joinMeetingAction = [UIAlertAction actionWithTitle:@"Join meeting" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSString *number = [[alertController textFields][0] text];
        NSString *password = [[alertController textFields][1] text];

        if (number && password)
            [self joinMeeting:number meetingPassword:password];

    }];

    [alertController addAction:joinMeetingAction];

    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        NULL;
    }];

    [alertController addAction:cancelAction];
    [self presentViewController:alertController animated:YES completion:nil];
}

Call the presentJoinMeetingAlert function inside the action you created, so that the alert is displayed when the user clicks the “Join a Meeting” button.

ViewController.m

- (IBAction)joinAMeetingButtonPressed:(UIButton *)sender {
    [self presentJoinMeetingAlert];
}

Create another alert that allows users to enter their login information. In the Viewcontroller.m file, implement the following:

a. Create a method named presentLogInAlert that displays the Alert View to prompt users to enter their Zoom Login Information (Zoom User Email and Password) and passes the login information provided by the user to the logIn function.

b. Under the presentLoginAlert method, create another method named userLoggedIn which will invoke the startMeeting method when a user successfully logs in.

c. Inside the ViewDidLoad function, add an observer to listen for the login status so that when a successful login notification is received, the userLoggedIn method is invoked.

Viewcontroller.m
// 3. Call the userLoggedIn method to start a meeting if login is successful.
- (void)viewDidLoad {
    [super viewDidLoad];

    UINavigationController *navController = self.navigationController;

    if (navController)
        [[MobileRTC sharedRTC] setMobileRTCRootController:navController];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userLoggedIn) name:@"userLoggedIn" object:nil];
}

//1. Add an Alert for login prompt
(void)presentLogInAlert {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Log in" message:@"" preferredStyle:UIAlertControllerStyleAlert];

    [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"Email";
        textField.keyboardType = UIKeyboardTypeEmailAddress;
    }];
    [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"Password";
        textField.keyboardType = UIKeyboardTypeASCIICapable;
        textField.secureTextEntry = YES;
    }];

    UIAlertAction *logInAction = [UIAlertAction actionWithTitle:@"Log in" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSString *email = [[alertController textFields][0] text];
        NSString *password = [[alertController textFields][1] text];

        if (email && password)
            [self logIn:email password:password];

    }];

    [alertController addAction:logInAction];

    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        NULL;
    }];
    [alertController addAction:cancelAction];
    [self presentViewController:alertController animated:YES completion:nil];
}
// 2. Add a selector that invokes startMeeting function for a logged in user.
(void)userLoggedIn {
    [self startMeeting];
}

From the startAnInstantMeetingButtonPressed action, check if the user is logged in or not. If the user is logged in, call the startMeeting method right away and if the user is not logged in, display presentLogInAlert so they can enter their login information and then, start the meeting.

Viewcontroller.m

- (IBAction)startAnInstantMeetingButtonPressed:(UIButton *)sender {
    // Obtain the MobileRTCAuthService from the Zoom SDK.
    MobileRTCAuthService *authService = [[MobileRTC sharedRTC] getAuthService];

    if (authService) {
        // Check if the user is logged into Zoom.
        BOOL isLoggedIn = [authService isLoggedIn];
        if (isLoggedIn) {
            [self startMeeting];
        } else {
            [self presentLogInAlert];
        }
    }
}

The final ViewController.m file will look like:

ViewController.m

/
//  ViewController.m
//  ZoomiOSSDKDemoInObjC
//
//  Created by Zoom Video Communications on 8/18/20.
//  Copyright (c) 2020 Zoom Video Communications. All rights reserved.
//

#import "ViewController.h"
#import <MobileRTC/MobileRTC.h>

@interface ViewController () 

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UINavigationController *navController = self.navigationController;

    if (navController)
        [[MobileRTC sharedRTC] setMobileRTCRootController:navController];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userLoggedIn) name:@"userLoggedIn" object:nil];
}


- (IBAction)joinAMeetingButtonPressed:(UIButton *)sender {
    [self presentJoinMeetingAlert];
}


- (IBAction)startAnInstantMeetingButtonPressed:(UIButton *)sender {
    MobileRTCAuthService *authService = [[MobileRTC sharedRTC] getAuthService];

    if (authService) {
        BOOL isLoggedIn = [authService isLoggedIn];
        if (isLoggedIn) {
            [self startMeeting];
        } else {
            [self presentLogInAlert];
        }
    }
}


/**
* Join a meeting without any login/authentication with the meeting's number & password
*/
- (void)joinMeeting:(NSString *)meetingNumber meetingPassword:(NSString *)meetingPassword {
    MobileRTCMeetingService *meetService = [[MobileRTC sharedRTC] getMeetingService];

    if (meetService) {
        meetService.delegate = self;

        MobileRTCMeetingJoinParam *joinParams = [[MobileRTCMeetingJoinParam alloc] init];
        joinParams.meetingNumber = meetingNumber;
        joinParams.password = meetingPassword;

        dispatch_async(dispatch_get_main_queue(), ^{
            [meetService joinMeetingWithJoinParam:joinParams];
        });
    }
}


- (void)logIn:(NSString *)email password:(NSString *)password {
    MobileRTCAuthService *authService = [[MobileRTC sharedRTC] getAuthService];

    if (authService)
        [authService loginWithEmail:email password:password rememberMe:false];
}


/**
* Start an instant meeting. Must be logged into Zoom first
*/
- (void)startMeeting {
    MobileRTCMeetingService *meetService = [[MobileRTC sharedRTC] getMeetingService];

    if (meetService) {
        meetService.delegate = self;

        MobileRTCMeetingStartParam * startParams = [[MobileRTCMeetingStartParam4LoginlUser alloc] init];

        dispatch_async(dispatch_get_main_queue(), ^{
            [meetService startMeetingWithStartParam:startParams];
        });
    }
}


- (void)presentJoinMeetingAlert {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Join meeting" message:@"" preferredStyle:UIAlertControllerStyleAlert];

    [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"Meeting number";
    }];
    [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"Meeting password";
    }];

    UIAlertAction *joinMeetingAction = [UIAlertAction actionWithTitle:@"Join meeting" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSString *number = [[alertController textFields][0] text];
        NSString *password = [[alertController textFields][1] text];

        if (number && password)
            [self joinMeeting:number meetingPassword:password];

    }];

    [alertController addAction:joinMeetingAction];

    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        NULL;
    }];

    [alertController addAction:cancelAction];
    [self presentViewController:alertController animated:YES completion:nil];
}


- (void)presentLogInAlert {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Log in" message:@"" preferredStyle:UIAlertControllerStyleAlert];

    [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"Email";
    }];
    [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"Password";
    }];

    UIAlertAction *logInAction = [UIAlertAction actionWithTitle:@"Log in" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSString *email = [[alertController textFields][0] text];
        NSString *password = [[alertController textFields][1] text];

        if (email && password)
            [self logIn:email password:password];

    }];

    [alertController addAction:logInAction];

    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        NULL;
    }];

    [alertController addAction:cancelAction];
    [self presentViewController:alertController animated:YES completion:nil];
}


- (void)userLoggedIn {
    [self startMeeting];
}

#pragma mark - MobileRTCMeetingServiceDelegate

- (void)onMeetingError:(MobileRTCMeetError)error message:(NSString *)message {
    switch (error) {
        case MobileRTCMeetError_PasswordError:
            NSLog(@"Could not join or start meeting because the meeting password was incorrect.");
        default:
            NSLog(@"Could not join or start meeting with MobileRTCMeetError: %u %@", error, message);
    }
}


- (void)onJoinMeetingConfirmed {
    NSLog(@"Join meeting confirmed.");
}


- (void)onMeetingStateChange:(MobileRTCMeetingState)state {
    NSLog(@"Current meeting state: %u", state);
}


@end

Next, update the ViewController.h file with the functions that you added in the ViewController.m files. Your final ViewController.h file should be similar to the following:

ViewController.h

#import <UIKit/UIKit.h>

//Import the Zoom SDK library
#import <MobileRTC/MobileRTC.h>

@interface ViewController : UIViewController <MobileRTCMeetingServiceDelegate>

- (IBAction)joinAMeetingButtonPressed:(UIButton *_Nonnull)sender;
- (IBAction)startAnInstantMeetingButtonPressed:(UIButton *_Nonnull)sender;

- (void)joinMeeting:(nonnull NSString *)meetingNumber meetingPassword:(nonnull NSString*)meetingPassword;
- (void)logIn:(nonnull NSString*)email password:(nonnull NSString*)password;
- (void)startMeeting;
- (void)presentJoinMeetingAlert;
- (void)presentLogInAlert;
- (void)userLoggedIn;

@end

5. Handle authentication callbacks

Navigate to the AppDelegate.m file and use the onMobileRTCLoginReturn and onMobileRTCLogoutReturn functions provided by the MobileRTCAuthService interface to listen for state changes in authentication and be notified about whether the login and logout attempts were successful or not.

AppDelegate.m
#import "AppDelegate.h"
#import "ViewController.h"
#import <MobileRTC/MobileRTC.h>

@interface AppDelegate() 

@property (nonatomic, copy) NSString *sdkKey;
@property (nonatomic, copy) NSString *sdkSecret;

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Obtain your SDK Key and SDK Secret and paste it here.
    // Your SDK Secret should NEVER be publically accessible, only use the sdk key and secret for testing this demo app.
    // For your own application, you must obtain a JWT instead of using the SDK Key and SDK Secret.
    self.sdkKey = @"";
    self.sdkSecret = @"";

    [self setupSDK:self.sdkKey sdkSecret:self.sdkSecret];
    
    return YES;
}

- (void)applicationWillTerminate:(UIApplication *)application {
    MobileRTCAuthService *authService = [[MobileRTC sharedRTC] getAuthService];

    if (authService)
        [authService logoutRTC];
}

/**
* Initialize the SDK with your credentials. This is required before joining
*/
- (void)setupSDK:(NSString *)sdkKey sdkSecret:(NSString *)sdkSecret {
    MobileRTCSDKInitContext *context = [[MobileRTCSDKInitContext alloc] init];
    context.domain = @"zoom.us";
    context.enableLog = YES;

    BOOL sdkInitSuc = [[MobileRTC sharedRTC] initialize:context];

    if (sdkInitSuc) {
        MobileRTCAuthService *authService = [[MobileRTC sharedRTC] getAuthService];

        if (authService) {
            authService.clientKey = sdkKey;
            authService.clientSecret = sdkSecret;
            authService.delegate = self;
            [authService sdkAuth];
        }
    }
}

#pragma mark - MobileRTCAuthDelegate


- (void)onMobileRTCAuthReturn:(MobileRTCAuthError)returnValue {
    switch (returnValue) {
        case MobileRTCAuthError_Success:
            NSLog(@"SDK successfully initialized.");
            break;
        case MobileRTCAuthError_KeyOrSecretEmpty:
            NSLog(@"SDK key/secret was not provided. Replace sdkKey and sdkSecret at the top of this file with your SDK key/secret.");
            break;
        case MobileRTCAuthError_KeyOrSecretWrong:
            NSLog(@"SDK key/secret is not valid.");
            break;
        case MobileRTCAuthError_Unknown:
            NSLog(@"SDK key/secret is not valid.");
            break;
        default:
            NSLog(@"SDK Authorization failed with MobileRTCAuthError: %u", returnValue);
    }
}

- (void)onMobileRTCLoginReturn:(NSInteger)returnValue {
    switch (returnValue) {
        case 0:
            NSLog(@"Successfully logged in");
            [[NSNotificationCenter defaultCenter] postNotificationName:@"userLoggedIn" object:self];
            break;
        case 1002:
            NSLog(@"Password incorrect");
            break;
        default:
            NSLog(@"Could not log in. Error code: %li", (long)returnValue);
            break;
    }
}

- (void)onMobileRTCLogoutReturn:(NSInteger)returnValue {
    switch (returnValue) {
        case 0:
            NSLog(@"Successfully logged out");
            break;
        case 1002:
            NSLog(@"Password incorrect");
            break;
        default:
            NSLog(@"Could not log out. Error code: %li", (long)returnValue);
            break;
    }
}


@end

Your complete AppDelegate.m file should look similar to the following:

AppDelegate.m

#import "AppDelegate.h"
#import "ViewController.h"
#import <MobileRTC/MobileRTC.h>

@interface AppDelegate() 

@property (nonatomic, copy) NSString *sdkKey;
@property (nonatomic, copy) NSString *sdkSecret;

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Obtain your SDK Key and SDK Secret and paste it here.
    // Your SDK Secret should NEVER be publically accessible, only use the sdk key and secret for testing this demo app.
    // For your own application, you must obtain a JWT instead of using the SDK Key and SDK Secret.
    self.sdkKey = @"";
    self.sdkSecret = @"";

    [self setupSDK:self.sdkKey sdkSecret:self.sdkSecret];
    
    return YES;
}

- (void)applicationWillTerminate:(UIApplication *)application {
    MobileRTCAuthService *authService = [[MobileRTC sharedRTC] getAuthService];

    if (authService)
        [authService logoutRTC];
}

/**
* Initialize the SDK with your credentials. This is required before joining
*/
- (void)setupSDK:(NSString *)sdkKey sdkSecret:(NSString *)sdkSecret {
    MobileRTCSDKInitContext *context = [[MobileRTCSDKInitContext alloc] init];
    context.domain = @"zoom.us";
    context.enableLog = YES;

    BOOL sdkInitSuc = [[MobileRTC sharedRTC] initialize:context];

    if (sdkInitSuc) {
        MobileRTCAuthService *authService = [[MobileRTC sharedRTC] getAuthService];

        if (authService) {
            authService.clientKey = sdkKey;
            authService.clientSecret = sdkSecret;
            authService.delegate = self;
            [authService sdkAuth];
        }
    }
}

#pragma mark - MobileRTCAuthDelegate


- (void)onMobileRTCAuthReturn:(MobileRTCAuthError)returnValue {
    switch (returnValue) {
        case MobileRTCAuthError_Success:
            NSLog(@"SDK successfully initialized.");
            break;
        case MobileRTCAuthError_KeyOrSecretEmpty:
            NSLog(@"SDK key/secret was not provided. Replace sdkKey and sdkSecret at the top of this file with your SDK key/secret.");
            break;
        case MobileRTCAuthError_KeyOrSecretWrong:
            NSLog(@"SDK key/secret is not valid.");
            break;
        case MobileRTCAuthError_Unknown:
            NSLog(@"SDK key/secret is not valid.");
            break;
        default:
            NSLog(@"SDK Authorization failed with MobileRTCAuthError: %u", returnValue);
    }
}

- (void)onMobileRTCLoginReturn:(NSInteger)returnValue {
    switch (returnValue) {
        case 0:
            NSLog(@"Successfully logged in");
            [[NSNotificationCenter defaultCenter] postNotificationName:@"userLoggedIn" object:self];
            break;
        case 1002:
            NSLog(@"Password incorrect");
            break;
        default:
            NSLog(@"Could not log in. Error code: %li", (long)returnValue);
            break;
    }
}

- (void)onMobileRTCLogoutReturn:(NSInteger)returnValue {
    switch (returnValue) {
        case 0:
            NSLog(@"Successfully logged out");
            break;
        case 1002:
            NSLog(@"Password incorrect");
            break;
        default:
            NSLog(@"Could not log out. Error code: %li", (long)returnValue);
            break;
    }
}


@end


Refer to the getting started repository to view the complete code for this project.

Run your app

Connect your iOS device and press “Run” in Xcode to run your app in your device. Press the “Join Meeting” button to join a meeting as a participant or press the “Start Meeting” button to start an instant meeting. Once you enter the meeting, you can see the Zoom UI and functionalities integrated in your app.

Next steps

This was a simple quickstart made to get you up and running with the Zoom SDK. Next, check out the sample apps included in your downloaded SDK package and read the SDK docs to understand and implement advanced features.