Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS9: Try to open app via scheme if possible, or redirect to app store otherwise

My question is about iOS9 only!

I have an HTML landing page, and I try to redirect the user to my app via URL scheme if the app is installed, or redirect to the Appstore otherwise.

My code is:

document.addEventListener("DOMContentLoaded", function(event) {    var body = document.getElementsByTagName('body')[0];   body.onclick = function () {     openApp();   }; });  var timeout;  function preventPopup() {      clearTimeout(timeout);     timeout = null;     window.removeEventListener('pagehide', preventPopup); }  function openApp(appInstanceId, platform) {    window.addEventListener('pagehide', preventPopup);   document.addEventListener('pagehide', preventPopup);    // create iframe   var iframe = document.createElement("iframe");   document.body.appendChild(iframe);   iframe.setAttribute("style", "display:none;");   iframe.src = 'myscheme://launch?var=val';    var timeoutTime = 1000;   timeout = setTimeout(function () {      document.location = 'https://itunes.apple.com/app/my-app';    }, timeoutTime); } 

The problem is that the iframe trick doesn't work in Safari iOS9.

Any idea why?

My iframe trick based on this answer.

like image 274
gran33 Avatar asked Sep 21 '15 07:09

gran33


2 Answers

The iframe trick no longer works -- my guess is that Apple knows it will encourage more developers to implement Universal Links, more quickly.

You can still set window.location='your-uri-scheme://'; and fallback to the App Store after 500ms. There is a "dance" between popups if you take this approach, as we do at Branch (we do as a fallback if Universal Links don't work).

window.location = 'your-uri-scheme://'; // will result in error message if app not installed setTimeout(function() {    // Link to the App Store should go here -- only fires if deep link fails                    window.location = "https://itunes.apple.com/us/app/myapp/id123456789?ls=1&mt=8"; }, 500); 

I wish I had a better answer for you. iOS 9 is definitely more limited.

For a helpful overview of what's needed for Universal Links should you go that route, check out my answer here or read this tutorial

like image 61
st.derrick Avatar answered Sep 23 '22 14:09

st.derrick


As already mentioned setting window.location on iOS 9 still works. However, this brings up an Open in App dialog. I've put an example on https://bartt.me/openapp that:

  1. Launches Twitter when the Open in Twitter app is clicked.
  2. Falls back to the Twitter app in the App Store.
  3. Redirects to Twitter or the App Store without the user selecting Open in the Open in App dialog.
  4. Works in all browsers on iOS and Android.

Look at the source of https://lab.bartt.me/openapp for more information.

like image 28
Bart Teeuwisse Avatar answered Sep 22 '22 14:09

Bart Teeuwisse