comment prévenir iOS safari alert lors de l'ouverture d'une application native non installée?
j'ai cherché un moyen d'ouvrir une application native iOS à partir du navigateur. J'ai trouvé une bonne solution ici: est-il possible d'enregistrer un schéma D'URL http+basé sur le domaine pour les applications iPhone, comme YouTube et Maps?
cette solution fonctionne très bien lorsque vous avez l'application installée. mais quand un utilisateur n'a pas cette application installée - safari envoie un message d'erreur qui dit "Safari ne peut pas ouvrir la page parce que l'adresse n'est pas valide."
y a-t-il un moyen de prévenir ce comportement et d'inviter l'utilisateur à télécharger l'application?
5 réponses
Voici une solution qui fonctionne pour moi:
var timeout;
function preventPopup() {
clearTimeout(timeout);
timeout = null;
window.removeEventListener('pagehide', preventPopup);
}
function openApp() {
$('<iframe />')
.attr('src', appurl)
.attr('style', 'display:none;')
.appendTo('body');
timeout = setTimeout(function() {
document.location = appstore;
}, 500);
window.addEventListener('pagehide', preventPopup);
}
utilisez iframe.
$('<iframe />').attr('src', "appname://").attr('style', 'display:none;').appendTo('body');
pour résoudre ce problème et éviter Aucune alerte safari iOS non désirée j'ai utilisé une approche différente manier aussi une iframe, mais sans jQuery et écouteur événements. Il fonctionne parfaitement.
var iframe = document.createElement("iframe");
iframe.style.border = "none";
iframe.style.width = "1px";
iframe.style.height = "1px";
iframe.onload = function () {
document.location = alt;
};
iframe.src = nativeSchemaUrl; //iOS app schema url
window.onload = function(){
document.body.appendChild(iframe);
}
setTimeout(function(){
window.location = fallbackUrl; //fallback url
},300);
j'utilise meta refresh comme repli car cela fonctionne sans javascript. Ce code fonctionne dans iOS et Android.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="refresh" content="1; url=http://www.facebook.com">
<title>Redirecting..</title>
<script>
function tryOpenApp() {
var iframe = document.createElement("iframe");
iframe.style.border = "none";
iframe.style.width = "1px";
iframe.style.height = "1px";
iframe.src = "fb://feed/";
document.body.appendChild(iframe);
}
</script>
</head>
<body onload="tryOpenApp()">
</body>
</html>
la bonne façon de le faire est d'utiliser des bannières D'applications intelligentes: https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html
Si votre application n'est pas installée, la bannière va permettre à l'utilisateur de l'installer. S'il est installé, il ouvrira l'application, et vous aurez une façon de spécifier des arguments D'URL personnalisés pour passer à l'application.