Перенаправить на приложение, если оно установлено, иначе в App Store
Я знаю, что можно напрямую связать приложение с iOS, зарегистрировав пользовательскую схему (например, так://), а также можно связать приложение с Appunes через itunes.
Во многих случаях идеальным потоком является предоставление ссылки, которая перенаправляет приложение, если оно установлено, и в хранилище, если нет. Возможно ли это, и если да, то как?
Добавлен для ясности, сценарий: я открываю ссылку (http) из электронной почты на своем iphone, предлагая мне присоединиться к группе в приложении. Если у пользователя установлено приложение на этом устройстве, оно должно открыться, иначе ссылка http должна быть перенаправлена на itunes.
Ответы
Ответ 1
Невозможно проверить это.
Однако есть приятное обходное решение.
Идея в основном такова:
- При первом открытии приложения вы открываете мобильное сафари из своего приложения на предопределенный URL-адрес на вашем сервере.
- На этом URL-адресе вы настроили файл cookie, например appInstalled для сафари пользователей для мобильных устройств.
- Затем вы удаляете пользователя обратно в свое приложение с помощью вашей зарегистрированной схемы (то же, что и FB с SSO)
- Все ваши ссылки по электронной почте указывают на ваш сайт, но на веб-сайте вы проверяете, является ли браузер мобильным Safari и существует ли установленный файл cookie appInstalled.
- Если браузер не является мобильным Safari или cookie не найден, вы перенаправляетесь в AppStore или остаетесь на своей веб-странице.
- Если условия №4 верны, вы перенаправляете пользователя в свое приложение с зарегистрированной схемой.
- Если приложение было удалено пользователем, поэтому схема пользовательского url не работает, у вас есть отказоустойчивое перенаправление к appstore
Два последних шага объясняются в этом сообщении SO
Ответ 2
Я думаю, что более простым ответом было бы создание страницы на вашем сервере со следующим javascript:
(function() {
var app = {
launchApp: function() {
window.location.replace("myapp://");
this.timer = setTimeout(this.openWebApp, 1000);
},
openWebApp: function() {
window.location.replace("http://itunesstorelink/");
}
};
app.launchApp();
})();
Это в основном пытается перенаправить ваше приложение и устанавливает тайм-аут для перенаправления на магазин приложений, если он не работает.
Вы даже можете сделать код немного более умным и проверить агент пользователя, чтобы узнать, являются ли они пользователем ios, пользователем Android или веб-браузером, а затем перенаправляют их соответствующим образом.
Ответ 3
Если у вас есть веб-страница, на которую вы ссылаетесь, из электронной почты с веб-страницей, содержащей iframe
с параметром src
, настроенным на пользовательскую схему для вашего приложения, iOS автоматически перенаправляется на это место в приложении. Если приложение не установлено, ничего не произойдет. Это позволяет вам глубоко входить в приложение, если оно установлено, или перенаправить в App Store, если он не установлен.
Например, если у вас установлено приложение twitter и перейдите на веб-страницу, содержащую следующую разметку, вы сразу же будете перенаправлены в приложение. Если у вас не было установленного приложения Twitter, вы увидите текст "Приложение Twitter не установлено".
<!DOCTYPE html>
<html>
<head>
<title>iOS Automatic Deep Linking</title>
</head>
<body>
<iframe src="twitter://" width="0" height="0"></iframe>
<p>The Twitter App is not installed</p>
</body>
</html>
Вот более подробный пример, который перенаправляется в App Store, если приложение не установлено:
<!DOCTYPE html>
<html>
<head>
<title>iOS Automatic Deep Linking</title>
<script src='//code.jquery.com/jquery-1.11.2.min.js'></script>
<script src='//mobileesp.googlecode.com/svn/JavaScript/mdetect.js'></script>
<script>
(function ($, MobileEsp) {
// On document ready, redirect to the App on the App store.
$(function () {
if (typeof MobileEsp.DetectIos !== 'undefined' && MobileEsp.DetectIos()) {
// Add an iframe to twitter://, and then an iframe for the app store
// link. If the first fails to redirect to the Twitter app, the
// second will redirect to the app on the App Store. We use jQuery
// to add this after the document is fully loaded, so if the user
// comes back to the browser, they see the content they expect.
$('body').append('<iframe class="twitter-detect" src="twitter://" />')
.append('<iframe class="twitter-detect" src="itms-apps://itunes.com/apps/twitter" />');
}
});
})(jQuery, MobileEsp);
</script>
<style type="text/css">
.twitter-detect {
display: none;
}
</style>
</head>
<body>
<p>Website content.</p>
</body>
</html>
Ответ 4
Да, это довольно легко. Для этого требуется приложение, которое вы хотите открыть, чтобы иметь URL-схему, объявленную в plist:
//if you can open your app
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"yourapp://"]])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"yourapp://"]];
}
else
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ituneappstorelink"]];
}