Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to open a native iOS app from a web app

Summary I have an app with a correctly functioning URL scheme that I'd like to launch from a web app stored on the home screen, and the normal JavaScript redirect methods don't seem to work.

Details I'm trying to create an iOS web app, to be opened in full-screen mode from a link saved on the Home Screen. The web app needs to open a specific native app. I have already registered the url scheme for the native app, and verified that it works correctly - I can open the native app by typing the scheme directly into my Safari address bar, for instance. I can also open it from other applications using the +openURL: method of UIApplication. I would like to also open it with certain arguments from a native web app that can be added to the home screen.

What I'm trying to do is use JavaScript like so inside the native app:

window.location = "myapp://myparam"; 

When using this code inside the web app I get an alert saying:

"Cannot Open myWebAppName - myWebAppName could not be opened. The error was "This URL can't be shown".".

This same javascript when executed within Safari works correctly. I get the same result using window.location.replace("myapp://myparam").

The html for the web app is:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"    "http://www.w3.org/TR/html4/strict.dtd">  <html lang="en"> <head>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">     <title>untitled</title>     <meta name="generator" content="TextMate http://macromates.com/">     <meta name="author" content="Carl Veazey">     <!-- Date: 2012-04-19 -->     <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />     <meta name="apple-mobile-web-app-capable" content="yes" />     <meta names="apple-mobile-web-app-status-bar-style" content="black-translucent" /> </head> <body>     <script type="text/javascript" charset="utf-8">         if (window.navigator.userAgent.indexOf('iPhone') != -1) {             if (window.navigator.standalone == true) {                 window.location = "myapp://myparam";             } else {                 document.write("please save this to your home screen");         };} else {                 alert("Not iPhone!");                 document.location.href = 'please-open-from-an-iphone.html';         };     </script> </body> </html> 

What am I doing wrong here? I'm pretty inexperienced with javascript and mobile web so I suspect I'm just missing something obvious.

like image 458
Carl Veazey Avatar asked Apr 19 '12 21:04

Carl Veazey


People also ask

How do I open an app from a website?

Adding Javascript to Your Website to Open Your App You merely need to add some Javascript to your website that will auto trigger your app open. The function below, triggerAppOpen, will attempt to open your app's URI scheme once you replace your_uri_scheme with the one you added in the manifest above.

Can I install apps on iPhone from browser?

For most people, that's absolutely true. The vast majority of apps on iPhones can be installed only through the App Store, and Apple doesn't offer an official way to install software outside of the App Store using an installation file downloaded from the internet, a process called “sideloading.”

Can an iOS app be open source?

While Apple's iOS is closed-source software, that doesn't mean that all the apps available for Apple's mobile platform are also proprietary. Indeed, you'll find a solid number of free and open source apps available on the App Store.


1 Answers

Your code works if its in mobile safari but NOT if its from a bookmark on the iOS desktop. Never tried it that way before, but thats the issue. If i just set your JS to

<script type="text/javascript" charset="utf-8">  window.location = "myapp://myparam"; </script> 

It works in browser, but when bookmarked it fails. It might have to do something with how the url is loaded when its bookmarked since there is no chrome? My guess is that apple doesn't want booked mark pages to access local apps. Also, I've noticed that if I bookmark a locally hosted page, that works in mobile safari, I can't get it to load via bookmark. Its really odd....

Best recommendation I have for you is to make it

<meta name="apple-mobile-web-app-capable" /> 

instead of

<meta name="apple-mobile-web-app-capable" content="yes" /> 

This way it will be on the home screen, but will unfortunately load with the chrome. Thats the only solution I can think of.

like image 144
AJak Avatar answered Sep 29 '22 02:09

AJak