Error Handling

When interacting with the 100ms SDK using the HMSSDK instance, or joining and previewing the Room, it may encounter issues that it cannot automatically recover from, and app or user intervention may be required. In such cases, the 100ms SDK emits HMSUpdateListenerActions.ON_ERROR event with error encounter by it.

You can subscribe to HMSUpdateListenerActions.ON_ERROR event to get notified about the errors encountered by the SDK -

// this function will be called with `error` as first parameter const onError = (error: HMSException) => { // Logging error console.log(`${error.code} ${error.description}`); // You should handle error as per its' code // Each code represents different error. Read below section to get more details if (error.code === 4005 || error.code === 1003) { leaveMeeting(); } }; // Subscribe to get SDK errors hmsInstance.addEventListener(HMSUpdateListenerActions.ON_ERROR, onError);

HMSException

Function subscribed to HMSUpdateListenerActions.ON_ERROR event is called with error object, which is an instance of HMSException class. Lets take a look at HMSException class interface -

interface HMSException { code: number; description: string; isTerminal: boolean; canRetry?: boolean; // Android Only message?: string; // Android Only name?: string; // Android Only action?: string; // Android Only }

Here are the details of each property of HMSException object:

code

The code property denotes error code which a unique identifier for the error.

description

The description property denotes what is the source of the error.

isTerminal

The isTerminal property denotes wether error has caused the current session to terminate and the app will need to call join again to reconnect.

Terminal error example:

Terminal Error

The error code 1003 (error in above image) occurs when the reconnection attempt fails. The SDK returns this error after attempting to reconnect for 60 seconds. In such cases, the isTerminal property can be used to handle updates to the UI.

🔑 More info on reconnection handling can be found here

canRetry

It is an android only property. The canRetry property denotes wether app can call join again with the same configuration it has used before. The value be false in cases like token expiring or room getting locked. You can use this property while implementing infinite retry in your app.

message

It is an android only property. The message property denotes error information.

name

It is an android only property. The name property denotes error name.

action

It is an android only property. The action property tells what to do when a error occurs. For example SEND_ALL_REQUIRED_KEYS means you have not sent some required key in the API call.

Different Error Types

Following are the different errors emitted by the SDK with their codes and action you should take to resolve the error -

Error CodeCause of the errorAction to be taken
1003Websocket disconnected - Happens due to network issuesMention user to check their network connection or try again after some time.
2002Invalid Endpoint URLCheck the endpoint provided while calling join on HMSSDK.
2003Endpoint is not reachableMention user to check their network connection or try again after some time.
2004Token is not in proper JWT formatThe token passed while calling join is not in correct format. Retry getting a new token.
3001Cant Access Capture DeviceAsk user to check permission granted to audio/video capture devices.
3002Capture Device is not AvailableAsk user to check if the audio/video capture device is connected or not.
3003Capture device is in use by some other application.Show notification to user mentioning that the capturing device is used by some other application currently.
3008Browser has thrown an auto-play exception.Show notification to user mentioning that the browser blocked auto-play.
3012BLUETOOTH_CONNECT permission is not given.Add the BLUETOOTH_CONNECT permission to your app and request it at runtime since it's a dangerous level permission.
3013BLUETOOTH permission is not given.Add the BLUETOOTH permission to your app.
4001WebRTC errorSome webRTC error has occurred. Need more logs to debug.
4002WebRTC errorSome webRTC error has occurred. Need more logs to debug.
4003WebRTC errorSome webRTC error has occurred. Need more logs to debug.
4004WebRTC errorSome webRTC error has occurred. Need more logs to debug.
4005ICE Connection Failed due to network issueMention user to check their network connection or try again after some time.
5001Trying to join a room which is already joinedTrying to join an already joined room.
6002webRTC Error: Error while renegotiatingPlease try again.
40101Token Error: Invalid Access KeyAccess Key provided in the token is wrong.
40102Token Error: Invalid Room IdRoomID provided in the token is wrong.
40103Token Error: Invalid Auth IdAuthID provided in the token is wrong.
40104Token Error: Invalid App IdApp ID provided in the token is wrong.
40105Token Error: Invalid Customer IdCustomer Id provided in the token is wrong.
40107Token Error: Invalid User IdUser ID provided in the token is wrong.
40108Token Error: Invalid RoleThe role provided in the token is wrong.
40109Token Error: Bad JWT TokenBad JWT Token.
40100Generic ErrorNeed to debug further with logs.
40001Invalid RoomRoom ID provided while fetching the token is an invalid room.
40002Room Mismatched with TokenRoom ID provided while fetching the token does not match.
40004Peer already joinedPeer who is trying to join has already joined the room.
41001Peer is goneThe peer is no more present in the room.
7001Platform Not SupportedThe platform is not supported for plugin
7002Plugin Init FailedPlugin initialization has failed
7003Plugin Processing FailedPlugin processing failed
7004Plugin Add Already Going onPlugin add is already in progress

Setting log levels in SDK (Android Only)

Logs can be used to diagnose the performance of room sessions or debug various issues. To enable logging, create an HMSLogSettings object and pass it to the build method when constructing the HMSSDK instance.

The SDK also provides an option to save these logs to disk on Android devices using the isLogStorageEnabled property of the HMSLogSettings object. You can set the isLogStorageEnabled property to true to enable the SDK to write logs to the disk.

// Creating the Log Settings object with disk storage turned on const logSettings = new HMSLogSettings({ level: HMSLogLevel.VERBOSE, isLogStorageEnabled: true, maxDirSizeInBytes: HMSLogAlarmManager.DEFAULT_DIR_SIZE, // Maximum size of the directory where log will be saved }); // Pass the Log Settings object to the build function c̶o̶n̶s̶t̶ ̶h̶m̶s̶I̶n̶s̶t̶a̶n̶c̶e̶ ̶=̶ ̶a̶w̶a̶i̶t̶ ̶H̶M̶S̶S̶D̶K̶.̶b̶u̶i̶l̶d̶(̶)̶;̶ const hmsInstance = await HMSSDK.build({ logSettings });

HMSLogLevel is an enum with values -

export enum HMSLogLevel { // To receive all the logs VERBOSE = 'VERBOSE', // To receive warnings WARNING = 'WARNING', // To receive errors ERROR = 'ERROR', }

Have a suggestion? Recommend changes ->

Was this helpful?

1234