Определите, существует ли приложение и запускает это приложение в iOS

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

Ответ 1

Полезно, но сложно.

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

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

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

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

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

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

Ответ 2

Существует script, как показано ниже.

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

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

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

Ответ 3

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

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

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

BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];

Ответ 4

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

В Branch мы используем форму кода ниже - обратите внимание, что 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, отправленного с запросом.

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

Ответ 5

Насколько я понимаю, из-за проблем с конфиденциальностью вы не видите, установлено ли приложение на устройстве. Путь вокруг этого - попытаться запустить приложение, и если он не запустится, чтобы пользователь ударил обратно назад. Чтобы предотвратить возникновение ошибки в мобильном сафари, я обнаружил, что ее размещение в 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");

Ответ 6

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

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

Страница отображает минимальную версию ссылочного документа, но затем автоматически пытается открыть приложение сразу после его загрузки, используя скрытый <iframe> (AJAX всегда терпит неудачу в этой ситуации - вы не можете использовать jQuery или XMLHttpRequest для этого).

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