234 votes

Est-il possible d'enregistrer un http+de domaine Schéma d'URL pour les applications de l'iPhone, comme YouTube et Maps?

J'aimerais avoir iOS pour ouvrir les Url de mon domaine (par ex. http://martijnthe.nl) avec mon application à chaque fois que l'application est installée sur le téléphone, et avec le navigateur Safari Mobile dans le cas où il ne l'est pas.

J'ai lu qu'il est possible de créer un protocole unique suffixe pour cela, et de l'inscrire dans l'Info.plist, mais le navigateur Safari Mobile donnera une erreur dans le cas où l'application n'est pas installée.

Ce serait une solution de contournement?

Une idée:

1) http:// Url de l'ouvrir dans n'importe quel bureau de navigateur et de rendre le service par le biais du navigateur

2) Vérifier le User-Agent et dans le cas où il est Mobile de Safari, ouvrez un myprotocol:// URL pour (tenter de) pour ouvrir l'application pour iPhone et ouvrir Mobile iTunes pour le téléchargement de l'application en cas d'échec de cette tentative

Vous ne savez pas si cela va fonctionner... des suggestions? Merci!

254voto

Nathan de Vries Points 10895

Je pense que la moins intrusive, la façon de le faire est comme suit:

  1. Vérifiez si le user-agent est celui d'un iPhone/iPod Touch
  2. Vérifiez appInstalled cookie
  3. Si le cookie existe et est définie sur true, définissez window.location de your-uri:// (ou de faire la redirection côté serveur)
  4. Si le cookie n'existe pas, ouvrir un "le Saviez-vous le Nom de Votre Site a une application iPhone?" modal avec un "Ouais, j'ai déjà eu", "Non, mais j'aimerais essayer", et "Laissez-moi seul" bouton.
    1. Le "Oui" bouton, le témoin véritable et redirige vers your-uri://
    2. Le "Non" bouton redirige vers "http://itunes.com/apps/yourappname" qui va ouvrir l'App Store sur l'appareil
    3. "Laissez-moi seul" bouton définit le cookie de faux et de fermer la modale

L'autre option que j'ai joué avec, mais a trouvé un peu maladroit, c'était de faire la suite en Javascript:

setTimeout(function() {
  window.location = "http://itunes.com/apps/yourappname";
}, 25);

// If "custom-uri://" is registered the app will launch immediately and your
// timer won't fire. If it's not set, you'll get an ugly "Cannot Open Page"
// dialogue prior to the App Store application launching
window.location = "custom-uri://";

95voto

jb. Points 4883

Il est tout à fait possible de le faire en JavaScript aussi longtemps que votre solution de repli est un autre applink. Bâtiment sur Nathan suggestion:

<html>
  <head>
    <meta name="viewport" content="width=device-width" />
  </head>
  <body>

    <h2><a id="applink1" href="fb://profile/116201417">open facebook with fallback to appstore</a></h2>
    <h2><a id="applink2" href="unknown://nowhere">open unknown with fallback to appstore</a></h2>
    <p><i>Only works on iPhone!</i></p>    

  <script type="text/javascript">

// To avoid the "protocol not supported" alert, fail must open another app.
var appstorefail = "itms://itunes.apple.com/us/app/facebook/id284882215?mt=8&uo=6";

function applink(fail){
    return function(){
        var clickedAt = +new Date;
        // During tests on 3g/3gs this timeout fires immediately if less than 500ms.
        setTimeout(function(){
            // To avoid failing on return to MobileSafari, ensure freshness!
            if (+new Date - clickedAt < 2000){
                window.location = fail;
            }
        }, 500);    
    };
}

document.getElementById("applink1").onclick = applink(appstorefail);
document.getElementById("applink2").onclick = applink(appstorefail);

</script>
</body>
</html>

Découvrez une démonstration en direct ici.

26voto

ohho Points 17243

Pour iOS 6 appareils, il y a une option: la Promotion d'Applications avec Smart App Banners

24voto

cnotethegr8 Points 984

J'ai trouvé que la réponse sélectionnée travaille pour le navigateur des applications, mais j'ai eu des problèmes avec le code de travail non navigateur des applications qui mettent en œuvre un UIWebView.

Le problème pour moi était d'un utilisateur sur l'application Twitter, cliquez sur un lien qui les mènerait à mon site par le biais d'un UIWebView dans l'application Twitter. Puis, quand ils ont cliqué sur un bouton de mon site Twitter essaie d'être de fantaisie et de ne compléter l' window.location si le site est accessible. Donc ce qui arrive est un UIAlertView apparaît disant êtes-vous sûr de vouloir continuer et puis redirige immédiatement à l'App Store, sans une seconde de popup.

Ma solution consiste à les iframes. Cela évite l' UIAlertView présentés permettant pour une simple et élégant de l'expérience utilisateur.

jQuery

var redirect = function (location) {
    $('body').append($('<iframe></iframe>').attr('src', location).css({
        width: 1,
        height: 1,
        position: 'absolute',
        top: 0,
        left: 0
    }));
};

setTimeout(function () {
    redirect('http://itunes.apple.com/app/id');
}, 25);

redirect('custom-uri://');

Javascript

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 () {
    redirect('http://itunes.apple.com/app/id');
}, 25);

redirect('custom-uri://');

EDIT:

Ajouter la position absolue de l'iframe, donc lorsqu'il est inséré, il n'est pas un hasard peu d'espace au bas de la page.

Aussi il est important de noter que je n'ai pas trouvé la nécessité de cette approche avec Android. À l'aide de window.location.href devrait fonctionner correctement.

9voto

zyanlu Points 116
window.location = appurl;// fb://method/call..
!window.document.webkitHidden && setTimeout(function () {
    setTimeout(function () {
    window.location = weburl; // http://itunes.apple.com/..
    }, 100);
}, 600);

document.webkitHidden est de détecter si votre application est déjà invoquée et actuelle de safari tab pour aller à l'arrière-plan, ce code est à partir de www.baidu.com

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X