Определите, существует ли приложение и запустите его на iOS - PullRequest
74 голосов
/ 21 апреля 2011

Есть ли способ проверить iOS, чтобы увидеть, было ли установлено и запущено другое приложение?Если мне не изменяет память, это было невозможно в ранних версиях, но изменилось ли это?

Ответы [ 6 ]

65 голосов
/ 21 апреля 2011

Выполнимо, но сложно.

Запуск установленных приложений, таких как приложения FB или Twitter, осуществляется с помощью пользовательской схемы URL.Они могут использоваться как в других приложениях, так и на веб-сайтах.

Вот статья о том, как сделать это с вашим собственным приложением .

Просмотр URL-адресатам, правда, может быть сложно.Хорошим примером приложения, которое обнаруживает установленные приложения, является Boxcar .Дело в том, что Boxcar обладает передовыми знаниями о пользовательских URL.Я вполне (на 99%) уверен, что существует canOpenURL:, поэтому знание пользовательской схемы приложения, на которое вы хотите нацелиться заранее, делает это простым в реализации.

Вот частичноеперечислите некоторых наиболее популярных URL-адресов, с которыми вы можете проверить.

Но если вы хотите сканировать приложения и определять их URL-адреса, это нельзя сделать на устройстве, не поддерживающем JB.

Вот сообщение в блоге , рассказывающее о том, как люди из Bump справились с этой проблемой.

41 голосов
/ 25 октября 2011

Существует сценарий, подобный следующему.

<script type="text/javascript">
function startMyApp()
{
  document.location = 'yourAppScheme://';
  setTimeout( function()
  {
      if( confirm( 'You do not seem to have Your App installed, do you want to go download it now?'))
      {
        document.location = 'http://itunes.apple.com/us/app/yourAppId';
      }
  }, 300);
 }
</script>

Вызывая этот сценарий из Интернета (<a href="#" onclick="startMyApp()">Try to start MyApp</a>), вы можете определить, установлено ли на устройстве ваше приложение со схемой "yourAppScheme" или нет.,

Приложение запустится, если оно установлено на устройстве и в нем зарегистрировано «yourAppScheme».Если приложение не установлено, вы можете предложить пользователю установить это приложение из iTunes.

22 голосов
/ 20 ноября 2014

Чтобы проверить, установлено ли приложение (например, Очистить):

BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];

Чтобы открыть это приложение:

BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];
12 голосов
/ 21 февраля 2015

Скрывает сообщение об ошибке, если приложение не установлено

В Филиал мы используем форму кода ниже - обратите внимание, что iframe работает на болеебраузеры.Просто замените его в URI вашего приложения и на ссылку в App Store.

<!DOCTYPE html>
<html>
    <body>
        <script type="text/javascript">
            window.onload = function() {
                // Deep link to your app goes here
                document.getElementById("l").src = "my_app://";

                setTimeout(function() {
                    // Link to the App Store should go here -- only fires if deep link fails                
                    window.location = "https://itunes.apple.com/us/app/my.app/id123456789?ls=1&mt=8";
                }, 500);
            };
        </script>
        <iframe id="l" width="1" height="1" style="visibility:hidden"></iframe>
    </body>
</html>

Существует вторая возможность, которая в первую очередь полагается на файлы cookie, а перенаправление JavaScript только в качестве запасного варианта.Вот логика:

Когда пользователь без приложения сначала нажимает на ссылку на ваше приложение, он или она перенаправляется прямо в App Store.Это достигается с помощью ссылки на ваше приложение, фактически являющееся динамически генерируемой страницей на ваших серверах с перенаправлением.Вы создаете cookie и регистрируете «цифровой отпечаток» IP-адреса, ОС, версии ОС и т. Д. На своем бэкэнде.

Когда пользователь устанавливает приложение и открывает его, вы собираете и отправляете еще один «цифровой отпечаток»"к вашему бэкэнду.Теперь ваш бэкэнд знает, что ссылка установлена. При любых последующих посещениях ссылок, связанных с вашим приложением, ваши серверы следят за тем, чтобы динамически генерируемая страница перенаправления приводила к приложению, а не к App Store, на основе файла cookie, отправленного с запросом.

Это позволяет избежать уродливого перенаправления, но требует гораздо больше работы.

2 голосов
/ 21 мая 2015

Насколько я понимаю, из-за проблем с конфиденциальностью вы не видите, установлено ли приложение на устройстве.Чтобы обойти это, попробуйте запустить приложение и, если оно не запустится, заставить пользователя нажать альтернативную ссылку.Чтобы предотвратить возникновение ошибки мобильного сафари, я обнаружил, что размещение в iframe помогает решить проблему.

Вот фрагмент кода, который я использовал.

<form name="mobileForm" action="mobile_landing.php" method="post">
        <input type="hidden" name="url" value="<?=$web_client_url?>">
        <input type="hidden" name="mobile_app" value="<?=$mobile_app?>">
        <input type="hidden" name="device_os" value="<?=$device_os?>">
    </form>
<script type="text/javascript">
        var device_os = '<? echo $device_os; ?>'; 


        if (device_os == 'ios'){

        var now = new Date().valueOf(); 
        setTimeout(function () { 
            if (new Date().valueOf() - now > 100) 
                return;

        document.forms[0].submit(); }, 5); 


        var redirect = function (location) {
            var iframe = document.createElement('iframe');
            iframe.setAttribute('src', location);
            iframe.setAttribute('width', '1px');
            iframe.setAttribute('height', '1px');
            iframe.setAttribute('position', 'absolute');
            iframe.setAttribute('top', '0');
            iframe.setAttribute('left', '0');
            document.documentElement.appendChild(iframe);
            iframe.parentNode.removeChild(iframe);
            iframe = null;
        };

        setTimeout(function(){
            window.close()
            }, 150 );

        redirect("AppScheme");
1 голос
/ 15 февраля 2014

Я недавно боролся с этим, и вот решение, которое я придумал. Обратите внимание, что до сих пор нет надежного способа определить, запущено приложение или нет.

Я открываю страницу со своего сервера, которая перенаправляет на специфичный для iPhone вариант при обнаружении User-Agent. Ссылки на эту страницу могут быть переданы только по электронной почте / SMS или Facebook.

Страница отображает минимальную версию ссылочного документа, но затем автоматически пытается открыть приложение, как только оно загружается, используя скрытый

Если схема URL-адреса зарегистрирована, приложение откроется, и пользователь сможет сделать все, что ему нужно. В любом случае на странице внизу отображается сообщение, подобное этому: «Запустилось ли приложение? Если нет, то, вероятно, вы еще не установили его…» со ссылкой на магазин.

...