iOS refusing to open oauth link

@Harri_Sarsa , this one’s a real doozy, so I’m tagging you.

My app lets users sync their Google calendars via Google’s oauth.
I am testing it as a web app at the moment (web app for both desktop and mobile, but not native mobile.)

I have a container that, when clicked, hits my server to get the oauth URL, then that url is opened using “open url”:

It works perfectly on Android and desktop, but iPhones will not open the browser app.

Here are the troubleshooting steps I have taken:

  • I had the app put the authUrl into a page variable and bound that to a text component. I then copied that and manually pasted it into the “Open URL” node (so it was working off of static text instead of node output). That opened it just fine.

  • I tried binding the “Open URL” node to the page variable, so it was getting the node output from the pageVar instead of directly from the node output. I confirmed that the text variable populated the oauth url, but it did not open.

  • Instead of setting the page variable using the node output, I set the page variable to the static test “” and had the “Open URL” open that. It opened just fine.

As you can see, the variable authUrl is a text variable without anything fancy going on:

I am at a complete loss about why this node would work on web on Android and desktop but get hung up on web on iOS when trying to pull the authUrl from a node output.

I also tried using a formula binding. No luck there, either.

@Mari , hi! Any chance you might have insight into this issue? I continue to be stumped. This is app 173781. If you want to DM me an email address for you, I can give you a custom link that would log you in as a user.

Hi, just to see if I’m getting the scenario right:

  1. This happens on Safari on iOS? Built web app or web preview?
  2. The URL input works as a static string, but when you construct it with output from a previous node, it doesn’t work?

Have you checked if there is any error output from the 2nd output port when the execution of Open URL fails?

  1. Correct, this is happening on Safari on iOS on a built web app.
  2. Correct, the URL input works as a static string but when I use the output from a previous node (exact same value), it doesn’t work.

I have tried adding an alert to the second output port, but it hasn’t ever triggered.

Very strange. Does it work fine with the same standalone web app on Safari desktop? What about on Safari iOS? What about Chrome browser on iOS? What about a different iOS device?

Can you share repro steps to the issue, via DM if needed for sensitive login info?


  1. Safari Desktop: I don’t have a Mac, so I can’t test this :frowning:
  2. on Safari iOS: Button works if url hard-coded. Does not work if pulling from node.
  3. Chrome browser on iOS: Works! It gave me a “popup blocked” notification and let me allow it. But I don’t think popup blocking is the issue with Safari since it works when the url is hard-coded.
  4. Different iOS device: I only have the one iPhone, so I can’t test this :frowning:

I’m following up in a DM with login info so you can play with it yourself.

Thank you so, so, so much for looking into this. I appreciate you guys a lot.

Actually, now that I think about it, a friend with an iPhone 11 Pro (Safari) also hit this bug.

I don’t understand what the core issue is, but I did find a workaround for this.

Safari wouldn’t trigger the “open url” node if there were any other nodes in the function.

Originally, I had a “get record” node that fetched the Google auth url, then the “open url” node opened it.

Since that didn’t work, I moved the “get record” node to trigger automatically on page load and store the auth url in a page variable. Then when the user hits the “continue with Google” button, the only node that triggers is the “open url” node with the page variable as an input.

Works now!

1 Like