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

Как открыть собственное приложение для iOS из веб-приложения

Резюме У меня есть приложение с правильно действующей схемой URL, которую я хотел бы запустить из веб-приложения, хранящегося на главном экране, и обычные методы перенаправления JavaScript, похоже, не работают.

Подробнее Я пытаюсь создать веб-приложение iOS, которое будет открыто в полноэкранном режиме из ссылки, сохраненной на главном экране. Веб-приложение должно открыть определенное родное приложение. Я уже зарегистрировал схему URL-адресов для собственного приложения и подтвердил, что он работает правильно. Я могу открыть собственное приложение, например, путем ввода схемы непосредственно в адресную строку Safari. Я также могу открыть его из других приложений, используя метод +openURL: UIApplication. Я также хотел бы открыть его с помощью определенных аргументов из собственного веб-приложения, которое можно добавить на главный экран.

То, что я пытаюсь сделать, - это использовать JavaScript как внутри встроенного приложения:

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

При использовании этого кода внутри веб-приложения я получаю предупреждение:

"Не удается открыть myWebAppName - myWebAppName не удалось открыть. Ошибка:" Этот URL не может быть показан".

Этот же javascript, когда он выполняется в Safari, работает правильно. Я получаю тот же результат, используя window.location.replace("myapp://myparam").

html для веб-приложения:

<!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>

Что я здесь делаю неправильно? Я довольно неопытен с javascript и мобильной сетью, поэтому я подозреваю, что я просто пропустил что-то очевидное.

4b9b3361

Ответ 1

Ваш код работает, если он находится в мобильном сафари, но НЕ, если он из закладки на рабочем столе iOS. Никогда не пробовал это раньше, но это проблема. Если я просто установил JS в

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

Он работает в браузере, но при его закладке он терпит неудачу. Возможно, что-то нужно сделать с тем, как загружается URL-адрес, когда его закладки отмечены, поскольку нет хрома? Я предполагаю, что яблоко не хочет, чтобы отмеченные страницы отмечены для доступа к локальным приложениям. Кроме того, я заметил, что если я добавлю локально размещенную страницу, которая работает в мобильном сафари, я не смогу загрузить ее через закладку. Это действительно странно....

Лучшая рекомендация, которую я имею для вас, это сделать ее

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

вместо

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

Таким образом, он будет находиться на главном экране, но, к сожалению, будет загружен хром. Это единственное решение, о котором я могу думать.

Ответ 2

Если вам нужно открыть приложение iOS, если оно установлено, а также сохранить ваши функции страницы, location.href = 'myapp://?params=...'; не поможет, поскольку если myapp:// не зарегистрирован, перенаправление ведет пользователя к недоступному адресату.

Самая безопасная ставка, похоже, используется при использовании iframe. Следующий код откроет приложение iOS, если оно установлено, и не приведет к сбою, если это не так (хотя он может предупредить пользователя о невозможности достижения страницы, если приложение не установлено):

var frame = document.createElement('iframe');
frame.src = 'myapp://?params=...';
frame.style.display = 'none';
document.body.appendChild(frame);

// the following is optional, just to avoid an unnecessary iframe on the page
setTimeout(function() { document.body.removeChild(frame); }, 4);

Ответ 3

Этот простой HTML файл открывает приложение, если оно существует, иначе открывайте URL-адрес магазина. Он работает для Android и iOS.

https://gist.github.com/noelrocha/e423ff9ec98011e10ef7

Ответ 4

Попробуйте это: Индексная страница

<html><head></head><body>
<?php
$app_url = urlencode('YourApp://profile/blabla');
$full_url = urlencode('http://yoursite.com/profile/bla');
?>   

<iframe src="receiver.php?mylink1=<?php echo $app_url;?>" width="1px" height="1px" scrolling="no" frameborder="0"></iframe>
<iframe src="receiver.php?mylink2=<?php echo $full_url;?>" width="1px" height="1px" scrolling="no" frameborder="0"></iframe>

</body>
</html>

страница receiver.php:

<?php if ($first == $_GET['mylink1'])) { ?>
   <script type="text/javascript">
   self.window.location = "<?php echo $first;?>"; 
   </script>

<?php } if ($second == $_GET['mylink2'])) { ?>
   <script type="text/javascript">
   window.parent.location.href = "<?php echo $second ;?>"; 
   //window.top.location.href=theLocation;
   //window.top.location.replace(theLocation);
   </script>
<?php } ?>

Ответ 5

<?php 
// Detect device type
$iPod = stripos($_SERVER['HTTP_USER_AGENT'],"iPod");
$iPhone = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone");

// Redirect if iPod/iPhone
if( $iPod || $iPhone ){
    header('Location:http://example.com');      
}
?>

Приведенное выше будет перенаправлять браузер на введенный URL (http://example.com/), если устройство является iPod или iPhone. Добавьте script в начало веб-приложения, убедитесь, что вы сохранили его как файл .php, а не .html.

Источник: http://www.schiffner.com/programming-php-classes/php-mobile-device-detection/