¿Iniciar app O app store desde Safari?


Ya sé cómo iniciar una aplicación de safari, pero es posible comprobar si la aplicación está instalada antes de lanzar? Estoy pensando en lanzar la app store si la aplicación no está instalada actualmente en el iPhone.

Author: Filip Radelic, 2011-08-06

4 answers

No es posible verificar si la aplicación está instalada desde una página web. Puede hacerlo dentro de otra aplicación comprobando si su esquema de url se puede abrir usando el método-canOpenURL: de 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 tiempo de espera en el enlace que llamará a la función open_appstore si este tiempo de espera termina. Dado que tu enlace apunta a la url personalizada de la aplicación, Safari intentará abrir ese enlace y si puede, abrirá la aplicación y detendrá el temporizador, por lo que el enlace de la tienda de aplicaciones no se abrirá.

Si el enlace de la aplicación no se puede abrir, cuando se agote el temporizador, mostrará una ventana emergente de error que dice que no puede abrir la página (no puede deshacerse de eso), pero inmediatamente irá a la tienda de aplicaciones y descartará ese error.


IOS 9 agrega una característica realmente agradable que permite que su aplicación abra una url http/s: Enlaces universales


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

 82
Author: Filip Radelic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-07 14:56:10

Esto funcionó para mí con una situación similar: en el que quería abrir gmaps aplicación si era compatible - de lo contrario ir al sitio gmap directamente.

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 funcionar bastante bien para mi caso de uso.

Actualización: Si desea hacer una nueva ventana en reserva, esto todavía permitió que el mensaje de error de Ios aparezca. Para evitarlo, prueba esto.

  try {
    document.location = link;
  } catch(err) {
    window.location.reload(true);
    window.open(fallback, '_blank');
  }
 11
Author: William Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-26 14:30:10

La Solución de Apple:

De la Documentación 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 tu aplicación en su dispositivo, toca el banner lo llevará a la entrada de la aplicación en la App Store. Cuando regresa a su sitio web, aparece una barra de progreso en el banner, que indica cuánto tiempo tardará la descarga en completarse. Cuando la aplicación termina de descargarse, el botón Ver cambia a un botón Abrir, y al tocar el banner se abrirá la aplicación mientras se preserva el contexto del usuario de su sitio web.

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

Para agregar un Banner de Smart App a nuestra página web, incluya la siguiente meta etiqueta en el encabezado de cada página donde desea que aparezca el banner:

NOTA: También podemos pasar el argumento app: like myName, etc.,

Compruebe que Proporciona Contexto de Navegación 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 etiqueta meta en nuestro html.

2. Para restablecer que inicie la aplicación de configuración, vaya a General>Reenviar>Restablecer todos los ajustes

 8
Author: Vijay-Apple-Dev.blogspot.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-08 05:20:08

Simplemente puede leer el valor devuelto del método -(BOOL)openURL:(NSURL) url*, si es NO, significa que la aplicación de destino no está instalada. El siguiente código recortado da un ejemplo usando el esquema de url de navigon:

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

Gracias a zszen por la corrección.

 2
Author: Zeb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-30 13:50:39