IOS9: попробуйте открыть приложение по схеме, если это возможно, или перенаправить на приложение в противном случае
Мой вопрос касается только iOS9!
У меня есть целевая страница HTML
, и я пытаюсь перенаправить пользователя в мое приложение по схеме URL, если приложение установлено или перенаправлено на Appstore в противном случае.
Мой код:
document.addEventListener("DOMContentLoaded", function(event) {
var body = document.getElementsByTagName('body')[0];
body.onclick = function () {
openApp();
};
});
var timeout;
function preventPopup() {
clearTimeout(timeout);
timeout = null;
window.removeEventListener('pagehide', preventPopup);
}
function openApp(appInstanceId, platform) {
window.addEventListener('pagehide', preventPopup);
document.addEventListener('pagehide', preventPopup);
// create iframe
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
iframe.setAttribute("style", "display:none;");
iframe.src = 'myscheme://launch?var=val';
var timeoutTime = 1000;
timeout = setTimeout(function () {
document.location = 'https://itunes.apple.com/app/my-app';
}, timeoutTime);
}
Проблема заключается в том, что трюк iframe
не работает в Safari
iOS9
.
Любая идея, почему?
Мой iframe
трюк на основе этого ответа.
Ответы
Ответ 1
Трейк iframe больше не работает - я полагаю, Apple знает, что он будет поощрять больше разработчиков к внедрению Universal Links, быстрее.
Вы можете установить window.location='your-uri-scheme://';
и вернуться в App Store через 500 мс. Существует танец между всплывающими окнами, если вы примете этот подход, как мы делаем в Branch (мы делаем это как резерв, если Universal Links не работают).
window.location = 'your-uri-scheme://'; // will result in error message if app not installed
setTimeout(function() {
// Link to the App Store should go here -- only fires if deep link fails
window.location = "https://itunes.apple.com/us/app/myapp/id123456789?ls=1&mt=8";
}, 500);
Хотелось бы, чтобы у меня был лучший ответ для вас. iOS 9 определенно более ограничен.
Для полезного обзора того, что необходимо для Universal Links, вы должны пойти по этому маршруту, посмотрите мой ответ здесь или прочитайте этот учебник
Ответ 2
Как уже упоминалось, установка window.location
на iOS 9 все еще работает. Однако это вызывает диалог Open in App. Я привел пример https://bartt.me/openapp, который:
- Запускает Twitter при нажатии на кнопку "Открыть в Twitter".
- Возвращается в приложение Twitter в App Store.
- Перенаправление в Twitter или App Store без выбора пользователем Open в диалоговом окне Open in App.
- Работает во всех браузерах на iOS и Android.
Для получения дополнительной информации просмотрите источник https://lab.bartt.me/openapp.
Ответ 3
Возможно, попробуйте предоставить поддержку приложений для Universal Links
Идея:
Избегайте настраиваемых (JavaScript, iframe) решений в Safari, замените код на поддерживаемую Universal Link.
Пример
<html>
<head>
...
</head>
<body>
<div class"app-banner-style">
<a href="http://yourdomain.com">In app open</a>
</div>
...content
</body>
</html>
Если приложение поддерживает Universal Links (например, yourdomain.com), вы можете настроить свой домен (и путь), и iOS9 должен реагировать на его ссылку, открыв вам приложение. Это только теория, но я думаю, это должна быть работа:)
https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12
Ответ 4
iframe hack больше не работает в ios9. Возможным решением является использование двух кнопок.
Пример:
$('#goToStoreBtn').text( "go to store" ).click(function(event){
event.preventDefault();
event.stopPropagation();
window.location = storeUrl; // https://itunes.apple.com/...
});
$('#goToAppBtn').text( "go to app" ).click(function(event){
event.preventDefault();
event.stopPropagation();
window.location = appUrl; // myApp://...
});
Ответ 5
Это относительно старый поток, но я создал библиотеку, которая поддерживает deeplinking на большинстве современных мобильных браузеров. Но для этого требуется отдельная страница deeplinking, которая должна быть размещена в разных доменах для поддержки универсальной привязки в браузере iOS9 facebook.
https://github.com/prabeengiri/DeepLinkingToNativeApp