Recientemente descubrí que mi UIWebView se estaba ahogando en los enlaces de ITMS. Específicamente, desde UIWebView en mi aplicación, si navego a un sitio como this one y hago clic en el enlace "Disponible en el App Store", UIWebView podría generar un error con "Error Domain = WebKitErrorDomain Code = 101 La URL no se puede mostrar "¿Cómo manejar las URL de la aplicación en un UIWebView?
Después de googlear un poco, me di cuenta de que necesitaba captar las solicitudes de enlaces de aplicaciones y tener iOS para manejarlas. Empecé mirando para ver si el esquema comienza con "itms" en -webView:shouldStartLoadWithRequest:navigationType:
, pero me di cuenta de que podría haber otros tipos de enlaces de aplicaciones que el sistema puede manejar. Así que se me ocurrió esto, en lugar:
- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error {
// Give iOS a chance to open it.
NSURL *url = [NSURL URLWithString:[error.userInfo objectForKey:@"NSErrorFailingURLStringKey"]];
if ([error.domain isEqual:@"WebKitErrorDomain"]
&& error.code == 101
&& [[UIApplication sharedApplication]canOpenURL:url])
{
[[UIApplication sharedApplication]openURL:url];
return;
}
// Normal error handling…
}
Tengo dos preguntas sobre este:
- Es ésta su sano juicio? Estoy comprobando específicamente el dominio de error y el código de error, y obtengo la cadena de URL de userInfo. ¿Es probable que eso permanezca?
- Esto funciona para el enlace de tienda de aplicaciones anteriormente vinculado, pero cuando vuelvo a mi aplicación, parece haber habido una solicitud fallida posterior que falló con "Carga de fotograma interrumpida". ¿Cómo puedo deshacerme de eso? No sucede cuando tengo el sistema operativo manejar la solicitud desde
-webView:shouldStartLoadWithRequest:navigationType:
, por lo que es un poco molesto.
¿Cómo se manejar tales peticiones?
No solo iTunes: también tuve esto con el inicio de sesión de Facebook a través de vistas web. – Adam
Esto funcionó muy bien para mí también, gracias! – spstanley
salvar mi día, muchas gracias – duan