Подтвердить что ты не робот

Как предотвратить предупреждение Safari iOS при попытке открыть не установленное собственное приложение?

Я искал способ открыть собственное приложение для iOS из браузера. Я нашел здесь достойное решение: Возможно ли зарегистрировать URL-адрес URL-адреса для приложений iPhone, например YouTube и Maps?

Это решение отлично работает, когда у вас установлено приложение. но когда пользователь не установил это приложение, сафари выдает сообщение об ошибке, в котором говорится: "Safari не может открыть страницу, потому что адрес недействителен".

Есть ли способ предотвратить это поведение и вместо этого попросить пользователя загрузить приложение?

4b9b3361

Ответ 1

Вот решение, которое работает для меня:

var timeout;

function preventPopup() {
    clearTimeout(timeout);
    timeout = null;
    window.removeEventListener('pagehide', preventPopup);
}

function openApp() {    
    $('<iframe />')
    .attr('src', appurl)
    .attr('style', 'display:none;')
    .appendTo('body');

    timeout = setTimeout(function() {
            document.location = appstore;
    }, 500);
    window.addEventListener('pagehide', preventPopup);
} 

Ответ 2

используйте iframe.

$('<iframe />').attr('src', "appname://").attr('style', 'display:none;').appendTo('body');

Ответ 3

Для решения этого вопроса и предотвращения нежелательного предупреждения о сафарике iOS я использовал другой подход для обработки также iframe, но без событий jquery и listener. Он отлично работает.

    var iframe = document.createElement("iframe");

    iframe.style.border = "none";
    iframe.style.width = "1px";
    iframe.style.height = "1px";
    iframe.onload = function () {
        document.location = alt;
    };
    iframe.src = nativeSchemaUrl; //iOS app schema url

    window.onload = function(){
        document.body.appendChild(iframe);
    }

    setTimeout(function(){
        window.location = fallbackUrl; //fallback url
    },300);

Ответ 4

Я использую meta refresh как резерв, потому что это работает без javascript. Этот код работает в iOS и Android.

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="refresh" content="1; url=http://www.facebook.com">
    <title>Redirecting..</title>
    <script>
    function tryOpenApp() {
                var iframe = document.createElement("iframe");
                iframe.style.border = "none";
                iframe.style.width = "1px";
                iframe.style.height = "1px";
                iframe.src = "fb://feed/";
                document.body.appendChild(iframe);
    }
    </script>
  </head>
  <body onload="tryOpenApp()">
  </body>
</html>

Тест http://static-pmoretti.herokuapp.com/deep-link/

Ответ 5

Правильный способ сделать это - использовать Smart App Banners: https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html

Если ваше приложение не установлено, баннер позволит установить его. Если он установлен, он откроет приложение, и у вас есть способ указать собственные аргументы URL для передачи в приложение.