Определите, существует ли приложение, и запустите его на iOS
есть ли способ проверить iOS, чтобы видеть если другое приложение было установлено и запущено? Если мне не изменяет память, это было невозможно в ранних версиях, но было ли это изменено?
6 ответов:
выполнимо, но сложно.
запуск установленных приложений, таких как приложения FB или Twitter, выполняется с использованием пользовательской схемы URL. Они могут быть использованы как в других приложениях, так и на веб-сайтах.
вот статья о том, как это сделать с вашим собственным приложением.
видя, если URL есть, хотя, может быть сложно. Хорошим примером приложения, которое обнаруживает установленные приложения является вагон. Дело в том, что товарный вагон имеет передовые знания я довольно (99%) уверен, что есть
canOpenURL:
, поэтому зная пользовательскую схему приложения, которое вы хотите настроить заранее, это просто реализовать.вот неполный список из некоторых более популярных URL-адресов вы можете проверить.
но если вы хотите сканировать приложения и выводить их URL-адреса, это не может быть сделано на устройстве, отличном от JB.
вот сообщение в блоге говоря о том, как люди в Bump обрабатываются проблема.
есть сценарий, как показано ниже.
<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.
чтобы проверить, установлено ли приложение (например, очистить):
BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];
чтобы открыть это приложение:
BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];
скрыть сообщение об ошибке, если приложение не установлено
At филиала мы используем форму кода ниже -- обратите внимание, что iframe работает на нескольких браузерах. Просто замените URI вашего приложения и ссылку на ваш магазин приложений.
<!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>
есть вторая возможность, которая полагается на куки-файлы в первую очередь и перенаправление javascript только в качестве запасного варианта. Вот такая логика:
когда пользователь без приложения сначала нажимает на ссылку на ваше приложение, он или она перенаправляется прямо в магазин приложений. Это достигается путем ссылки на ваше приложение, фактически являющееся динамически генерируемой страницей на ваших серверах с перенаправлением. Вы создаете файл cookie и регистрируете "цифровой отпечаток пальца" IP-адреса, ОС, версии ОС и т. д. на backend.
когда пользователь устанавливает приложение и открывает его, вы собираете и отправляете другой "цифровой отпечаток пальца" на свой сервер. Теперь ваш сервер знает, что ссылка установлена при любых последующих посещениях ссылок, связанных с ваше приложение, ваши серверы убедитесь, что динамически генерируемая страница перенаправления ведет к приложению, а не к магазину приложений, на основе файла cookie, отправленного с запросом.
Это позволяет избежать уродливого перенаправления, но включает в себя тонну больше работы.
насколько я понимаю, из-за проблем с конфиденциальностью вы не можете увидеть, установлено ли приложение на устройстве. Способ обойти это-попытаться запустить приложение, и если оно не запускается, чтобы пользователь ударил обратный url-адрес. Чтобы предотвратить ошибку mobile safari, я обнаружил, что размещение ее в 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");
Я боролся с этим недавно, и вот решение, которое я придумал. Обратите внимание, что по-прежнему нет надежного способа определить, запущено ли приложение или нет.
я обслуживаю страницу с моего сервера, которая перенаправляется на конкретный вариант iPhone при обнаружении агента пользователя. Ссылки на эту страницу могут быть доступны только по электронной почте / SMS или Facebook.
страница отображает минимальную версию ссылочного документа, но затем автоматически пытается открыть приложение, как только оно загружает, используя скрытый
Если схема URL зарегистрирована, приложение откроется и пользователь сможет сделать все, что нужно. В любом случае, на странице отображается сообщение вроде этого внизу: "было ли запущено приложение? Если нет, вы, вероятно, еще не установили его .... "с ссылкой на магазин.