Чи є спосіб перевірити iOS, чи не встановлено, а потім запущено іншу програму? Якщо пам'ять мене обманює, це не було можливим у ранніх версіях, але чи було це змінено?
Чи є спосіб перевірити iOS, чи не встановлено, а потім запущено іншу програму? Якщо пам'ять мене обманює, це не було можливим у ранніх версіях, але чи було це змінено?
Відповіді:
Здійснено, але складно.
Запуск встановлених програм, таких як програми FB або Twitter, здійснюється за допомогою спеціальної схеми URL-адрес. Їх можна використовувати як в інших програмах, так і на веб-сайтах.
Ось стаття про те, як це зробити за допомогою власного додатка .
Перевірити, чи є там URL-адреса, може бути складно. Хорошим прикладом програми, яка виявляє встановлені програми, є Boxcar . Справа в тому, що Boxcar має глибокі знання користувацьких URL-адрес. Я досить впевнено (99%) впевнений, що це існує canOpenURL:
, тому знання користувацької схеми програми, на яку ви хочете націлитись заздалегідь, робить це простим у реалізації.
Ось частковий список деяких найпопулярніших URL-адрес, проти яких можна перевірити.
Існує спосіб дізнатися користувацьку URL-адресу додатка: https://www.amerhukic.com/finding-the-custom-url-scheme-of-an-ios-app
Але якщо ви хочете просканувати програми та визначити їх 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.
document.location
) JS повинен припинити виконання, тому функція в setTimeout
ніколи не повинна виконуватися. Не те, що я знаю кращий спосіб (якщо тільки банерів iOS Smart App недостатньо для ваших потреб). Хотілося б, щоб довели, що неправий.
Щоб перевірити, чи встановлена програма (наприклад, Очистити):
BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];
Щоб відкрити цю програму:
BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];
Приховує повідомлення про помилку, якщо додаток не встановлено
У 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, надісланого із запитом.
Це дозволяє уникнути потворного перенаправлення, але вимагає ще тонни роботи.
appname
або appID
?
Наскільки я розумію, через проблеми конфіденційності ви не можете побачити, чи встановлена програма на пристрої. Шлях навколо цього - спробувати запустити програму, і якщо вона не запускається, щоб користувач натиснув URL-адресу назад. Щоб запобігти появі помилки мобільного сафарі, я виявив, що розміщення його в 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, після виявлення User-Agent. Посилання на цю сторінку можна передавати лише електронною поштою / SMS або Facebook.
Сторінка відображає мінімальну версію документа, на який посилається, але потім автоматично намагається відкрити програму, як тільки вона завантажується, використовуючи прихований <iframe> (AJAX завжди виходить з ладу - ви не можете використовувати jQuery або XMLHttpRequest для цього ).
Якщо схема URL-адреси зареєстрована, програма відкриється, і користувач зможе зробити все необхідне. У будь-якому випадку, внизу на сторінці відображається таке повідомлення: "Чи запустилася програма? Якщо ні, ви, мабуть, ще не встановили її ...." із посиланням на магазин.