Mi pregunta es acerca de iOS9 sólo!

Tengo una HTML de la página de destino, y tengo que tratar de redirigir al usuario a mi aplicación a través de esquema de URL si la aplicación está instalada, o redirigir a la Appstore lo contrario.

Mi código es:

document.addEventListener("DOMContentLoaded", function(event) {

  var body = document.getElementsByTagName('body')[0];
  body.onclick = function () {
    openApp();
  };
});

var timeout;

function preventPopup() {

    clearTimeout(timeout);
    timeout = null;
    window.removeEventListener('pagehide', preventPopup);
}

function openApp(appInstanceId, platform) {

  window.addEventListener('pagehide', preventPopup);
  document.addEventListener('pagehide', preventPopup);

  //create iframe
  var iframe = document.createElement("iframe");
  document.body.appendChild(iframe);
  iframe.setAttribute("style", "display:none;");
  iframe.src = 'myscheme://launch?var=val';

  var timeoutTime = 1000;
  timeout = setTimeout(function () {

    document.location = 'https://itunes.apple.com/app/my-app';

  }, timeoutTime);
}

El problema es que la iframe truco no funciona en Safari iOS9.

Alguna idea de por qué?

Mi iframe truco basado en este respuesta.

  • el openApp redirigir a safari o no
  • Qué u significa?
  • lo sentimos , en su condición de redirigir a safari o no
  • Pero quiero cambiar de aplicación, si es posible (y no muestran ninguna alerta en caso de que es imposible) o redirigir a la app store. No quiero redirigir cualquier manera..
  • amigo , no sé de javascript, pero he trabajado en el esquema de URL en más de tres aplicaciones en iOS, seguramente apoyo a encontrar la solución ,
  • Amigo, Gracias por tu ayuda, y de la misma gracias a su apoyo. Me preguntó acerca de JavaScript+Safari+iOS+URLScheme no sólo acerca de iOS y no sólo acerca de URLScheme
  • has probado la eliminación de display:none? Tal vez Safari en iOS9 no abrir url/iframe no se muestra…
  • Sí, el mismo problema :/
  • tengo el mismo problema! Algunos sitios web hecho con 2-3 redirect (es decir, LinkedIn). No me gusta san.derrick solución, pero tal vez la sustitución de redirigir a la tienda con una redirección a otra, o la misma página saltarse el esquema de uris de lanzamiento, podría ser una solución. ¿Qué te parece?
  • Creo que no puede huir de el gran hermano (Él va a seguir viendo nosotros..), y debemos usar Universal Links por Apple

InformationsquelleAutor gran33 | 2015-09-21

5 Comentarios

  1. 23

    El iframe truco ya no funciona, mi conjetura es que Apple sabe que va a animar a los desarrolladores a implementar Universal Enlaces, más rápidamente.

    Todavía se puede establecer window.location='your-uri-scheme://'; y el retroceso a la App Store después de 500ms. Hay una «danza» entre pop-ups si usted toma este enfoque, como lo hacemos en Rama (hacemos como un mensaje Universal si los Enlaces no funcionan).

    window.location = 'your-uri-scheme://'; //will result in error message if app not installed
    setTimeout(function() {
       //Link to the App Store should go here -- only fires if deep link fails                
       window.location = "https://itunes.apple.com/us/app/myapp/id123456789?ls=1&mt=8";
    }, 500);

    Me gustaría tener una respuesta mejor para usted. iOS 9, definitivamente, es más limitado.

    Para una útil visión general de lo que se necesita para el Universal, los Enlaces deben ir por ese camino, echa un vistazo a mi respuesta aquí o leer este tutorial

    • pero esto todavía tiene el feo pop-up, ¿verdad?
    • sí, si la aplicación no está instalada. Es desafortunado.
    • Cuando el cambio de localización y el temporizador de reserva se invocan a partir de la interacción de un usuario de evento (por ejemplo, un onclick de un botón), en oposición a la ejecución por ejemplo, onload, el cambio de ubicación en el temporizador siempre se ejecuta y el usuario siempre termina siendo golpeado en el app store. Parece que en este interactivo escenario, el «Abrir esta página en ‘aplicación'» cuadro de diálogo emergente que se muestra como resultado de la primera ventana.ubicación de la asignación no evitar más cambios en la ubicación del suceso. También, parece que el tiempo de espera puede ser tan bajo como 1 ms, no veo diff entre 500 y 1, Chrome incluido.
    • En respuesta a mi comentario anterior, para asegurar el flujo funciona como se espera, incluso en el escenario interactivo, usted tendrá que ‘crear direccionamiento indirecto’ envolviendo toda la cosa (es decir, incl. la primera ventana.ubicación de asignación) en otro tiempo de espera. E. g.: setTimeout(function () {window.ubicación = ‘su-esquema de uris://’; setTimeout(function () { window.ubicación = ‘itunes.apple.com/us/app/myapp/id123456789?ls=1&mt=8‘ }, 1); }, 1);
    • No veo cómo envolver en otro tiempo de espera de ayuda. Im mi caso no.
    • Esto no parece estar trabajando para mí – se mostrará la ventana de «Abrir en la aplicación myapp?» diálogo por un segundo y luego se va a redirigir a mi reserva url en el método setTimeout. Alguna idea de por qué?
    • Alguien ha descubierto esto?
    • Se parece a un 9.2 cosa en la opción «Abrir esta página» cuadro de diálogo no modal, por lo que la redirección no es prevenido.
    • en las versiones de iOS >12.3, después de abrir la Aplicación de Safari redirige a App Store en una fracción de segundo.

  2. 2

    Como ya se ha mencionado la configuración de window.location en iOS 9, todavía funciona. Sin embargo, esto trae a colación un Abrir en la Aplicación de diálogo. He puesto un ejemplo en https://bartt.me/openapp que:

    1. Lanza Twitter cuando el Abierto en la aplicación Twitter se hace clic.
    2. Vuelve a caer en la cuenta de Twitter de la aplicación en la App Store.
    3. Redirige a Twitter o la App Store sin el usuario la selección de Abrir en el Abierto en la Aplicación de diálogo.
    4. Funciona en todos los navegadores en iOS y Android.

    Vistazo a la fuente de https://lab.bartt.me/openapp para obtener más información.

    • Lo hace de nuevo, fue desactivado temporalmente.
    • hola puede usted proporcionar el código en algún lugar?
    • Mira en la fuente de bartt.me/openapp para más información.
    • Re punto 3, he probado en iOS 9.3.5, y no parece ser capaz de abrir Twitter sin que el usuario hace clic en abrir en el botón «Abrir» en la ventana de «Abrir esta página en ‘Twitter’ de diálogo».
    • +1 funciona en iOS 9 sin el «Open in app» diálogo? Gracias por compartir. Puede usted por favor agregar su código en el post para estar en conformidad con el Desbordamiento de la Pila de reglas.
    • puede usted por favor proporcione el código? Los enlaces de la página de resultados en un 404. Gracias!
    • He actualizado el enlace al código fuente.

  3. 1

    Tal vez intente darle soporte de la aplicación Universal de los Enlaces

    Idea:
    Evitar personalizada (JavaScript, iframe) soluciones en Safari, reemplace el código con un apoyo Universal Enlace.

    Ejemplo

    <html>
    <head>
    ...
    </head>
    <body>
        <div class"app-banner-style">
            <a href="http://yourdomain.com">In app open</a> 
        </div>
    ...content
    </body>
    </html>

    si soporte de la aplicación Universal de los Enlaces (por ejemplo, yourdomain.com), que muss configurar su dominio (y la ruta de acceso) y iOS9 debe reaccionar a ella de enlace de la apertura de la Aplicación. Que es sólo teoría, pero supongo que debe ser el trabajo 🙂

    https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12

    • que es una buena manera de acercarse al problema, pero la pregunta se refieren a javascript, iframe, Safari
    • Esta debe ser la respuesta correcta @carlos.baeza … el único problema es el universal vínculos de unión es muy complejo. Pero estás en lo correcto. I la calificó como usted.
    • pero no abrir la appstore si la aplicación no está instalada
  4. 0

    iframe hack no funciona en ios9 más. Posible solución es el uso de dos botones.
    Ejemplo:

    $('#goToStoreBtn').text( "go to store" ).click(function(event){
        event.preventDefault();
        event.stopPropagation();
        window.location = storeUrl; //https://itunes.apple.com/...
    });
    
    $('#goToAppBtn').text( "go to app" ).click(function(event){
        event.preventDefault();
        event.stopPropagation();
        window.location = appUrl;  //myApp://...
    });

Dejar respuesta

Please enter your comment!
Please enter your name here