apache / cordova-ios

Apache Cordova iOS
https://cordova.apache.org/
Apache License 2.0
2.15k stars 986 forks source link

iOS Platform opening URL's externally on safari after reconnecting to internet #988

Closed dcxn closed 1 year ago

dcxn commented 3 years ago

Bug Report

Problem

After upgrading from cordova-ios@5.1.1 to cordova-ios@^6.0.0, apps that connect to a Firebase Realtime DB start opening long polling URL's externally on safari after reconnecting to the internet, moving the user away from the app into a meaningless URL page. Currently we can only attribute this to the platform changes starting with 6.0.0, since this behaviour is not present on 5.1.1.

recon

What is expected to happen?

Firebase long polling (and possibly other) requests performed on the background should not be randomly catched and opened externally on safari, confusing and moving the user away from the app.

What does actually happen?

When reconnecting, the app opens the system safari browser with a random meaningless URL for the user, such as https://{x}.firebaseio.com/.lp?dframe=t&id={x}&pw={x}&ns={x}

Information

This can be reproduced on an ionic fresh starter app with cordova and minimal firebase configuration to load data from Firebase Realtime DB.

  1. Install and open the app on a real device
  2. Disconnect from internet - firebase wont be able to use websockets and fall back to long polling requests and retries
  3. Connect to the internet - behaviour seen on .gif above

Currently, downgrading to cordova-ios@5.1.1 seems to be a way to stop the behaviour. Also noticed the new feature Add preference for webview window handling which could be related to this, but issue is present already in version 6.0.0. Setting up the AllowNewWindows preference doesn't produce any effect on this bug.

Command or Code

Example of minimal cordova setup to replicate, used in a fresh ionic started app :

"cordova-ios": "^6.1.1",
"cordova-plugin-device": "^2.0.2",
"cordova-plugin-ionic-keyboard": "^2.2.0",
"cordova-plugin-ionic-webview": "^4.2.1",
"cordova-plugin-splashscreen": "^5.0.2",
"cordova-plugin-statusbar": "^2.4.2",
"cordova-plugin-whitelist": "^1.3.3",

Environment, Platform, Device

Seen on real iPhone device with iOS 13.7.

Version information

Ionic ^5; Cordova ^10 CLI; cordova-ios@^6.0.0 platform; Xcode Version 11.7 (11E801a);

Checklist

adirgan commented 3 years ago

I have the same problem but with another library that is the one for stripe-js, but it happens to me every time I start my app, it opens safari to the url of js.stripe.com.

adirgan commented 3 years ago

any help from anyone with this problem?

it is very easy to reproduce the problem, put the following in the index.html in the head

<script src = "https://js.stripe.com/v3/"> </script>

and compile for ios with cordova-ios@^6.0.0, when you open the app it immediately opens a safari window called that url https://js.stripe.com/v3/

bhimudev commented 3 years ago

I have a custom web view component, every time the page load completes, safari is opening with a new URL with ads form doubleclick, not very sure, where its picking up form, however app working fine without opening any thing on safari if i use ios@5.1

bond-ludafit commented 3 years ago

I am experiencing the same behaviour with the firebase page as the OP.

bhimudev commented 3 years ago

I have added all the urls to whitelist to avoid this issue, this was not required pre 6.0 release. one of our application is loading a webview, which loads js file form doubleclick.net, I have added doubleclick.net to whitelist to avoid opening js file in safari.

bond-ludafit commented 3 years ago

@bhimudev can you provide an exmaple of where these urls were whitelisted?

bhimudev commented 3 years ago

@bond-ludafit below are the urls i have whitelisted allow-navigation href="https://*.licdn.com/" allow-navigation href="https://.hotjar.com/" allow-navigation href="https://.pixlee.co/" allow-navigation href="https://.pixlee.com/" allow-navigation href="https://.doubleclick.com/" allow-navigation href="https://.doubleclick.net/" allow-navigation href="https://.doubleclick.com/*"

vickyanands commented 3 years ago

I have the same issue with ios app using stripe. The app is also getting rejected because of bad user experience even in testflight.

amjadyahya1 commented 3 years ago

I can confirm that it is happening also with cordova-ios 6.1.1

No solution till now?

timbru31 commented 3 years ago

We've just merged a PR that could fix the issue you are describing. Could one of you test the current git master and see if the problem is solved? (cordova platform add https://github.com/apache/cordova-ios)

amjadyahya1 commented 3 years ago

I have tested it.. and can confirm that this bug has been fixed, it no longer opens an external url.

vickyanands commented 3 years ago

HI Timbru Yes, I can also confirm that this is fixed. But if someone wants to have communication then allow-navigation is must in ios-config for external communication such as if you are doing for stripe integration. I have tested for stripe and that is working fine.

Thanks, Timbru for your help and if possible check-in into the main branch in npm to release a new version because many people are facing this issue and are looking for fixes elsewhere.

Vicky Anand

sagrawal31 commented 3 years ago

We are still facing this issue in 6.1.1.

x140l31 commented 3 years ago

We are still facing this issue in 6.1.1.

Looks good in 6.2.0

dpogue commented 1 year ago

Closing this as fixed in 6.2.0