Ma question concerne iOS9 uniquement!
J'ai une page de destination HTML
et j'essaie de rediriger l'utilisateur vers mon application via un schéma d'URL si l'application est installée, ou redirection vers l'Appstore sinon.
Mon code est:
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);
}
Le problème est que l'astuce iframe
ne fonctionne pas dans Safari
iOS9
.
Une idée pourquoi?
Mon astuce iframe
basée sur la réponse this .
L’astuce iframe ne fonctionne plus - j’imagine que Apple sait que cela encouragera davantage de développeurs à mettre en œuvre les liens universels plus rapidement.
Vous pouvez toujours définir window.location='your-uri-scheme://';
et retour à l’App Store après 500 ms. Si vous utilisez cette approche, il y a une "danse" entre les fenêtres contextuelles, comme nous le faisons à Branch (nous le faisons en cas de repli si les liens universels ne fonctionnent pas).
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);
J'aimerais avoir une meilleure réponse pour vous. iOS 9 est nettement plus limité.
Pour un aperçu utile de ce qui est nécessaire pour les liens universels si vous choisissez cette voie, consultez ma réponse ici ou lisez ce tutoriel
Comme déjà mentionné, le réglage window.location
sur iOS 9 fonctionne toujours. Cependant, cela ouvre une boîte de dialogue Ouvrir dans l'application. J'ai mis un exemple sur https://bartt.me/openapp que:
Regardez la source de https://lab.bartt.me/openapp pour plus d'informations.
Peut-être essayez-vous de vous aider avec les liens universels
Idée: évitez les solutions personnalisées (JavaScript, iframe) dans Safari, remplacez votre code par un lien universel pris en charge.
Exemple
<html>
<head>
...
</head>
<body>
<div class"app-banner-style">
<a href="http://yourdomain.com">In app open</a>
</div>
...content
</body>
</html>
si votre application prend en charge les liens universels (par exemple, votredomaine.com), vous devez configurer votre domaine (et votre chemin) et iOS9 doit réagir à ce lien en ouvrant votre application. Ce n'est que théorie , mais je suppose que cela devrait être du travail :)
le hack iframe ne fonctionne plus dans iOS 9. La solution possible consiste à utiliser deux boutons. Exemple:
$('#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://...
});