jitsi / jitsi-meet

Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.
https://jitsi.org/meet
Apache License 2.0
23.09k stars 6.71k forks source link

disableDeepLinking : true has stopped working #12724

Closed eonbhuwan closed 1 year ago

eonbhuwan commented 1 year ago

Download Jitsi App or Launch in Web option is still appearing on mobile browsers. It was working few days back.

saghul commented 1 year ago

@horymury

imedia3 commented 1 year ago

Is this the same as my case with the latest release? I'm trying to allow mobile browsers without Mobile app promo (previously it worked).

If I use disableDeepLinking : true (or false) together with MOBILE_APP_PROMO: false, - user can't join any room with mobile browser - with error "Video chat isn't available on mobile. Please use jitsi meet on desktop to join calls." (both on Android/iOS)

After clicking "Use desktop version" user can use mobile browser.

eonbhuwan commented 1 year ago

Is this the same as my case with the latest release? I'm trying to allow mobile browsers without Mobile app promo (previously it worked).

If I use disableDeepLinking : true (or false) together with MOBILE_APP_PROMO: false, - user can't join any room with mobile browser - with error "Video chat isn't available on mobile. Please use jitsi meet on desktop to join calls." (both on Android/iOS)

After clicking "Use desktop version" user can use mobile browser.

We are not using MOBILE_APP_PROMO, but disableDeepLinking : true was working perfectly before as it was skipping the selection "where to launch jitsi video". But recently it has stopped working and now the selection page has started to appear. User are unable to connect directly on video but has to choose the launch in web option first.

imedia3 commented 1 year ago

We are not using MOBILE_APP_PROMO, but disableDeepLinking : true was working perfectly before as it was skipping the selection "where to launch jitsi video".

Thanks, anyway, in our case the main problem is the same disableDeepLinking: true doesn't work as expected.

By the way, if I use this setting in URL, it works. i.e. jitsi-meet-domain.com/RoomName#config.disableDeepLinking=true , but still, I think everything is well with our interface_config.js and config.js because other settings from both files working as they set.

Another refs. with recently updates: https://community.jitsi.org/t/launch-in-web-with-iframe-api/117614/7 https://community.jitsi.org/t/disabledeeplinking-true-has-stopped-working/119920

saghul commented 1 year ago

This is likely the culprit: https://github.com/jitsi/jitsi-meet/pull/12704

@horymury will take a look when available.

Please note it's the end of the year and some of us are trying to stay off and recharge our batteries.

eonbhuwan commented 1 year ago

This is likely the culprit: #12704

@horymury will take a look when available.

Please note it's the end of the year and some of us are trying to stay off and recharge our batteries.

Thanks, updated the code as per recent changes and its working now. Please enjoy.

horymury commented 1 year ago

@saghul do we want the deprecated config (if set) to take precedence over the new one for disabling deeplinking?

Thank you.

saghul commented 1 year ago

If the new one is not set, then the old one should work.

horymury commented 1 year ago

If the new one is not set, then the old one should work.

The new one is set on the deploy - so currently the old one is completely ignored

DamjanJovanovic commented 8 months ago

There is definitely still a bug here, possibly because in react/features/deep-linking/functions.ts the getDeepLinkingPage() function does a "return Promise.resolve()", and then back in react/features/app/getRouteToRender.web.ts function _getWebConferenceRoute() cannot convert void to boolean in the "if (deepLinkComponent)".

horymury commented 8 months ago

There is definitely still a bug here, possibly because in react/features/deep-linking/functions.ts the getDeepLinkingPage() function does a "return Promise.resolve()", and then back in react/features/app/getRouteToRender.web.ts function _getWebConferenceRoute() cannot convert void to boolean in the "if (deepLinkComponent)".

@DamjanJovanovic the given if is falsy when deepLinkComponent is null or undefined- the above should not be a problem. Could you please describe how the issue you encountered manifests? Have you tried the new config overwrite for disabling/enabling deeplinking? : https://github.com/jitsi/jitsi-meet/blob/f847a3e2e03a1468f4a62b9df35486ca1fdd7b28/config.js#L1214

DamjanJovanovic commented 8 months ago

There is definitely still a bug here, possibly because in react/features/deep-linking/functions.ts the getDeepLinkingPage() function does a "return Promise.resolve()", and then back in react/features/app/getRouteToRender.web.ts function _getWebConferenceRoute() cannot convert void to boolean in the "if (deepLinkComponent)".

@DamjanJovanovic the given if is falsy when deepLinkComponent is null or undefined- the above should not be a problem. Could you please describe how the issue you encountered manifests? Have you tried the new config overwrite for disabling/enabling deeplinking? :

https://github.com/jitsi/jitsi-meet/blob/f847a3e2e03a1468f4a62b9df35486ca1fdd7b28/config.js#L1214

On my self-hosted Debian box, with clients using the IFrame API, in /usr/share/jitsi-meet-web-config/config.js I had both:

    disableDeepLinking: true,
    deeplinking: {
        disabled: true,
    },

and it still wasn't working. The only way I got it to work is by hacking the deep linking code to completely disable it with my patch below, then building the patched jitsi-meet project (npm i && make), then copying libs/app.min.js and libs/external_api.min.js and libs/lib-jitsi-meet.min.* and overwriting the files in /usr/share/jitsi-meet/libs with them, then rebooting. Then, it was crucial to clear the cache/cookies/history/everything in the client web browsers (but why?). Only then did it start working.

While developing this patch, I got some compile-time error about conversion of void to boolean during "make", which is why I return Promise.resolve(false); instead of return Promise.resolve();, but I can't seem to reproduce this any more.

diff --git a/react/features/deep-linking/functions.ts b/react/features/deep-linking/functions.ts
index d48b95bee..93b684734 100644
--- a/react/features/deep-linking/functions.ts
+++ b/react/features/deep-linking/functions.ts
@@ -64,9 +64,12 @@ export function getDeepLinkingPage(state: IReduxState) {
             || !room
             || state['features/base/config'].deeplinking?.disabled
             || (isVpaasMeeting(state) && (!appScheme || appScheme === 'com.8x8.meet'))) {
-        return Promise.resolve();
+        return Promise.resolve(false);
     }

+    // Stop deep linking from EVER HAPPENING:
+    return Promise.resolve(false);
+/*
     if (isMobileBrowser()) { // mobile
         const mobileAppPromo
             = typeof interfaceConfig === 'object'
@@ -80,6 +83,7 @@ export function getDeepLinkingPage(state: IReduxState) {
     return _openDesktopApp(state).then(
         // eslint-disable-next-line no-confusing-arrow
         result => result ? DeepLinkingDesktopPage : undefined);
+*/
 }

 /**

Debian packages installed are: jitsi-meet 2.0.9078-1 jitsi-meet-prosody 1.0.7629-1 jitsi-meet-turnserver 1.0.7629-1 jitsi-meet-web 1.0.7629-1 jitsi-meet-web-config 1.0.7629-1 jitsi-videobridge2 2.3-59-g5c48e421-1