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:
- 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.
- 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.
- 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.
- There does not appear to be a .generateSignature method, despite the documentation stating there is. Perhaps this is for the best anyway.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.