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

Me gustaría que iOS abra las URL de mi dominio (por ejemplo, http://martijnthe.nl ) con mi aplicación cada vez que la aplicación esté instalada en el teléfono, y con Mobile Safari en caso de que no lo sea.

He leído 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.

¿Qué sería una solución?

Una idea:

1) Use http: // URL que se abren en cualquier navegador de escritorio y prestan el servicio a través del navegador

2) Compruebe el User-Agent y, en caso de que sea Mobile Safari, abra myprotocol: // URL para (intentar) abrir la aplicación iPhone y abrir Mobile iTunes para descargar la aplicación en caso de que falle el bash

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

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

  1. Compruebe si el usuario-agente es el de un iPhone / iPod Touch
  2. Buscar una appInstalled Galleta appInstalled
  3. Si la cookie existe y se establece en verdadero, establezca window.location en your-uri:// (o haga el lado del servidor de redirección)
  4. Si la cookie no existe, abra el mensaje “¿Sabía que Your Site Name tiene una aplicación para iPhone?” modal con un “Sí, ya lo tengo”, “No, pero me encantaría probarlo” y el botón “Déjame solo”.
    1. El botón “Sí” configura la cookie como verdadera y la redirecciona a your-uri://
    2. El botón “Nope” redirige a ” http://itunes.com/apps/yourappname “, que abrirá la App Store en el dispositivo
    3. El botón “Déjame solo” establece la cookie en falso y cierra el modal

La otra opción con la que jugué pero encontré un poco complicado 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://"; 

Es bastante posible hacer esto en JavaScript siempre que su repliegue sea otro applink. Sobre la base de la sugerencia de Nathan :

      

open facebook with fallback to appstore

open unknown with fallback to appstore

Only works on iPhone!

Mira una demostración en vivo aquí .

Para dispositivos iOS 6, existe una opción: promoción de aplicaciones con Smart App Banners

Descubrí que la respuesta seleccionada funciona para las aplicaciones del navegador, pero estaba teniendo problemas con el código que funciona en aplicaciones que no son del navegador y que implementan un UIWebView .

El problema para mí era que un usuario de la aplicación de Twitter hiciera clic en un enlace que los llevaría a mi sitio a través de UIWebView en la aplicación de Twitter. Luego, cuando hicieron clic en un botón de mi sitio, Twitter intenta ser elegante y solo completa la window.location si el sitio es accesible. Entonces, ¿qué sucede? UIAlertView una UIAlertView emergente de UIAlertView dice que está seguro de que desea continuar y luego redirecciona inmediatamente a la App Store sin una segunda ventana emergente.

Mi solución implica iframes. Esto evita que se presente el UIAlertView que permite una experiencia de usuario sencilla y elegante.

jQuery

 var redirect = function (location) { $('body').append($('').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://'); 

EDITAR:

Agregue la posición absoluta al iframe, de modo que cuando se inserte no haya un espacio aleatorio de espacios en blanco en la parte inferior de la página.

También es importante tener en cuenta que no he encontrado una necesidad de este enfoque con Android. Usar window.location.href debería funcionar bien.

En iOS9, Apple finalmente presentó la posibilidad de registrar su aplicación para manejar ciertas URL http:// : enlaces universales .

Una explicación muy aproximada de cómo funciona:

  • Usted declara interés en abrir http:// URLs para ciertos dominios (URLs web) en su aplicación.
  • En el servidor de los dominios especificados, debe indicar qué URL abrir en qué aplicación ha declarado interés en abrir las URL del dominio del servidor.
  • El servicio de carga de URL de iOS comprueba todos los bashs de abrir URL http:// para una configuración como se explicó anteriormente y abre la aplicación correcta automáticamente si está instalada; sin pasar por Safari primero …

Esta es la forma más limpia de realizar enlaces profundos en iOS, lamentablemente solo funciona en iOS9 y versiones posteriores …

CONSTRUYENDO nuevamente sobre la respuesta de Nathan y JB:

Cómo iniciar la aplicación desde url w / o Extra Click Si prefiere una solución que no incluye el paso intermedio de hacer clic en un enlace, se puede utilizar lo siguiente. Con este javascript, pude devolver un objeto Httpresponse de Django / Python que inicia con éxito una aplicación si está instalada o, alternativamente, inicia la tienda de aplicaciones en el caso de un tiempo de espera. Tenga en cuenta que también tuve que ajustar el período de tiempo de espera de 500 a 100 para que esto funcione en un iPhone 4S. Prueba y modifica para hacerlo bien para tu situación.

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

document.webkitHidden es para detectar si su aplicación ya está invocada y la pestaña de safari actual para ir al fondo, este código es de http://www.baidu.com

Si agrega un iframe en su página web con el src establecido en el esquema personalizado para su aplicación, iOS redirigirá automáticamente a esa ubicación en la aplicación. Si la aplicación no está instalada, no pasará nada. Esto le permite realizar un enlace profundo a la aplicación si está instalada, o redireccionar a la tienda de aplicaciones si no está instalada.

Por ejemplo, si tiene instalada la aplicación de Twitter y navega a una página web que contiene el siguiente marcado, se lo dirigirá inmediatamente a la aplicación.

    iOS Automatic Deep Linking    

Website content.

Aquí hay un ejemplo más completo que redirige a la tienda de aplicaciones si la aplicación no está instalada:

    iOS Automatic Deep Linking       

Website content.

Por lo que yo sé, no puede hacer que todo el sistema operativo comprenda una URL de dominio http: +. Solo puedes registrar nuevos esquemas (yo uso x-darkslide: en mi aplicación). Si la aplicación está instalada, Mobile Safari iniciará la aplicación correctamente.

Sin embargo, tendría que manejar el caso donde la aplicación no está instalada con un mensaje “¿Aún está aquí? Haga clic en este enlace para descargar la aplicación desde iTunes”. en tu página web

Aquí hay una solución.

Configure una ubicación booleana usando desenfoque y enfoque

 //see if our window is active window.isActive = true; $(window).focus(function() { this.isActive = true; }); $(window).blur(function() { this.isActive = false; }); 

Enlace su enlace con un manejador de clic de jquery que invoque algo como esto.

 function startMyApp(){ document.location = 'fb://'; setTimeout( function(){ if (window.isActive) { document.location = 'http://facebook.com'; } }, 1000); } 

si se abre la aplicación, perderemos el foco en la ventana y el temporizador finalizará. de lo contrario, no obtenemos nada y cargamos la url habitual de Facebook.

Compruebe el User-Agent y, en caso de que sea Mobile Safari, abra myprotocol: // URL para (intentar) abrir la aplicación iPhone y abrir Mobile iTunes para descargar la aplicación en caso de que falle el bash.

Esto me parece un enfoque razonable, pero no creo que pueda abrirlo en iTunes móvil como segundo recurso. Creo que tendrás que elegir uno u otro, ya sea redirigir a tu aplicación o a iTunes.

es decir, si redirige a myprotocol: // y la aplicación no está en el teléfono, no tendrá una segunda oportunidad para redireccionar a iTunes.

En primer lugar, ¿podría redireccionar a una página de destino (optimizada para iphone) y darle al usuario la opción de hacer clic en su aplicación, o en iTunes para obtener la aplicación si no la tiene? Pero confiará en que el usuario haga lo correcto allí. (Editar: aunque podría establecer una cookie, ¿eso es solo una primera vez?)

Al tratar de solucionar el problema del pop-up, descubrí que Apple tenía una forma de evitar esta preocupación.

De hecho, cuando hace clic en este enlace , si instaló la aplicación, se redirige a ella; de lo contrario, se te redireccionará a la página web, sin ninguna ventana emergente.