iOS Safari no reconoce los esquemas de URL después de que el usuario cancele
iphone mobile-safari (5)
Estoy notando un comportamiento extraño en Safari recientemente.
Registré un esquema de url para mi aplicación e myapp://
en Safari. Esto lanza mi aplicación inmediatamente.
Luego vuelvo a Safari y vuelvo a ingresar myapp://
en Safari, esta vez me indica "¿Abrir esta página en" myapp "?" Cancelar o Abrir.
Mi aplicación se iniciará si hago clic en abrir, y en los intentos posteriores se mostrará la misma alerta. Si trato de tocar en cancelar, mi aplicación no se iniciará. que se espera.
Sin embargo, si vuelvo a ingresar myapp://
en la barra de URL, se me indica "No se puede abrir la página" "Safari no puede abrir la página porque la dirección no es válida".
Esto fallará de la misma manera para todos los intentos subsiguientes, hasta que mate a Safari y lo reinicie, o abra otra pestaña.
Este es el mismo comportamiento con Youtube y Evernote. Mi conjetura es que Safari guardó en caché la URL como una URL no válida cuando el usuario toca en cancelar. ¿Hay documentación oficial sobre este comportamiento?
Bbserved en iOS 8.1.2 y iOS 6.1.3
Agregar el siguiente código en AppDelegate solucionó mi problema, espero que también te funcione.
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let notification = Notification(name: Notification.Name(rawValue: "AppNotificationLaunchString"), object: nil, userInfo: [UIApplicationLaunchOptionsKey.url:url])
NotificationCenter.default.post(notification)
return true
}
Cuando llame a su URL, agregue un valor único como timeStamp a su llamada de URL.
double currentt = [[NSDate new] timeIntervalSince1970];
NSTimeInterval differ= [[NSDate dateWithTimeIntervalSince1970:currentt] timeIntervalSinceDate:[NSDate dateWithTimeIntervalSince1970:1296748524]];
NSLog(@"differ: %f", differ);
NSString *url =[NSString stringWithFormat: @"https://thisisawebsite×tamp=%f", differ];
Siempre verá la ventana emergente hasta que haga clic en "Aceptar"
En 9.1 el problema sigue existiendo. La solución para mí es simplemente reiniciar safari (deslice hacia arriba para borrarlo del fondo).
Relanzar la aplicación safari o abrir una nueva pestaña solucionó este problema
Yo tuve el mismo problema. Una vez cancelado, daría ese error.
Lo que hice fue enviar un parámetro adicional con una marca de tiempo, por lo que Safari no lo almacenaría en caché. Así que después del último parámetro, agregué un parámetro foo con el número de milisegundos desde la medianoche del 1 de enero de 1970. Utilizo as3, pero esto debería ser legible para todos los desarrolladores:
var foo:Number = new Date().time; //The number of milliseconds since midnight January 1, 1970
var urlRequest:URLRequest = new URLRequest(url+"&foo="+foo);