Waiting Lobby - Android
Overview
With our Android SDK, you can implement a waiting lobby feature, which allows the host to control which participants can join the meeting by allowing or denying access. Here are the steps for implementing the waiting lobby.
Generating Tokens in Your Backend
Your server should generate access tokens using your API key and secret. Two different tokens need to be generated with different permissions:
HOST Token Payload
{
// ...
apikey: API_KEY, // Your API key
permissions: ['allow_join'], // Permission to directly join the meeting
// ...
}
GUEST Token Payload
{
// ...
apikey: API_KEY, // Your API key
permissions: ['ask_join'], // Permission to ask the host for permission to join the meeting
// ...
}
Explanation of parameters:
-
apikey(Mandatory): Your API key generated from the VideoSDK Dashboard, which can be obtained here. -
permissions(Mandatory): Permissions that control participant activity. Available permissions include:allow_join: Participants are allowed to join the meeting directly.ask_join: Participants need to ask for permission to join the meeting. Participants with theallow_joinpermission can accept or reject others' join requests.allow_mod: Participants are allowed to toggle webcam and mic of other participants.
Then, sign this payload with your SECRET KEY and use the HS256 algorithm. For more details on authentication and tokens, refer to this guide.
Generating Meeting Id
With the tokens ready, you can now obtain the meetingId from the VideoSDK's rooms API, which can be found here.
Refer to this guide for generating the meetingId.
Initialization of Meeting
Set the token with VideoSDK.config() and initialize the meeting using VideoSDK.initMeeting(). The token you set here decides whether the participant joins the meeting directly or waits in the lobby, so provide the allow_join token to a host and the ask_join token to a guest.
For detailed configuration options, check here.
- Kotlin
- Java
// If a participant joins as a host, provide them with the "allow_join" permission token.
// Otherwise, provide the "ask_join" permission token.
val token = if (isHost) "allow_join token will be here" else "ask_join token will be here"
VideoSDK.config(token)
val meeting = VideoSDK.initMeeting(
this@MainActivity, meetingId, "NAME HERE",
true, true, null, null, false, null, null
)
meeting!!.addEventListener(meetingEventListener)
meeting!!.join()
// If a participant joins as a host, provide them with the "allow_join" permission token.
// Otherwise, provide the "ask_join" permission token.
String token = isHost ? "allow_join token will be here" : "ask_join token will be here";
VideoSDK.config(token);
Meeting meeting = VideoSDK.initMeeting(
MainActivity.this, meetingId, "NAME HERE",
true, true, null, null, false, null, null);
meeting.addEventListener(meetingEventListener);
meeting.join();
A participant joining with the ask_join token does not enter the meeting when join() is called. The onMeetingJoined event is emitted only after the host allows the request.
Events associated with Waiting Lobby
The following events are received when a participant tries to join the meeting.
-
When a participant joins as a host, they will receive an
onEntryRequestedevent whenever a guest participant tries to join the meeting. Theidprovided by this event is the participant ID of the guest, which the host passes torespondEntry()along with the decision. -
When the host responds to a request, both the host and the guest will receive an
onEntryRespondedevent with theidof the guest and adecisionof eitherallowedordenied.
- Kotlin
- Java
private val meetingEventListener: MeetingEventListener = object : MeetingEventListener() {
override fun onEntryRequested(id: String, name: String) {
// The host receives this event when a guest requests to join the meeting
// If you want to allow the entry request
meeting!!.respondEntry(id, "allowed")
// If you want to deny the entry request
meeting!!.respondEntry(id, "denied")
}
override fun onEntryResponded(id: String, decision: String) {
// id will be the ID of the participant who requested to join the meeting
if (id == meeting!!.localParticipant.id) {
// This is the response to your own request to join
if (decision == "denied") {
// Leave the meeting and navigate away from the meeting screen
meeting!!.leave()
}
return
}
// The response is for a guest's request
if (decision == "allowed") {
// Entry allowed
} else {
// Entry denied
}
}
}
private final MeetingEventListener meetingEventListener = new MeetingEventListener() {
@Override
public void onEntryRequested(String id, String name) {
// The host receives this event when a guest requests to join the meeting
// If you want to allow the entry request
meeting.respondEntry(id, "allowed");
// If you want to deny the entry request
meeting.respondEntry(id, "denied");
}
@Override
public void onEntryResponded(String id, String decision) {
// id will be the ID of the participant who requested to join the meeting
if (id.equals(meeting.getLocalParticipant().getId())) {
// This is the response to your own request to join
if (decision.equals("denied")) {
// Leave the meeting and navigate away from the meeting screen
meeting.leave();
}
return;
}
// The response is for a guest's request
if (decision.equals("allowed")) {
// Entry allowed
} else {
// Entry denied
}
}
};
onEntryResponded is emitted to every participant whose token includes the allow_join permission and to the participant who requested to join, including a participant receiving their own id with a decision of allowed. Check the id and the decision before treating this event as a response to a guest's request.
A guest whose request is denied is not disconnected from the meeting automatically. Call leave() on the guest and navigate away from the meeting screen when the decision is denied.
API Reference
The API references for all the methods and events utilized in this guide are provided below.
Got a Question? Ask us on discord

