¿Es posible registrar un esquema de URL basado en dominio http+ para aplicaciones de iPhone, como YouTube y Maps?

Resuelto Martijn Thé asked hace 54 años • 13 respuestas

Me gustaría tener iOS para abrir URL de mi dominio (por ejemplo, http://martijnthe.nl ) con mi aplicación siempre que esté instalada en el teléfono, y con Mobile Safari en caso de que no lo esté.

Leí que es posible crear un sufijo de protocolo único para esto y registrarlo en Info.plist, pero Mobile Safari dará un error en caso de que la aplicación no esté instalada.

¿Cuál sería una solución?

Una idea:

1) Utilice URL http:// que se abran en cualquier navegador de escritorio y preste el servicio a través del navegador.

2) Verifique el Agente de usuario y, en caso de que sea Mobile Safari, abra una URL myprotocol:// para (intentar) abrir la aplicación de iPhone y abra Mobile iTunes para descargar la aplicación en caso de que el intento falle.

No estoy seguro de si esto funcionará... ¿sugerencias? ¡Gracias!

Martijn Thé avatar Jan 01 '70 08:01 Martijn Thé
Aceptado

Creo que la forma menos intrusiva de hacer esto es la siguiente:

  1. Comprueba si el user-agent es el de un iPhone/iPod Touch
  2. Buscar una appInstalledcookie
  3. Si la cookie existe y está configurada como verdadera, configúrela window.locationcomo your-uri://(o realice la redirección del lado del servidor)
  4. Si la cookie no existe, abra "¿Sabía que el nombre de su sitio tiene una aplicación para iPhone?" modal con un botón "Sí, ya lo tengo", "No, pero me encantaría probarlo" y "Déjame en paz".
    1. El botón "Sí" establece la cookie como verdadera y redirige ayour-uri://
    2. El botón "No" redirige a " http://itunes.com/apps/yourappname ", que abrirá la App Store en el dispositivo.
    3. El botón "Déjame en paz" establece la cookie en falsa y cierra el modal

La otra opción con la que jugué pero que me pareció un poco complicada fue hacer lo siguiente 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://";
Nathan de Vries avatar Jul 10 '2009 12:07 Nathan de Vries

Es muy posible hacer esto en JavaScript siempre que su respaldo sea otro enlace de aplicación. Aprovechando la sugerencia de Nathan :

<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>

Vea una demostración en vivo aquí .

jb. avatar Mar 06 '2010 01:03 jb.

Para dispositivos iOS 6, existe una opción: Promoción de aplicaciones con banners de aplicaciones inteligentes

ohho avatar Oct 15 '2012 09:10 ohho