Windows SDK functions
For API documentation, please visit the Meeting API reference.
Initialization
You can find these APIs in zoom_sdk.h. Please call Zoom SDK APIs in
main UI thread for thread-safe operation.
Initialize Zoom SDK and create authentication service
When initializing the SDK, also include the auth_service_interface.h
code string.
Please do not use raw IP address as the web domain
Please do not use raw IP address as the web domain. It will open your app to vulnerability issues. To learn why, see our security practices.
Code sample
void AuthorizeSDK()
{
// Initialize SDK with InitParam object
ZOOM_SDK_NAMESPACE::InitParam initParam;
ZOOM_SDK_NAMESPACE::SDKError initReturnVal(ZOOM_SDK_NAMESPACE::SDKERR_UNINITIALIZE);
// Set web domain to zoom.us
initParam.strWebDomain = L"https://zoom.us";
initReturnVal = ZOOM_SDK_NAMESPACE::InitSDK(initParam);
// Check if InitSDK call succeeded
if (initReturnVal == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// Create IAuthService object to perform Auth actions
ZOOM_SDK_NAMESPACE::IAuthService* authService;
ZOOM_SDK_NAMESPACE::SDKError authServiceInitReturnVal = ZOOM_SDK_NAMESPACE::CreateAuthService(&authService);
if (authServiceInitReturnVal == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// Create IAuthServiceEvent object to listen for Auth events from SDK
ZOOM_SDK_NAMESPACE::IAuthServiceEvent* authListener;
// Auth SDK with AuthContext object
ZOOM_SDK_NAMESPACE::AuthContext authContext;
ZOOM_SDK_NAMESPACE::SDKError authCallReturnValue(ZOOM_SDK_NAMESPACE::SDKERR_UNAUTHENTICATION);
// Call SetEvent to assign your IAuthServiceEvent listener
yourAuthServiceEventListener = new YourAuthServiceEventListener();
authListener = yourAuthServiceEventListener;
authService->SetEvent(authListener);
// Provide your JWT to the AuthContext object
authContext.jwt_token = L"Your JWT token here";
authCallReturnValue = authService->SDKAuth(authContext);
if (authCallReturnValue == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// SDK Auth in progress
}
}
}
}
void yourAuthServiceEventListener::onAuthenticationReturn(ZOOM_SDK_NAMESPACE::AuthResult ret) {
if (ret == ZOOM_SDK_NAMESPACE::SDKError::AUTHRET_JWTTOKENWRONG)
{
// SDK Auth call failed because the JWT token is invalid.
} else if (ret == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// SDK Authenticated successfully
}
}
Use the authentication service
When you first start using the Meeting SDK, you should do the authentication first.
Log in end-user
See Support OAuth in SDK app for details.
Log out end-user
Code sample
void logoutUser()
{
// Call Logout on your IAuthService instance
ZOOM_SDK_NAMESPACE::SDKError logoutCallReturnValue(ZOOM_SDK_NAMESPACE::SDKERR_UNKNOWN);
logoutCallReturnValue = yourSDKInstance->authService->Logout();
if (logoutCallReturnValue == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// Logout call succeeded, listen for logout result using the onLogoutRet callback
}
}
Meeting service
To use the meeting service, include the meeting_service_interface.h. code string.
Create the meeting service
Code sample
void createMeetingService()
{
// Create IMeetingService object to perform meeting actions
ZOOM_SDK_NAMESPACE::IMeetingService* meetingService;
ZOOM_SDK_NAMESPACE::SDKError meetingServiceInitReturnVal = ZOOM_SDK_NAMESPACE::CreateMeetingService(&meetingService);
if (meetingServiceInitReturnVal == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// MeetingService was created successfully, it is recommended to store this value for use across the application
}
}
Start a meeting for a non-logged in user
Use this code if the user is not logged in to Zoom through the SDK yet. This method requires obtaining a Zoom Access Key (ZAK) token for the user from the REST API, so the user is referred to as an "API user" in the code.
Code sample
void startMeetingForApiUser()
{
// Start meeting for API user with StartParam object
ZOOM_SDK_NAMESPACE::StartParam startMeetingParam;
// Provide meeting credentials for API user using StartParam4WithoutLogin
ZOOM_SDK_NAMESPACE::StartParam4WithoutLogin startMeetingWithoutLoginParam;
startMeetingParam.userType = ZOOM_SDK_NAMESPACE::SDK_UT_WITHOUT_LOGIN;
startMeetingWithoutLoginParam.zoomuserType = ZOOM_SDK_NAMESPACE::ZoomUserType_APIUSER;
startMeetingWithoutLoginParam.meetingNumber = 1234567890;
// Starting a meeting without the user logging in requires a ZAK token
startMeetingWithoutLoginParam.userZAK = L"ZAK token for user";
startMeetingWithoutLoginParam.userID = L"User ID or email for user";
startMeetingWithoutLoginParam.userName = L"Display name for user";
startMeetingParam.param.withoutloginStart = startMeetingWithoutLoginParam;
ZOOM_SDK_NAMESPACE::SDKError startMeetingCallReturnValue(ZOOM_SDK_NAMESPACE::SDKERR_UNKNOWN);
startMeetingCallReturnValue = yourMeetingServiceInstance->Start(startMeetingParam);
if (startMeetingCallReturnValue == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// Start meeting call succeeded, listen for start meeting result using the onMeetingStatusChanged callback
}
}
Start a meeting for a logged-in user
Use this code can be used if the end-user has already logged in to Zoom through the SDK.
Code sample
void startMeetingForEndUser()
{
// Start meeting for end user with StartParam object
ZOOM_SDK_NAMESPACE::StartParam startMeetingParam;
// Provide meeting credentials for end user using StartParam4NormalUser
ZOOM_SDK_NAMESPACE::StartParam4NormalUser startMeetingForNormalUserParam;
startMeetingParam.userType = ZOOM_SDK_NAMESPACE::SDK_UT_NORMALUSER;
startMeetingForNormalUserParam.meetingNumber = 1234567890;
startMeetingParam.param.normaluserStart = startMeetingForNormalUserParam;
ZOOM_SDK_NAMESPACE::SDKError startMeetingCallReturnValue(ZOOM_SDK_NAMESPACE::SDKERR_UNKNOWN);
startMeetingCallReturnValue = yourMeetingServiceInstance->Start(startMeetingParam);
if (startMeetingCallReturnValue == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// Start meeting call succeeded, listen for start meeting result using the onMeetingStatusChanged callback
}
}
Join a meeting for an API user
Code sample
void joinMeetingForAPIUser()
{
// Join meeting for API user with JoinParam object
ZOOM_SDK_NAMESPACE::JoinParam joinMeetingParam;
// Provide meeting credentials for API user using JoinParam4WithoutLogin
ZOOM_SDK_NAMESPACE::JoinParam4WithoutLogin joinMeetingWithoutLoginParam;
joinMeetingParam.userType = ZOOM_SDK_NAMESPACE::SDK_UT_WITHOUT_LOGIN;
// If there is a ZAK token for this user provide it here, otherwise use JoinParam4NormalUser instead
joinMeetingWithoutLoginParam.userZAK = L"ZAK token for user";
joinMeetingWithoutLoginParam.meetingNumber = 1234567890;
joinMeetingWithoutLoginParam.psw = L"Meeting password";
joinMeetingWithoutLoginParam.userName = L"Display name for user";
joinMeetingParam.param.withoutloginuserJoin = joinMeetingWithoutLoginParam;
ZOOM_SDK_NAMESPACE::SDKError joinMeetingCallReturnValue(ZOOM_SDK_NAMESPACE::SDKERR_UNKNOWN);
joinMeetingCallReturnValue = yourMeetingServiceInstance->Join(joinMeetingParam);
if (joinMeetingCallReturnValue == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// Join meeting call succeeded, listen for join meeting result using the onMeetingStatusChanged callback
}
}
Join a meeting for and end user
Code sample
void joinMeetingForEndUser()
{
// Join meeting for end user with JoinParam object
ZOOM_SDK_NAMESPACE::JoinParam joinMeetingParam;
// Provide meeting credentials for end user using JoinParam4NormalUser
ZOOM_SDK_NAMESPACE::JoinParam4NormalUser joinMeetingForNormalUserLoginParam;
joinMeetingParam.userType = ZOOM_SDK_NAMESPACE::SDK_UT_NORMALUSER;
joinMeetingForNormalUserLoginParam.meetingNumber = 1234567890;
joinMeetingForNormalUserLoginParam.psw = L"Meeting password";
joinMeetingForNormalUserLoginParam.userName = L"Display name for user";
joinMeetingParam.param.normaluserJoin = joinMeetingForNormalUserLoginParam;
ZOOM_SDK_NAMESPACE::SDKError joinMeetingCallReturnValue(ZOOM_SDK_NAMESPACE::SDKERR_UNKNOWN);
joinMeetingCallReturnValue = yourMeetingServiceInstance->Join(joinMeetingParam);
if (joinMeetingCallReturnValue == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// Join meeting call succeeded, listen for join meeting result using the onMeetingStatusChanged callback
}
}
Meeting UI controller
Get this controller after you have been in the meeting. If you haven't been in the meeting previously, you can't use this controller.
Code sample
void getMeetingUIController()
{
ZOOM_SDK_NAMESPACE::IMeetingUIController* meetingUIController = yourMeetingServiceInstance->GetUIController();
if (meetingUIController)
{
// Use the IMeetingUIController instance to control the Zoom Meeting UI, for example:
meetingUIController->EnterFullScreen(enableFullScreenForPrimaryMonitor, enableFullScreenForSecondaryMonitor);
meetingUIController->ShowChatDlg(showChatDlgParam);
meetingUIController->SwtichToAcitveSpeaker();
}
}
Meeting configuration controller
You can set the meeting configuration controller before you call the start or join meeting API. If the meeting has ended the configuration will reset automatically.
Code sample
void getMeetingConfigurationController()
{
ZOOM_SDK_NAMESPACE::IMeetingConfiguration* meetingConfiguration = yourMeetingServiceInstance->GetMeetingConfiguration();
if (meetingConfiguration)
{
// Use the IMeetingConfiguration instance to control the Zoom Meeting Configuration, for example:
meetingConfiguration->EnableForceAutoStartMyVideoWhenJoinMeeting(true);
meetingConfiguration->DisableAttendeeMenuItem(attendeeMenuItem);
meetingConfiguration->HideShareButtonOnMeetingUI(true);
}
}
Meeting annotation controller
You can get this controller when you or someone else are sharing screens. If not, this controller will not be accessible to you.
Code sample
void getMeetingAnnotationController()
{
ZOOM_SDK_NAMESPACE::IAnnotationController* meetingAnnotationController = yourMeetingServiceInstance->GetAnnotationController();
if (meetingAnnotationController)
{
// Use the IAnnotationController instance to control the Zoom Meeting Annotations, for example:
meetingAnnotationController->CanDoAnnotation();
meetingAnnotationController->StartAnnotation(ZOOM_SDK_NAMESPACE::SDK_FIRST_VIEW);
meetingAnnotationController->SetColor(ZOOM_SDK_NAMESPACE::SDK_FIRST_VIEW, RGB(255, 255, 255));
meetingAnnotationController->StopAnnotation(ZOOM_SDK_NAMESPACE::SDK_FIRST_VIEW);
}
}
Setting service
If you want to use this service, include the
setting_service_interface.h. code string.
Code sample
void createSettingService() {
// Create ISettingService object to perform setting actions
ZOOM_SDK_NAMESPACE::ISettingService* settingService;
ZOOM_SDK_NAMESPACE::SDKError settingServiceInitReturnVal = ZOOM_SDK_NAMESPACE::CreateSettingService(&settingService);
if (settingServiceInitReturnVal == ZOOM_SDK_NAMESPACE::SDKError::SDKERR_SUCCESS)
{
// SettingService was created successfully, it is recommended to store this value for use across the application
// Use the ISettingService instance to control the meeting settings, for example:
settingService->GetRecordingSettings();
settingService->ShowSettingDlg(showSettingDialogueParam);
settingService->GetVideoSettings();
}
}
Get the current meeting's available audio types
To get an integer representing the current meeting's supported audio type, call the getSupportedMeetingAudioType interface after joining a meeting. The integer value is bitwise OR - a bitwise operation - of each supported audio type presented in the InMeetingSupportAudioType enum. For example, if the current meeting supports both VOIP and telephony, the return value of getSupportedMeetingAudioType for that meeting is AUDIO_TYPE_VOIP and AUDIO_TYPE_TELEPHONY.
Interface
virtual int GetSupportedMeetingAudioType() = 0;
Enum
enum InMeetingSupportAudioType
{
AUDIO_TYPE_NONE = 0,
AUDIO_TYPE_VOIP = 1,
AUDIO_TYPE_TELEPHONY = 1 << 1
};