¿Iniciar aplicación o tienda de aplicaciones de Safari?

Ya sé cómo iniciar una aplicación desde Safari, pero ¿es posible comprobar si la aplicación está instalada antes de iniciarse? Estoy pensando en iniciar la tienda de aplicaciones si la aplicación no está actualmente instalada en el iPhone.

No es posible verificar si la aplicación está instalada desde una página web. Podría hacerlo dentro de otra aplicación al comprobar si su esquema de url se puede abrir utilizando el método -canOpenURL: el método UIApplication, pero no hay un javascript equivalente a esto.

Sin embargo, puede usar la siguiente solución:

<script language="javascript"> function open_appstore() { window.location='http://itunes.com/'; } function try_to_open_app() { setTimeout('open_appstore()', 300); } </script> <a onClick="javascript:try_to_open_app();" href="yourappurl:">App name</a> 

Este código establecerá un time de espera en el enlace que llamará a la function open_appstore si este time de espera finaliza. Dado que su enlace apunta a la URL personalizada de la aplicación, Safari intentará abrir ese enlace y, si es posible, abrirá la aplicación y detendrá el timer, por lo que no se abrirá el enlace AppStore.

Si el enlace de la aplicación no se puede abrir, cuando se agote el timer, aparecerá un post emergente de error que indicará que no puede abrir la página (no se puede deshacer de eso), pero irá inmediatamente a AppStore y descartará ese error.


iOS 9 agrega una function realmente agradable que permite que su aplicación abra una URL de http / s: Universal Links


En iOS 10 hay una window emergente que dice " Abrir en [Nombre de la aplicación] " cuando toca el enlace y la aplicación está instalada. Si el usuario no toca " Abrir " en el timeout dado, esta solución usará el respaldo. Como 300 ms es demasiado corto para tocar nada, esta solución siempre falla en iOS 10 .

Esto funcionó para mí con una situación similar: en la que quería abrir la aplicación gmaps si era compatible; de ​​lo contrario, ve directamente al sitio gmap.

 function mapLink(addy) { addy = encodeURIComponent(addy); var fallback = 'http://maps.google.com/?q=' + addy , link = 'comgooglemaps://?q=' + addy; try { document.location = link; } catch(err) { document.location = fallback; } } 

Parece que funciona bastante bien para mi caso de uso.

Actualización: si desea hacer una nueva window en repliegue, esto todavía permitía que apareciera el post de error de ios. Para evitar probarlo.

  try { document.location = link; } catch(err) { window.location.reload(true); window.open(fallback, '_blank'); } 

La solución de Apple:

De la documentation de Apple

https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html

Si la aplicación ya está instalada en el dispositivo de un usuario, el banner cambia de forma inteligente su acción, y al tocar el banner simplemente se abrirá la aplicación. Si el usuario no tiene su aplicación en su dispositivo, al tocar el banner lo llevará a la input de la aplicación en la App Store. Cuando regresa a su website, aparece una barra de progreso en el banner, que indica cuánto time se tardará en completar la descarga. Cuando la aplicación termina de downloadse, el button Ver cambia a un button Abrir, y al tocar el banner se abrirá la aplicación mientras se conserva el context del usuario desde su website.

Los banners de aplicaciones inteligentes determinan automáticamente si la aplicación es compatible con el dispositivo del usuario. Si el dispositivo que carga el banner no es compatible con su aplicación, o si su aplicación no está disponible en la location del usuario, el banner no se mostrará.

Para agregar un banner de aplicación inteligente a nuestra página web, incluya la siguiente label meta en el encabezado de cada página donde desea que aparezca el banner:

NOTA: También podemos pasar el argumento de la aplicación: como myName, etc.,

Verifique que Proporcionar context de navigation al encabezado de su aplicación en esta página.

Actualizaciones:

1. Una vez que haya cerrado el banner que aparece, entonces no se mostrará de nuevo a pesar de que tenía esa metalabel en nuestro html.

2. Para restablecer el inicio de la aplicación de configuration, navegue a General> Resentir> Restablecer todos los ajustes.

Puede simplemente leer el valor de retorno del método – (BOOL) openURL: (NSURL ) url *, si es NO, significa que la aplicación de destino no está instalada. El siguiente código cortado da un ejemplo usando el esquema de URL navigon:

 NSString *stringURL = @"navigon://coordinate/NaviCard/19.084443/47.573305"; NSURL *url = [NSURL URLWithString:stringURL]; if([[UIApplication shanetworkingApplication] openURL:url]) { NSLog(@"Well done!"); } else { stringURL = @"https://itunes.apple.com/it/app/id320279293?mt=8"; url = [NSURL URLWithString:stringURL]; [[UIApplication shanetworkingApplication] openURL:url]; } 

Gracias a zszen por la corrección.