In-browser JS API


#1

I’ve gotten an in-browser meeting to work _generally _but I have some issues:

  1. I can’t find a solution for an anonymous join (just provide display name). Is this possible?
  2. The ZoomMtg object throws hella warnings, including deprecated React functions, mismatched DOM and property calls, etc. From what I can tell, these are embedded in the SDK.
  3. The Java code for signature generation in the SDK doc PDF is… difficult.
  4. There seem to be some “undocumented features” in the SDK and some missing leads.
  5. For the non-NodeJS folks, resolving dependencies is a challenge. I’m not completely sure I’ve overcome this one, not entirely.

Is someone working on an update or a new version? If so, I offer to help. My platform is PHP-based and I’m competent in JS. I’m working on a fairly heavy integration with the Zoom platform and I’m happy to feed forward any pointers, documentation, etc. that I can come up with in exchange for any more platform documentation that I could have access to.

 


#2
  1. Can you clarify what you mean by anonymous join?

  2. Can you provide a screenshot of the errors?

  3. Here is an example in PHP https://gist.github.com/joshuawoodward/7574df3df9a089e2663582a2cf9f188b Also there is a function in the JS library to help (however I don’t recommend using it client side as it exposes you api key/secret)

  4. Can you go into detail

  5. What is the exact issue you are having?

 

I’m working on a better example and documentation currently. The project itself is created by another engineers, and I’m working with them to improve it.


#3

I appreciate your prompt reply.

 

A screenshot of the JS console is attached.

I’d like users to be able to join meetings without using an existing Zoom login. That is, they don’t need to create an account, just provide the name which will be displayed to other participants.

I’ve gotten the PHP code to generate the signature working but I will likely need to convert it to other platforms before my application is complete. Going through the information I learned from the JS API PDF doc:

  1. There are many more dependencies than just zoommtg.js. Not documented there (vaguely alluded to later): JQuery, React (+React-DOM), Redux (the JS library, not the WP framework), and Redux-Thunk. If you want things to display correctly, Bootstrap and React-Select (also in the brief mention that comes later). There is no documentation as to versions of any of these dependencies that the documentation was written for. More details below. Unfortunately, I can’t provide a working set of versions because I haven’t yet found one. Some better documentation of this, including the versions of the code on the last-working version of the SDK would be a step in the right direction.
  2. Contrary to what is stated, not all methods take success and failure callbacks as parameters. Specifically, .join seems to take either parameters in the options object with callbacks or will use the global .successCallBack and .errorCallBack [sic., the b in callback is capitalized] properties on ZoomMtg.
  3. The .join method requires a passWord [sic., once again, the w in password is capitalized], otherwise it fails to join the meeting. The error states that a password must be provided.
  4. There does not appear to be a .generateSignature method, despite the documentation stating there is. Perhaps this is for the best anyway.
  5. The signature generation Java code does not run. I tried it on SE 8. It lacks imports entirely and I could not find libraries having classes with functions matching the signatures in the documentation. A sufficient amount of googling and experience yielded a solution that compiled. The changes were significant enough that I could not use it reliably as a reference model. (Hashing is quirky and far from deterministic.) It is possible that this code is not intended to run in SE 8 and on another platform instead but there is no indication of this. Since the developer website is so well… developed (sorry), perhaps a list of implementations there, by platform (Node, PHP, Java, C#, Python, Ruby, etc.), would help.
  6. There is no explanation why UnsupportedEncodingException is caught. The entire premise of Java is platform independence and if the correct library is imported, this code should never throw that exception. This could probably be passed through in the function signature as there doesn’t seem to be any value in catching it in this function.
  7. The application example is poorly documented. The remaining points are all from that. I’ve tried to provide solutions where I could and where applicable.
  8. An element with the ID, ‘root’, must be provided. The SDK seems to be hard-coded with this as a requirement despite the fact that some web platforms use an element with that ID to indicate something entirely different. I don’t have a work-around for this yet. Many JS component libraries use a defaulted parameter with the target element (the name, root, doesn’t make much sense for this from the standpoint of a consumer of this SDK as a component) and this is very easy to implement with jQuery.
  9. The dependencies are highlighted in red but I could not find a place where they were provided. It is possible to cobble the JS deps together using CDN sources, largely the unpkg npm CDN.
  10. Bootstrap doesn’t have a single trunk. Because it’s display code and there’s no “right” way to make something look, it is intended to be personalized and used only to the extend required. There is no indication in the documentation which Bootstrap components are required and which aren’t. I have’t yet gotten through the trial-and-error debugging necessary to determine canonically which parts are required and which aren’t.
  11. There is no documentation or source for the included /js/customer.js, nor description of what it does. The good news is that I have yet to find what’s missing by ignoring it entirely.
  12. It is unusual to require dependencies like a React stack and Bootstrap for an SDK. While not specifically incompatible, I use an Angular 2 stack and a Materialize-based display framework in my application due to requirements I’ve been given. Assuming I don’t run into situations where some JS runs over some other – which is not a good assumption – I will have at the very best a component inside my application which defies all of my design requirements. This is not to mention the fact that 60% of my current site pages don’t use any of the above in an attempt to keep them lightweight and maintainable, which will be difficult at best with this SDK.

As for the dependency resolution, the screenshot and my points 1, 5 and 12 above cover the brunt of it. I did get the SDK to work, albeit it seems without video, so I know that I’ve gotten these at least somewhat correct. The screenshot demonstrates that I haven’t gotten it entirely correct.

I hope some of this helps out. I’ve tried to provide solutions where I could. Some lower-level documentation would be extremely helpful. In the grand scheme of things, reverse-engineering video streaming APIs is not the hardest thing I’ve ever done, but I’d so much prefer to help out making an SDK – something others after me can use and is supported – better.

 

Thanks!

 


#4

“I’d like users to be able to join meetings without using an existing Zoom login. That is, they don’t need to create an account, just provide the name which will be displayed to other participants.”

This is possible doing ZoomMtg.join();  //the password parameter here is the meeting passWord not the user password, and userName is technically displayName not zoom username. (I know, misleading)

 

  1. Agree, documentation needs lots of work (I’m working on it)

  2. I’ll have to test [I know, I didn’t write the code ;)]

  3. This shouldn’t be the case, are you creating a meeting that requires a password

  4. I’ve tested this and generateSignature worked for me. [Documentation issue *eyeroll*, looks like docs point to an one place, however the sample app includes elsewhere, assuming a newer version https://github.com/zoom/sample-app-web/blob/master/demo/index.html]

  5. I’m not a Java guy so I never tested it… I agree and understand the frustration. I’m currently tasked at rewriting the documentation, I have the internal resources and still having trouble. We WILL get better! New site coming soon, developer.zoom.us - plumbing in place, working on content

  6. Not sure

  7. Agree, Agree, Agree - working on building a production quality sample and better documentation

  8. Again… Agreed. This is a public forum so I’ll keep the comments nice here - the “SDK” is not written… well

9/10. See 8

  1. LOL, In my progress of trying to rewrite the sample app i removed everything from customer.js except init and join (eventually getting rid of everything)

What I’ve discovered is that this webclient “SDK” is best used standalone in it’s own window [email me joshua.woodward@zoom.us and can walk through https://github.com/zoom/sample-app-web/raw/files/webclient.zip]

The use of the word “video” should be done lightly, when you get it working you’ll understand. 

 

[Thanks for the detailed response!!]

 


#5

Back to #3

Docs say password is optional (Must Have? N) however looks like it is required, because the notes say set to empty if you don’t have one :confused:


#6

Agree with you! this “SDK” is not so “SDK”. 


#7

Has there been any movement on this in the last 4 months? If so, is there an updated place to find some usable code?

 

I’ve been dealing with other issues but the higher-ups have pushed this back to the top of the list. Here’s what I hope to accomplish:

  1. Open a separate window – same browser, no furniture – with the React runtime and dependencies loaded.
  2. Connect the user programmatically to an in-progress meeting. I’d like to manage the waiting room myself if the host hasn’t joined yet.
  3. Connect to the default video stream for the meeting. Specifically, this is the default stream that you get in the app player where the current speaker’s video is displayed.
  4. Offer the option to connect via computer audio or dial out, similar to how the app handles this.
  5. Ferry the user’s video and possibly audio bits to the server as expected.
  6. Provide very basic controls of call control (leaving), muting and hand-raising.
  7. Track some simple statistics like stream quality (bandwidth), join/leave times, etc.

Ideally, I’d like to provide a similar but much richer custom experience for the host as well but I realize this is much more complicated.

 

I can handle account management via the existing API without issues (so far).

 

There doesn’t seem to be much movement in the community board here. I really want to implement this and in short term but I also don’t want to swim upstream too much. Is this something that one could achieve using the state of the art?

 

Thanks!