getBOUserByUserID is supposed to take userId as an argument, but it seems to accept only bo user id. if userId is given, it returns as nil, but if bo user id is given, MobileRTCBOUser Object is returned.
Isn’t this behavior a mistake?
Thanks.
Which Mobile Meeting SDK version?
CustomUI
Version 5.7.6
Thanks for the reply.
I used assignUser:toBO to assign the user, but I don’t think I get the correct result. I think it differs from the documentation. I am doing it as follows
Create BO let boid = MobileRTC.shared().getMeetingService()? .getCreatorHelper()? .createBO("TEST ROOM")
Get unassigned users let unassign:Array = (MobileRTC.shared().getMeetingService()? .getDataHelper()? .getUnassignedUserList()))!
Obtain user information
let boassign = MobileRTC.shared().getMeetingService()? .getDataHelper()? .getBOUser(byUserID: unassign[i] as! String)
print(boassign.getName())
→The user name has been obtained.
Assign a user MobileRTC.shared().getMeetingService()? .getCreatorHelper()? .assignUser(unassgin[i] as! String, toBO: boid!)
Start BO MobileRTC.shared().getMeetingService()? .getAdminHelper()? .startBO()
Get information from Zoom’s user ID let BOUser = MobileRTC.shared().getMeetingService()? .getDataHelper()? .getBOUser(byUserID: zoomuserid)
Result print(BOUser)
→nil print(BOUser?.getId())
→nil
Expected result
let boassign = MobileRTC.shared().getMeetingService()? .getDataHelper()? .getBOUser(byUserID: zoomuserid as! String)
print(boassign.getId())
→return BoUserid
What we want to do
I want to assign a specified user to a specified BO.
Here is Full Code
let unassgin:Array = (MobileRTC.shared().getMeetingService()?.getDataHelper()?.getUnassignedUserList())!
for i in 0..<unassgin.count{
let boassign = MobileRTC.shared().getMeetingService()?.getDataHelper()?.getBOUser(byUserID: unassgin[i] as! String)
print(boassign?.getName())//return valid username
MobileRTC.shared().getMeetingService()?.getCreatorHelper()?.assignUser(unassgin[i] as! String, toBO: boid!)
MobileRTC.shared().getMeetingService()?.getAdminHelper()?.startBO()
let BOUser = MobileRTC.shared().getMeetingService()?.getDataHelper()?.getBOUser(byUserID: zoomuserid)
print("*****BOUser*****")
print(BOUser)//return nii
print("*****BOID*****")
print(BOUser?.getId())//return nil
}
A user will not become a BO user until the breakout rooms have started. I see you are calling startBO(), however, this is in rapid succession with assigning the user and retrieving the user. This looks to me like this is a race condition. The order of operations should be:
Get user → create BO room → give sdk time to finish creating the breakout room → assign user → give sdk time to finish assigning the user → start the breakout room → give sdk time to finish opening up the breakout rooms → get bo user.
But I think all of these are being done at the same time, which is why it is always nil.
I tried to wait for about 10 seconds before getting it, but it still returned nil.
I rewrote the code as follows
let unassgin:Array = (MobileRTC.shared().getMeetingService()? .getDataHelper()? .getUnassignedUserList()))! //-> maybe at this point we can get the BOuserid?
let boid = MobileRTC.shared().getMeetingService()? .getCreatorHelper()? .createBO("TEST ROOM")
DispatchQueue.main.asyncAfter(deadline: .now()+10){
for i in 0... <unassgin.count{
MobileRTC.shared().getMeetingService()? .getCreatorHelper()? .assignUser(unassgin[i] as! String, toBO: boid!)
}
DispatchQueue.main.asyncAfter(deadline: .now()+10){
MobileRTC.shared().getMeetingService()?.getAdminHelper()?.startBO()
DispatchQueue.main.asyncAfter(deadline: .now()+10){
let BOUser = MobileRTC.shared().getMeetingService()?.getDataHelper()?.getBOUser(byUserID: zoomuserid as! String)
print(BOUser)//->output nil
}
}
}
let unassgin:Array = (MobileRTC.shared().getMeetingService()?.getDataHelper()?.getUnassignedUserList())!
I think I can get the BOUserid at the time of calling “getUnassignedUserList()”, and I can have the user join the BO, but I can’t assign any user to the appropriate BORoom because I can’t determine which BOUserid the BOUserid I got belongs to.
MobileRTC.shared().getMeetingService()?.getDataHelper()?.getBOUser(byUserID: zoomuserid as! String)
If I give BOUserid instead of zoomuserid, I get the result instead of nil, but BOUserid is returned instead of zoomuserid.
I’ve used this part of the SDK extensively, and unfortunately I don’t think that is the purpose of the getBOUser function. The documentation states:
get bo meeting object by bo user id
It is intended to be used to lookup a MobileRTCBOUser by their BO user ID. As far as I can tell the SDK does not offer the functionality that you’re looking for, to be able to associate a MobileRTCBOUser with a MobileRTCMeetingUserInfo or vice versa. I would love to be able to do that as well so hopefully Zoom will take this as a feature request.
Sorry for the late reply.
Later, I managed to programmatically implement sorting to breakout rooms, etc., so this problem has been solved. However, there are times when I cannot get into the breakout room even if joinBo() returns True, is there any way to deal with this?
However, there are very few means of sorting to breakout rooms and methods, so please expand the API.
Assigning a specified user to a specified breakout room
Judging whether or not a breakout room has started
There are a few callbacks that should be of use here:
onStartBOError in MobileRTCBOAdminDelegate will be called if there was an issue starting the breakout rooms. onBOCreateSuccess in MobileRTCBOCreatorDelegate will be called when the BO was successfully created.
As for
can you clarify what information you are looking for?
The breakout room was written for me to create, and I don’t see a problem with it.
When I do a attendee.joinBo(), it returns true, but sometimes it doesn’t actually join the breakout room, and it says “not joined”. I don’t know what the difference is. Is there a method for detecting if it is in the “not joined” state?
I understand that there is no callback.
Is there any solution to the fact that sometimes I cannot enter the breakout room even though joinBO() is true?