Unable to join meeting ionic app

I’m having some trouble integrating the new cordova plugin. Here’s what I did:

  • I extracted the zip file and copied the folder Libs/Zoom from the zip file to lib/cordova.plugin.zoom into the root of my ionic project.
  • In package.json I replaced "cordova.plugin.zoom": "^4.6.2166-6.603", with "cordova.plugin.zoom": "file:./lib/cordova.plugin.zoom",, so it uses the local version of the library.
  • npm install
  • ionic cap sync

Now in Android Studio I’m getting an error on gradle sync:
No variants found for ':capacitor-cordova-android-plugins'. Check build files to ensure at least one variant exists.
There have never been any build variants in capacitor-cordova-android-plugins/build.gradle defined. Even when I add the same as in the app/build.gradle, the error persists.

In XCode it gives me the error
.../ios/capacitor-cordova-ios-plugins/sources/Cordova.plugin.zoom/Zoom.h:9:9: 'MobileRTC/MobileRTC.h' file not found

I cleaned everything pretty thoroughly after updating (git clean, Clean build folder, etc…)

Any hints, suggestions?

EDIT:
In the plugin in file src/android/build-extras.gradle I had to remove the line:

apply plugin: 'com.android.application'

AFAIK, the Android plugin is applied in the App’s project and shouldn’t be applied twice.

Next issue seems to be with a setting in the AndroidManifest in the mobilertc library:

Manifest merger failed : Attribute application@allowBackup value=(true) from AndroidManifest.xml:6:9-35
	is also present at [:mobilertc:] AndroidManifest.xml:82:9-36 value=(false).
	Suggestion: add 'tools:replace="android:allowBackup"' to <application> element at AndroidManifest.xml:5:5-43:19 to override.

I had to set the allowBackup property of our application also to false to make it work. I think the mobilertc library shouldn’t set the field at all.

EDIT 2:

I finally also got iOS running. In the plugin’s plugin.xml is this line:

 <!-- <framework custom="true" embed="true" src="libs/ios/MobileRTC.xcframework" /> -->

which is not commented out in the older version of the plugin. I uncommented the line and now the project builds and I can join Zoom meetings again.

If this info helps anyone, please give a :heart:.

2 Likes

I am getting following error while building android

Could not determine java version from '11.0.16."

tried with java version 18 and getting same error.

somehow if i am able to get rid of this error then i get following error

Execution failed for task ‘:app:complieDebugJavaWithJavac’.

1 Like

Could you please share it with [redacted] as well

1 Like

Hello!

Could you please share it with me as well? My email is [redacted]

Thanks!

1 Like

Hi, i have extracted the zip file and copied the folder Libs/Zoom from the zip file to lib/cordova.plugin.zoom into the root of my ionic project.

i have built the app with android api level 29. zoom meeting can be connected from the app.
but i was unable to submit the app to play store as minimum api level required by play store is 31 now. So, i updated the android api level to 32.

Now when i click on join meeting button, app crashs.

Please help asap.
Thanks

Somehow the success building iOS was just temporary. Now it fails while linking the app with

ld: framework not found MobileRTC

I tried all the things here, but none of it worked. I’m not a Mac/iOS dev and I don’t fully understand dependencies in XCode. Could someone please help with some screenshots how it shall look like in Xcode?

EDIT:

Has anyone got it ever working on iOS?

The old plugin contained a binary, which might be the actual zoom library:

$ file libs/ios/MobileRTC.framework/MobileRTC
libs/ios/MobileRTC.framework/MobileRTC: Mach-O universal binary with 2 architectures: [arm_v7:Mach-O dynamically linked shared library arm_v7Mach-O dynamically linked shared library arm_v7] [arm64]
libs/ios/MobileRTC.framework/MobileRTC (for architecture armv7):	Mach-O dynamically linked shared library arm_v7
libs/ios/MobileRTC.framework/MobileRTC (for architecture arm64):	Mach-O 64-bit dynamically linked shared library arm64

The new plugin does not contain that file, but it contains an ominous other file with a similar size:

 file libs/ios/MobileRTC.xcframework/ios-arm64_armv7/MobileRTC.framework/GNUSparseFile.0/MobileRTC
libs/ios/MobileRTC.xcframework/ios-arm64_armv7/MobileRTC.framework/GNUSparseFile.0/MobileRTC: data

After some fiddling with a hex editor, I suspect that it might be the zoom library, but I’m not that versed in binary reverse engineering to make something out of it.

@chunsiong.zoom Could you take a look if the plugin you mailed out actually works for iOS or maybe there is some wrong stuff in the ZIP file (looking at the other issues, I found and remedied … :roll_eyes: )

EDIT 2:

I don’t know what kind of scavenger hunt Zoom is playing with us here…

I finally got the sparse file back to a univeral binary with xsparse. Next I had to change the plugin-structure to be single-architecture again (.framework instead of .xcframework) using the old plugin as reference. And now it seems to work. :rocket:

Hi Martin,
Are you able to build it for android?

Hi @bhamra

Yes, there were also some things to fix. See my earlier post for details.

I’m still not there yet. Now Xcode gives the error Reached end of file while looking for: Mach-O slice..

Unfortunately it does not specify which file the error occurred on. I am pretty certain it’s a result of all the hacking required to make the new cordova-zoom-plugin work…

It would be great if they could just provide us with a working solution, where I don’t have to spend countless hours fixing random errors while our costumers can’t use our product properly.

@chunsiong.zoom What’s your role within Zoom?

@martin.ley

I am also working on it for last 3 days still no success. Zoom team should provide us working library. They are also providing version 5.7.6 which will again stop working after Nov 5, 2022.

@chunsiong.zoom
Please provide us updated and working solution for ionic.

Thanks

Hi,

Ionic has been official out of support for a while now. Nonetheless the version shared is provided as a break fix for the current upgrade requirement.

Moving forward, he upgrade path would be towards iOS and Android SDK.

Probably the last post of me in this thread, and going a bit off-topic:

I know it’s not officially supported. I am thankful that you got at least something for us, but on the other hand a bit surprised about the state and quality.

Using the native iOS and Android SDK wont be an option for us, because we don’t have the resources to do that (either using the existing cordova plugin as a base or developing something new). Do you think the Zoom web SDK might work as a replacement in an Ionic app?
We’re also evaluating other options, e.g. BigBlueButton. So If you want us to stick with you, your SDKs should deliver what they promise:

  • Easy to use: Our SDK is built to be easy to use. Just import the libraries, call a few functions, and we will take care of all video conferencing related stuff for you.

@martin.ley @chunsiong.zoom
I have successfully built the android app.
App is crashing on Android 12 but working fine on android version below 12.

Please help.

@bhamra
For us it’s working on Android 12. Can you provide an error message and a stack trace?

@martin.ley
Thanks for your response.
There is no error message. app is built successfully.
All other features are working fine on Android 12 as well. just the zoom sdk part not working. When we try to initialize zoom sdk app crashes.
But on other devices having android version below 12 zoom also work fine.
If you have time can you please look into it on anydesk.
I really need to resolve it at the earliest.
Thanks

Can you see any error message when the app is crashing via logcat?

Here is logcat error

java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission for android.content.AttributionSource@7cfc1718: HeadsetService
at android.os.Parcel.createExceptionOrNull(Parcel.java:2439)
at android.os.Parcel.createException(Parcel.java:2423)
at android.os.Parcel.readException(Parcel.java:2406)
at android.os.Parcel.readException(Parcel.java:2348)
at android.bluetooth.IBluetoothHeadset$Stub$Proxy.getConnectedDevicesWithAttribution(IBluetoothHeadset.java:1040)
at android.bluetooth.BluetoothHeadset.getConnectedDevices(BluetoothHeadset.java:601)
at us.zoom.androidlib.util.HeadsetUtil$1.onServiceConnected(HeadsetUtil.java:108)
at android.bluetooth.BluetoothHeadset$3.handleMessage(BluetoothHeadset.java:1491)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:334)
at android.app.ActivityThread.main(ActivityThread.java:8278)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1065)

Looks like you need to add the BLUETOOTH_CONNECT permission to your Android Manifest.

Added bluetooth permissions to Android Manifest. Now getting following error.

java.lang.RuntimeException: Unable to create service com.zipow.videobox.share.ScreenShareServiceForSDK: java.lang.IllegalArgumentException: com.harpreet.academy: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:4793)
    at android.app.ActivityThread.access$1900(ActivityThread.java:277)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2269)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:233)
    at android.os.Looper.loop(Looper.java:334)
    at android.app.ActivityThread.main(ActivityThread.java:8278)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1065)
 Caused by: java.lang.IllegalArgumentException: com.harpreet.academy: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
    at android.app.PendingIntent.checkFlags(PendingIntent.java:375)
    at android.app.PendingIntent.getActivityAsUser(PendingIntent.java:458)
    at android.app.PendingIntent.getActivity(PendingIntent.java:444)
    at android.app.PendingIntent.getActivity(PendingIntent.java:408)
    at us.zoom.sdk.SDKNotificationMgr.showConfNotificationForSDK(SDKNotificationMgr.java:10)
    at com.zipow.videobox.share.ScreenShareServiceForSDK.onCreate(ScreenShareServiceForSDK.java:3)
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:4780)
    	... 9 more

2022-08-21 16:10:36.285 24228-24228/com.harpreet.academy E/ZmRomUtils: getSystemProperty exception, key=ro.miui.ui.version.code
java.io.FileNotFoundException: /system/build.prop: open failed: EACCES (Permission denied)
at libcore.io.IoBridge.open(IoBridge.java:574)
at java.io.FileInputStream.(FileInputStream.java:160)
at us.zoom.androidlib.utils.ZmRomUtils.getSystemProperty(ZmRomUtils.java:93)
at us.zoom.androidlib.utils.ZmRomUtils.getMIUIVersionCode(ZmRomUtils.java:74)
at us.zoom.androidlib.utils.ZmRomUtils.isImmersedModeSupported(ZmRomUtils.java:61)
at com.zipow.videobox.ConfActivity.isImmersedModeEnabled(ConfActivity.java:1)
at com.zipow.videobox.ConfActivityNormal.onCreate(ConfActivityNormal.java:9)
at android.app.Activity.performCreate(Activity.java:8318)
at android.app.Activity.performCreate(Activity.java:8298)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3873)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4057)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2407)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:334)
at android.app.ActivityThread.main(ActivityThread.java:8278)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1065)
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Linux.open(Native Method)
at libcore.io.ForwardingOs.open(ForwardingOs.java:563)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:274)
at libcore.io.ForwardingOs.open(ForwardingOs.java:563)
at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8164)
at libcore.io.IoBridge.open(IoBridge.java:560)
at java.io.FileInputStream.(FileInputStream.java:160)
at us.zoom.androidlib.utils.ZmRomUtils.getSystemProperty(ZmRomUtils.java:93)
at us.zoom.androidlib.utils.ZmRomUtils.getMIUIVersionCode(ZmRomUtils.java:74)
at us.zoom.androidlib.utils.ZmRomUtils.isImmersedModeSupported(ZmRomUtils.java:61)
at com.zipow.videobox.ConfActivity.isImmersedModeEnabled(ConfActivity.java:1)
at com.zipow.videobox.ConfActivityNormal.onCreate(ConfActivityNormal.java:9)
at android.app.Activity.performCreate(Activity.java:8318)
at android.app.Activity.performCreate(Activity.java:8298)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3873)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4057)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2407)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:334)
at android.app.ActivityThread.main(ActivityThread.java:8278)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1065)

have a look (same errors - Android 12: BLUETOOTH_CONNECT , … )