iOS 9 safari iframe src con un esquema de url personalizado que no funciona

Utilizo esta solución https://gist.github.com/davidwkeith/2662899 para networkingirigir a mi aplicación desde la web si la aplicación está instalada. Pero se rompió en ios 9. Todavía funciona en google chrome, pero iframe con esquema de url personalizado no inicia la aplicación en Safari.

Si cambio

document.getElementById('loader').src = 'custom-protocol://my-app' 

(donde loader es iframe) con

 window.location = 'custom-protocol://my-app' 

Será trabajo.

os: iOS 9 beta4 y beta5

¿Alguien sabe este problema? ¿Es ios 9 beta bug? ¿O no se solucionará?

La respuesta anterior es una implementación parcial de Universal Links que carece de detalles críticos y no incluye una reserva para la App Store.

Primero, ya no puede establecer iframe src para desencadenar un esquema de URI. Has identificado correctamente ese problema. Como señaló, puede, sin embargo, establecer set window.location = 'custom-protocol://my-app'; . Por lo tanto, si sabe que un usuario tiene su aplicación porque anteriormente abrió su aplicación desde el browser y tiene una cookie almacenada que puede consultarse en su server, puede activar de forma segura el custom-protocol:// .

En segundo lugar, puede detectar la cadena del agente de usuario utilizando navigator.userAgent. Pre-iOS 9, aún puede usar el iframe para disparar un esquema de URI, y luego retroceder después de un time de espera. En iOS 9, puede elegir si desea disparar el esquema de URI o no basado en cookies, luego lleve al usuario a la App Store. Trabajo en esto en Branch y haciendo uso de cookies para recordar si un usuario probablemente tiene la aplicación es algo que hemos implementado. Siéntase libre de comunicarse si tiene más preguntas al respecto, o use nuestra solución directamente.


La implementación de Universal Links no es tan simple como la otra respuesta describe. En realidad, hay bastante más complejidad. Aquí hay una list completa de los pasos (he ayudado a varias aplicaciones a integrarse en las últimas semanas usando estos pasos):

1. Configura tu aplicación para registrar dominios aprobados.

yo. Registró su aplicación en developer.apple.com si no lo ha hecho

ii. Habilite 'Dominios asociados' en el identificador de su aplicación en developer.apple.com.

iii Habilite 'Dominio asociado' en su proyecto Xcode

derechos

iv Agregue el derecho de dominio adecuado, applinks:yourdomain.com , en su aplicación

applinks

2. Configure su website para alojar el file 'apple-app-site-association'

yo. Compre un nombre de dominio o elija de su

ii. Adquiera la certificación SSL para el nombre de dominio (¡puede usar CloudFlare para esto!)

iii Cree un file estructurado 'apple-app-site-association' JSON

 { "applinks": { "apps": [ ], "details": { "TEAM-IDENTIFIER.YOUR.BUNDLE.IDENTIFIER": { "paths": [ "*" ] } } } } 

iv Firme el file JSON con la certificación SSL.

cat apple-app-site-association-unsigned | openssl smime -sign -inkey yourdomain.com.key -signer yourdomain.com.cert -certfile digicertintermediate.cert -noattr -nodetach -outform DER > apple-app-site-association

v. Configurar el server de files

El file apple-app-site-association: debe enviarse con el encabezado 'application / pkcs7-mime' – debe enviarse desde el punto final youdomain.com/apple-app-site-association – debe devolver un código 200 http.

Ejemplo Express + Nodo:

 var aasa = fs.readFileSync(__dirname + '/static/apple-app-site-association'); app.get('/apple-app-site-association', function(req, res, next) { res.set('Content-Type', 'application/pkcs7-mime'); res.status(200).send(aasa); }); 

crédito: prestado generosamente de esta publicación de blog

Sí con iOS9 ahora puedes unirte en profundidad. Consulte el enlace para get una explicación detallada pero expuse los conceptos básicos.

http://blog.hokolinks.com/how-to-implement-apple-universal-links-on-ios-9/

primero debes ir a tu objective y hacer clic en las capacidades. Agregue el dominio asociado.

A continuación, debe cargar el file apple-app-site-association.

Básicamente abre un editor JSON y construye algo como esto

 { "applinks": { "apps": [], "details": { "TBEJCS6FFP.com.domain.App": { "paths":[ "*" ] } } } } 

A continuación, debe admitir enlaces de Univeral en su aplicación. Necesitas implementar

 extension AppDelegate { func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restrationHandler: ([AnyObject]?) -> Void) -> Bool { if userActivity.activityType == NSUserActivityTypeBrowsingWeb { let webpageURL = userActivity.webpageURL! // Always exists if !handleUniversalLink(URL: webpageURL) { UIApplication.shanetworkingApplication().openURL(webpageURL) } } return true } private func handleUniversalLink(URL url: NSURL) -> Bool { if let components = NSURLComponents(URL: url, resolvingAgainstBaseURL: true), let host = components.host, let pathComponents = components.path?.pathComponents { switch host { case "domain.com": if pathComponents.count >= 4 { switch (pathComponents[0], pathComponents[1], pathComponents[2], pathComponents[3]) { case ("/", "path", "to", let something): if validateSomething(something) { presentSomethingViewController(something) return true } default: return false }