Hello ,
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
Swift
Hey @KAZUMA87,
Thanks for using the dev forum!
This was a known issue and has since been resolved in a recent hotfix update. Can you update to the latest version?
Thanks!
Michael
Hello @Michael_Condon ,
I tried it with the following code, but it still returned nil, so I don’t think it’s working correctly.
let BOUser = MobileRTC.shared().getMeetingService()? .getDataHelper()? .getBOUser(byUserID: zoomuserid)
If the user is not assigned to the Breakoutroom, nil will be returned? If that’s the case, please tell me how to assign any user to the Breakoutroom.
The SDK is version v5.7.6.1076(iOS). CustomUI is used.
Can you please check?
Best Regards.
Hey @KAZUMA87,
You need to assign the user by calling the method assignUser:toBO:
Thanks!
Michael
Hello @Michael_Condon ,
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
}
Thanks.
Hey @KAZUMA87,
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.
Thanks!
Michael
Hello @Michael_Condon ,
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.
If there is any mistake, please let me know.
Best Regards.
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.
Hey @KAZUMA87.
Are you trying to get a User object for a user in a breakout room or trying to get the user Id for a user who is in a breakout room?
Thanks!
Michael
@Michael_Condon , @jeremy.provost
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
Thanks.
Hey @KAZUMA87,
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?
Thanks!
Michael
Hello @Michael_Condon,
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?
Thanks.
Hey @KAZUMA87,
We do not currently have a callback for this event.
Thanks!
Michael
Hello @Michael_Condon ,
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?
Thanks.
Hey @KAZUMA87,
I think the only way to check this would be to look at the current attendees within a breakout room.
Thanks!
Michael