Here are the release notes for the Android Meeting SDK v5.7.1

Android SDK Google Play Store impact

Action needed: Please update your app to use Android SDK version 5.7.1 or greater as soon as possible and update it on the Google Play Store.

Details: Google Store policies do not support the APK-based update code in the Zoom Android SDK product prior to version 5.7.1. This code was inherited from the Zoom client’s code base and was never used by the SDK. However, since it exists in the SDK, Google may discover it in a scan of your app on the Play store. Zoom has removed this code in the 5.7.1 release. If your app is available on the Play Store and it uses a version prior to 5.7.1, Google may suspend your app.

Client SDK is now officially ‘Meeting SDK’

To better reflect the functionality of the Client SDK for Android, iOS, macOS, Windows, and Web, we’re changing its name to the Meeting SDK. This does not impact any of the SDKs directly.

Using RESTful API for PreMeeting services

The RESTful API parameters and requests to perform meeting management are constantly enhanced to support the latest Zoom meeting features. The SDK services do not get updated as often. Therefore, we are removing the pre meeting services in the SDK as of this release. Please consider using the RESTful API as a replacement. Here are the API for meeting management:

Please follow the instructions in https://marketplace.zoom.us/docs/api-reference/using-zoom-apis to use Zoom RESTful APIs.

Please also consider using the following webhooks:

See the webhook reference for more details: https://marketplace.zoom.us/docs/api-reference/webhook-reference

Added

  • Consent dialog in the following scenarios(both Zoom UI and Custom UI):

    • Recording/Archiving/Live Streaming in meetings or in webinars.

    • Join webinar as a panelist

    • Promote an attendee to panelist

    • The host tries to unmute the current user

  • New interfaces to retrieve legal disclaimers. See https://marketplace.zoom.us/docs/sdk/native-sdks/ui-notices for more information on how to display these in your app.

    • In InMeetingService.java:

        - boolean isLiveTranscriptLegalNoticeAvailable()
        - String getLiveTranscriptLegalNoticesPrompt()
        - String getLiveTranscriptLegalNoticesExplained()
    • In InMeetingShareController.java:

      - boolean isWhiteboardLegalNoticeAvailable()
      - String getWhiteboardLegalNoticesPrompt()
      - String getWhiteboardLegalNoticesExplained()
    • In InMeetingChatController.java:

      - boolean isMeetingChatLegalNoticeAvailable()
      - String getChatLegalNoticesPrompt()
      - String getChatLegalNoticesExplained()
    • In InMeetingQAController.java:

      - boolean isQALegalNoticeAvailable()
      - String getQALegalNoticesPrompt()
      - String getQALegalNoticesExplained()
    • In InMeetingAnnotationController.java:

      - boolean isAnnotationLegalNoticeAvailable()
      - String getAnnotationLegalNoticesPrompt()
      - String getAnnotationLegalNoticesExplained()
    • In MeetingService.java:

      - String getWebinarRegistrationLegalNoticesPrompt()
      - WebinarRegistLegalNoticeContent getWebinarRegistrationLegalNoticesExplained() 
  • New interfaces to handle SSO login.

    • In ZoomSDK.java:

      - String generateSSOLoginURL(String ssoDomainPrefix)
      - void handleSSOLoginURIProtocol(String uriProtocol)
    • When implementing the SSO login flow, pass in your company domain or vanity URL prefix to the generateSSOLoginURL interface. It will return an URI to start the SSO login process. Open the URI with an external browser. Upon successful login on the browser, Zoom will return a URI. Redirect back to your application with the URI and pass the URI to the handleSSOLoginURIProtocol to complete the SSO login in SDK.

  • New interfaces to enhance breakout rooms.

    • In IBOAdmin.java:

      - boolean inviteBOUserReturnToMainSession(String userId)
    • In IBOCreator.java:

      - boolean setBOOption(BOOption option)
      - BOOption getBOOption()
    • In InMeetingBOController.java:

      - BOStatus getBOStatus()
    • In InMeetingBOControllerListener.java:

      - void onBOStopCountDown(int seconds)
      - void onHostInviteReturnToMainSession(String name, ReturnToMainSessionHandler handler)
      - void onBOStatusChanged(BOStatus status)
  • A new interface to get the shared bitmap.

    • In InMeetingShareController.java:

      - Bitmap getShareBitmap()
  • An option in meeting settings to hide the record button.

    • no_record option in MeetingOptions.java

  • A new interface to check whether the user is in the waiting room.

    • In InMeetingService.java:

      - isInWaitingRoom()
  • A new callback when the host changes the share settings.

    • In InMeetingShareListener.java:

      - void onShareSettingTypeChanged(ShareSettingType type)
  • New callbacks for the events when the in-meeting feature buttons are being pressed.

    • In ZoomUIDelegate.java:

      - boolean onClickEndButton()
      - boolean onClickAudioButton()
      - boolean onClickVideoButton()
      - boolean onClickShareButton()
      - boolean onClickMoreButton()
      - boolean onClickParticipantsButton()
  • A new callback to get the result when asking an attendee to be promoted.

    • In InMeetingWebinarListener.java:

      - void onAttendeePromoteConfirmResult(boolean agree, long userId)
  • A new callback when trying to invalidly reclaim the host key.

    • In InMeetingServiceListener.java:

      - void onInvalidReclaimHostkey()
  • A new interface to configure aspect ratio in Zoom UI.

    • In MeetingSettingsHelper.java:

      - void setVideoAspectRatio(VideoAspectRatioType aspectRatioType)
      - VideoAspectRatioType getVideoAspectRatio()

Changed & Fixed

  • Renamed the participant_id to customer_key in MeetingOptions.java. This does not impact the underlying functionality.

  • Renamed the getParticipantID() to getCustomerKey() and added setCustomerKey() in InMeetingUserInfo.java.

  • Fixed an issue where the SDK crashed when opening the QA UI in Custom UI.

  • Fixed an issue where the default UI’s meeting end message was displayed when using Custom UI.

  • Fixed an issue where the onAnnotationSupportChange callback was not triggered after leaving the meeting.

  • Fixed an issue where the shared image could not change with the zoom in and zoom out finger gesture.

  • Fixed an issue where the showMiniMeetingWindow interface was not working as expected.

  • Fixed an issue where the allowParticipantsToRename interface was not working.

  • Fixed an issue where the showZoomChatUI did not work for webinar attendees.

  • Fixed an issue where the SDK auth failed when the shrinkMode was set to "strict".

  • Fixed an issue where the onChatMessageNotification callback was not triggered after sending an individual message.

Removed

The following interfaces that were being announced "deprecated" in the previous releases have been removed.

  • In ZoomSDK.java:

    - public void initialize(Context context, String appKey, String appSecret, ZoomSDKInitializeListener listener)
    - public void initialize(Context context, String appKey, String appSecret, boolean autoRetryVerifyApp, ZoomSDKInitializeListener listener)
    - public void initialize(Context context, String appKey, String appSecret, String domain, ZoomSDKInitializeListener listener)
    - public void initialize(Context context, String appKey, String appSecret, String domain, ZoomSDKInitializeListener listener, boolean enableLog)
    - public void initialize(Context context, String appKey, String appSecret, String domain, ZoomSDKInitializeListener listener, boolean enableLog, int logSize)
    - public void initialize(Context context, String appKey, String appSecret, String domain, boolean autoRetryVerifyApp, ZoomSDKInitializeListener listener)
    - public void initialize(Context context, String appKey, String appSecret, String domain, boolean autoRetryVerifyApp, ZoomSDKInitializeListener listener, boolean enableLog)
    - public void initialize(Context context, String appKey, String appSecret, String domain, boolean autoRetryVerifyApp, ZoomSDKInitializeListener listener, boolean enableLog, int logSize)
    • Resolution: Use existing method public void initialize(Context context, ZoomSDKInitializeListener listener, ZoomSDKInitParams params). For more information, see SDK initialization.

  • In MeetingItem.java:

    - public String getInvitationEmailContentWithTime()
    • Resolution: Use new interface asyncGetInviteEmailContent in MeetingItem.java.

  • In MeetingSettingsHelper.java:

    - public void setPreferredCameraAntibanding(String antibanding)
    • This is no longer supported.

  • In InMeetingWebinarController.java:

    - MobileRTCSDKError allowAttendeeChat();
    - MobileRTCSDKError disallowAttendeeChat();
    • Resolution: Use InMeetingChatController#allowAttendeeChat(MobileRTCWebinarChatPriviledge priviledge).

  • In InMeetingServiceListener.java:

    - void onUserVideoStatusChanged(long userId);
    - void onUserAudioStatusChanged(long userId);
    - void onMeetingSecureKeyNotification(byte[] key)
    • Resolution: Use InMeetingServiceListener#onUserVideoStatusChanged(long userId,VideoStatus status) and InMeetingServiceListener#onUserAudioStatusChanged(long userId,AudioStatus audioStatus).

  • In InMeetingService:

    - public byte[] getE2EMeetingSecureKey()
    - public boolean handleE2EMeetingExternalSessionKeyReady
    • Both no longer supported.

  • In MeetingActivity.java:

    - void raiseHand() // Use InMeetingService#RaiseMyHand 
    - void lowerHand() // Use InMeetingService#lowerHand
    - boolean isRaisedHand() // Use InMeetingUserInfo#isRaisedHand
    - void switchToNextPage()
    - void switchToPreviousPage()
    - void switchToActiveSpeaker()
    - void switchToDriveScene()
    - void switchToVideoWall() // Use methods with the same signatures in ZoomUIService
    - void onMyRaiseLowerHandStatusChanged(boolean isRaiseHand)
    • Resolution: see notes above.

  • In NetworkConnectionListener:

    • onSSLCertVerifyNotification(SSLCertVerificationHandler)

  • In MeetingActivity:

    - void onClickParticipants() // use ZoomUIDelegate#onClickParticipantsButton() instead
    - void onAudioStatusChanged() // use InMeetingServiceListener#onUserAudioStatusChanged(long userId,AudioStatus audioStatus) instead
    - void onMyVideoStatusChanged() // use InMeetingServiceListener#onUserVideoStatusChanged(long userId) instead
    - void onMeetingConnected() // use MeetingServiceListener#onMeetingStatusChanged() instead
    - void onSilentModeChanged(boolean inSilentMode) // use InMeetingServiceListener#onSilentModeChanged() instead
    - void onMyAudioTypeChanged() // use InMeetingServiceListener#onMyAudioSourceTypeChanged instead
    - void onMyAudioSourceTypeChanged() // use InMeetingServiceListener#onMyAudioSourceTypeChanged instead
    - onClickEndButton() // use ZoomUIDelegate#onClickEndButton() instead
    - void onJoinMeetingConfirmed() // use InMeetingServiceListener#onMeetingNeedPasswordOrDisplayName() instead
    - Bitmap getShareBitmap() // use InMeetingShareController#getShareBitmap() instead
    - setCustomizedMeetingId(String meetingId) // use MeetingOptions.custom_meeting_id instead
    - boolean isMeetingConnected() // use InMeetingService#isMeetingConnected() instead
    - boolean isInSilentMode() // use InMeetingService#isInSilentMode() instead
    - boolean isSharingOut() // use InMeetingShareController#isSharingOut() instead
    - boolean isSharingScreen() // use InMeetingShareController#isSharingScreen() instead
    - void showLeaveDialog() // use ZoomUIDelegate#onClickEndButton() instead
    - void showAudioOptions() // use ZoomUIDelegate#onClickAudioButton() instead
    - void showVideoOptions() // use ZoomUIDelegate#onClickVideoButton() instead
    - void showParticipants() // use ZoomUIDelegate#onClickParticipantsButton() instead
    - void showShareOptions() // use ZoomUIDelegate#onClickShareButton() instead
    - void doAudioAction() // use ZoomUIDelegate#onClickAudioButton() instead
    - void showMoreOptions() // use ZoomUIDelegate#onClickMoreButton() instead
    - boolean isVideoMuted() // use InMeetingVideoController#isMyVideoMuted() instead
    - void muteVideo(boolean mute) // use InMeetingVideoController#muteMyVideo(boolean mute) instead
    - boolean canSwitchCamera() // use InMeetingVideoController#canSwitchCamera() instead
    - void switchToNextCamera() // use InMeetingVideoController#switchToNextCamera() instead
    - boolean isAudioConnected() // use InMeetingAudioController#isAudioConnected() instead
    - boolean isAudioMuted() // use InMeetingAudioController#isMyAudioMuted() instead
    - boolean connectVoIP() // use InMeetingAudioController#connectAudioWithVoIP() instead
    - void disconnectAudio() // use InMeetingAudioController#disconnectAudio() instead
    - void muteAudio(boolean mute) // use InMeetingAudioController#muteMyAudio(boolean mute) instead
    - boolean isCMREnabled() // use InMeetingCloudRecordController#isCloudRecordEnabled() instead
    - boolean isCMRInProgress() // use InMeetingCloudRecordController#isCloudRecordInProgress() instead
    - void startCloudRecord() // use InMeetingCloudRecordController#startCloudRecord() instead
    - void stopCloudRecord() // use InMeetingCloudRecordController#stopCloudRecord() instead
    - boolean canSwitchAudioSource() // use InMeetingAudioController#canSwitchAudioOutput() instead
    - boolean isAllowToChat() // use InMeetingChatController#isChatDisabled() instead
    - void showChatsView() // use InMeetingService#showZoomChatUI() instead
    • Resolution: see notes above.