getBOUserByUserID is not correct

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

  1. Create BO
    let boid = MobileRTC.shared().getMeetingService()? .getCreatorHelper()? .createBO("TEST ROOM")

  2. Get unassigned users
    let unassign:Array = (MobileRTC.shared().getMeetingService()? .getDataHelper()? .getUnassignedUserList()))!

  3. Obtain user information

let boassign = MobileRTC.shared().getMeetingService()? .getDataHelper()? .getBOUser(byUserID: unassign[i] as! String)
print(boassign.getName())

→The user name has been obtained.

  1. Assign a user
    MobileRTC.shared().getMeetingService()? .getCreatorHelper()? .assignUser(unassgin[i] as! String, toBO: boid!)

  2. Start BO
    MobileRTC.shared().getMeetingService()? .getAdminHelper()? .startBO()

  3. Get information from Zoom’s user ID
    let BOUser = MobileRTC.shared().getMeetingService()? .getDataHelper()? .getBOUser(byUserID: zoomuserid)

  4. 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

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.