jitsi / jitsi-meet-sdk-samples

Jitsi Meet mobile SDK examples (Android, iOS and React Native)
Apache License 2.0
270 stars 235 forks source link

My Android app cannot enter the meeting #233

Open Noah1991 opened 2 months ago

Noah1991 commented 2 months ago

I have set up a Jitsi Meet service locally using Docker, and I've mapped the domain name to my local IP on my PC. Accessing it via HTTPS in the PC's browser works fine without any SSL security warnings. When I connect my Android device to the PC's hotspot, accessing it through the browser works normally as well. However, I'm unable to join meetings using the SDK-Android-Demo.

Here is the log of the demo.

2024-04-25 18:06:52.103 401-401 Timeline net.jitsi.sdktest I Timeline: Activity_launch_request time:30661405 2024-04-25 18:06:52.113 401-401 OrientationModule net.jitsi.sdktest D onActivityPaused 2024-04-25 18:06:52.126 401-401 OrientationModule net.jitsi.sdktest D onActivityCreated 2024-04-25 18:06:52.127 401-544 ViewContentFactory net.jitsi.sdktest D initViewContentFetcherClass 2024-04-25 18:06:52.127 401-544 ContentCatcher net.jitsi.sdktest I ViewContentFetcher : ViewContentFetcher 2024-04-25 18:06:52.127 401-544 ViewContentFactory net.jitsi.sdktest D createInterceptor took 0ms 2024-04-25 18:06:52.129 401-401 DecorView[] net.jitsi.sdktest D getWindowModeFromSystem windowmode is 1 2024-04-25 18:06:52.129 401-401 DecorView net.jitsi.sdktest D old windowMode:0 new windowMode: 1 isNeedToChangeCaptionView false 2024-04-25 18:06:52.129 401-401 DecorView net.jitsi.sdktest D createDecorCaptionView windowingMode:1 mWindowMode 1 2024-04-25 18:06:52.137 401-401 OrientationModule net.jitsi.sdktest D onActivityStarted 2024-04-25 18:06:52.138 401-401 OrientationModule net.jitsi.sdktest D onActivityResumed 2024-04-25 18:06:52.148 401-401 unknown:ReactContext net.jitsi.sdktest W initializeMessageQueueThreads() is called. 2024-04-25 18:06:52.151 401-678 ReactNativeJS net.jitsi.sdktest I Running "App 2024-04-25 18:06:52.168 401-401 DecorView[] net.jitsi.sdktest D onWindowFocusChanged hasWindowFocus false 2024-04-25 18:06:52.169 401-401 DecorView net.jitsi.sdktest I showOrHideHighlightView: hasFocus=false; winMode=1; isMrgNull=true 2024-04-25 18:06:52.173 401-679 JitsiMeetSDK net.jitsi.sdktest I [features/full-screen] Setting full-screen mode: false 2024-04-25 18:06:52.183 401-679 JitsiMeetSDK net.jitsi.sdktest W [features/base/sounds] PLAY_SOUND: no sound found for id: RECORDING_OFF_SOUND 2024-04-25 18:06:52.193 401-401 DecorView[] net.jitsi.sdktest D onWindowFocusChanged hasWindowFocus true 2024-04-25 18:06:52.193 401-401 DecorView net.jitsi.sdktest I showOrHideHighlightView: hasFocus=true; winMode=1; isMrgNull=true 2024-04-25 18:06:52.208 401-401 DecorView[] net.jitsi.sdktest D getWindowModeFromSystem windowmode is 1 2024-04-25 18:06:52.208 401-401 DecorView net.jitsi.sdktest D old windowMode:1 new windowMode: 1 isNeedToChangeCaptionView false 2024-04-25 18:06:52.208 401-401 DecorView[] net.jitsi.sdktest D updateDecorCaptionStatus displayWindowDecor is false 2024-04-25 18:06:52.228 401-401 ReactNative net.jitsi.sdktest I [GESTURE HANDLER] Initialize gesture handler for root view com.facebook.react.ReactRootView{6eaac7a V.E...... ......ID 0,0-2560,1504 #47} 2024-04-25 18:06:52.287 401-695 JitsiMeetSDK net.jitsi.sdktest I Using AudioDeviceHandlerGeneric as the audio device handler 2024-04-25 18:06:52.288 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioDeviceHandlerGeneric Available audio devices: [EARPIECE, SPEAKER] 2024-04-25 18:06:52.288 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioMode Update audio route for mode: 0 2024-04-25 18:06:52.290 401-401 JitsiMeetSDK net.jitsi.sdktest D AudioDeviceHandlerGeneric Audio devices added 2024-04-25 18:06:52.301 401-695 AudioManager net.jitsi.sdktest I In setSpeakerphoneOn(), on: false, calling application: net.jitsi.sdktest 2024-04-25 18:06:52.302 401-695 AudioManager net.jitsi.sdktest I In setBluetoothScoOn(), on: false, calling application: net.jitsi.sdktest 2024-04-25 18:06:52.303 401-695 AudioManager net.jitsi.sdktest I In stopBluetoothSco(), calling application: net.jitsi.sdktest 2024-04-25 18:06:52.304 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioDeviceHandlerGeneric Available audio devices: [EARPIECE, SPEAKER] 2024-04-25 18:06:52.304 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioMode Update audio route for mode: 0 2024-04-25 18:06:52.309 401-401 DecorView[] net.jitsi.sdktest D getWindowModeFromSystem windowmode is 1 2024-04-25 18:06:52.310 401-401 DecorView net.jitsi.sdktest D old windowMode:1 new windowMode: 1 isNeedToChangeCaptionView false 2024-04-25 18:06:52.310 401-401 DecorView[] net.jitsi.sdktest D updateDecorCaptionStatus displayWindowDecor is false 2024-04-25 18:06:52.336 401-695 AudioManager net.jitsi.sdktest I In setSpeakerphoneOn(), on: false, calling application: net.jitsi.sdktest 2024-04-25 18:06:52.337 401-695 AudioManager net.jitsi.sdktest I In setBluetoothScoOn(), on: false, calling application: net.jitsi.sdktest 2024-04-25 18:06:52.338 401-695 AudioManager net.jitsi.sdktest I In stopBluetoothSco(), calling application: net.jitsi.sdktest 2024-04-25 18:06:52.342 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioMode Updating audio device list 2024-04-25 18:06:52.343 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioMode Updating audio device list 2024-04-25 18:06:52.446 401-695 JitsiMeetSDK net.jitsi.sdktest I Using AudioDeviceHandlerGeneric as the audio device handler 2024-04-25 18:06:52.446 401-401 JitsiMeetSDK net.jitsi.sdktest D AudioDeviceHandlerGeneric Audio devices added 2024-04-25 18:06:52.446 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioDeviceHandlerGeneric Available audio devices: [EARPIECE, SPEAKER] 2024-04-25 18:06:52.446 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioMode Update audio route for mode: 0 2024-04-25 18:06:52.447 401-679 JitsiMeetSDK net.jitsi.sdktest I [features/base/net-info] Network changed {"isOnline":true,"details":{"isConnectionExpensive":false,"txLinkSpeed":286,"rxLinkSpeed":286,"linkSpeed":286,"subnet":"255.255.255.0","ipAddress":"192.168.137.181","frequency":2437,"strength":99,"bssid":"02:00:00:00:00:00"},"networkType":"wifi"} 2024-04-25 18:06:52.450 401-679 JitsiMeetSDK net.jitsi.sdktest I [features/app] appNavigate to https://www.benboma.xyz:8443/110 2024-04-25 18:06:52.462 401-695 AudioManager net.jitsi.sdktest I In setSpeakerphoneOn(), on: false, calling application: net.jitsi.sdktest 2024-04-25 18:06:52.463 401-695 AudioManager net.jitsi.sdktest I In setBluetoothScoOn(), on: false, calling application: net.jitsi.sdktest 2024-04-25 18:06:52.463 401-679 JitsiMeetSDK net.jitsi.sdktest I [features/base/connection] No connection found while disconnecting. 2024-04-25 18:06:52.463 401-695 AudioManager net.jitsi.sdktest I In stopBluetoothSco(), calling application: net.jitsi.sdktest 2024-04-25 18:06:52.463 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioDeviceHandlerGeneric Available audio devices: [EARPIECE, SPEAKER] 2024-04-25 18:06:52.463 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioMode Update audio route for mode: 0 2024-04-25 18:06:52.464 401-679 JitsiMeetSDK net.jitsi.sdktest I [features/app] Loaded SDK undefined 2024-04-25 18:06:52.477 401-695 AudioManager net.jitsi.sdktest I In setSpeakerphoneOn(), on: false, calling application: net.jitsi.sdktest 2024-04-25 18:06:52.478 401-695 AudioManager net.jitsi.sdktest I In setBluetoothScoOn(), on: false, calling application: net.jitsi.sdktest 2024-04-25 18:06:52.478 401-695 AudioManager net.jitsi.sdktest I In stopBluetoothSco(), calling application: net.jitsi.sdktest 2024-04-25 18:06:52.480 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioMode Update audio route for mode: 0 2024-04-25 18:06:52.494 401-695 AudioManager net.jitsi.sdktest I In setSpeakerphoneOn(), on: false, calling application: net.jitsi.sdktest 2024-04-25 18:06:52.495 401-695 AudioManager net.jitsi.sdktest I In setBluetoothScoOn(), on: false, calling application: net.jitsi.sdktest 2024-04-25 18:06:52.495 401-695 AudioManager net.jitsi.sdktest I In stopBluetoothSco(), calling application: net.jitsi.sdktest 2024-04-25 18:06:52.497 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioMode Updating audio device list 2024-04-25 18:06:52.497 401-695 chatty net.jitsi.sdktest I uid=10491(net.jitsi.sdktest) pool-2-thread-1 identical 1 line 2024-04-25 18:06:52.497 401-695 JitsiMeetSDK net.jitsi.sdktest I AudioMode Updating audio device list 2024-04-25 18:06:52.555 401-679 JitsiMeetSDK net.jitsi.sdktest E [features/base/lib-jitsi-meet] Failed to load config from https://www.benboma.xyz:8443/config.js?room=110 Error(TypeError){"message":"Network request failed","stack":"index.android.bundle:129:8060\nindex.android.bundle:580:496\nvalue@index.android.bundle:29:681\nvalue@index.android.bundle:42:3861\nindex.android.bundle:42:676\nvalue@index.android.bundle:42:2511\nvalue@index.android.bundle:42:647\nvalue@[native code]"} 2024-04-25 18:06:52.695 401-401 OrientationModule net.jitsi.sdktest D onActivityStopped 2024-04-25 18:06:52.697 401-401 OrientationModule net.jitsi.sdktest D onActivitySaveInstanceState 2024-04-25 18:06:53.091 401-679 JitsiMeetSDK net.jitsi.sdktest I [features/base/dialog] The conference will be reloaded after 10 seconds.

The link "https://www.benboma.xyz:8443/config.js?room=110" can be accessed normally using the default browser on my Android phone.

Noah1991 commented 2 months ago

The SSL certificate being used is a free certificate from DigiCert, and it has 6 months left until expiration.

saghul commented 2 months ago

I am unable to access that domain. Is it up?

Noah1991 commented 2 months ago

By modifying the local hosts file to point the domain name to an IP address within the local network, I'm aiming to make the SSL certificate within the local network trusted.

Noah1991 commented 2 months ago

The server deployment version is stable-9364.

saghul commented 2 months ago

It's hard to tell without being able to test it. Android is complaining it cannot connect to it. This could be because the full chain cert is not presented, for example. Or because a self-signed cert is used.

Noah1991 commented 2 months ago

The certificate being used is trusted, and this domain name mapped to the certificate on a public network service is recognized normally. Additionally, after mapping it to a local IP, Chrome also considers the connection secure, recognizing the certificate as trusted.

You can try modifying your hosts file locally to point a domain name to your local IP address and then attempt to access it using the Android client.

Noah1991 commented 2 months ago

And the local network is connected to the public network, not isolated.

saghul commented 2 months ago

Not sure what your network scenario is, but the SDK uses okhttp unde the hood, and it's not liking the certificate.

damencho commented 2 months ago

What does https://whatsmychaincert.com/ say about your deployment? Do you have the full chain in there?

saghul commented 2 months ago

The problem is that URL doesn't seem to be accessible from the outside so it errors.

Noah1991 commented 2 months ago

I'll start by summarizing my configuration and actions: 1、 A laptop capable of creating a WiFi, and an Android smartphone.

2、A public domain name is needed, and you'll also need to apply for a CA certificate for that domain name. The certificate authority (CA) issuing the certificate is DigiCert.

3、On the laptop, run the Jitsi Meet service using Docker. Modify the .env file to set PUBLIC_URL to your domain name. Import the cert.crt and cert.key files associated with the domain name into the config/keys/ directory. Then, run the Jitsi Meet service.

4、Modify the hosts configuration on your laptop to point the domain name to your local IP address. The hosts file is located at C:\Windows\System32\drivers\etc.

For example:

Open the hosts file located at C:\Windows\System32\drivers\etc\hosts using a text editor like Notepad. Add a new line at the end of the file with the following format: your_local_ip domain_name Save the hosts file after making the changes. Replace your_local_ip with the actual IP address of your laptop and domain_name with the domain name you want to map to your local IP address.

5、At this point, if you access the domain name "https://your_domain:8443" in your computer's browser, the connection should be trusted.

6、When you connect your Android phone to the WiFi created by the computer, both the computer and the phone are on the same local network. At this point, the phone's browser can also access the Jitsi Meet service using the domain name. There's no need to modify the hosts file on the phone because the phone is connected to the WiFi created by the computer, so its requests pass through the computer and are forwarded, making the hosts modification on the computer sufficient.

7、After everything is set up, install the Jitsi Meet demo app on your Android phone. Then, modify the server address in the app to your domain name: "https://your_domain:8443".

The domain name and certificate I used locally were purchased from a professional organization, and they can be deployed on the public network for others to access. I've just utilized them within the local network.

Noah1991 commented 2 months ago

Not sure what your network scenario is, but the SDK uses okhttp unde the hood, and it's not liking the certificate.

I've also tried running another service locally and developed an Android app using OkHttp to access the service's API. It can access the service normally without any HTTPS-related warnings.

saghul commented 2 months ago

I don't know what to tell you. It's not possible for us to replicate your use case.

Noah1991 commented 2 months ago

I have given up on this approach and currently use webview to load the iframe so Android can use it. Thank you for your patient answer