2012-03-09 15 views
6

He intentado insertar una pequeña vista web (320x480) dentro de la aplicación de mi iPad, para simular una pequeña "pantalla de iPhone" que muestra el Twitter móvil. Pero, cada vez que uiwebview obtiene un NSUrlRequest para cargar http://mobile.twitter.com, mi aplicación se arranca automáticamente de la pantalla y iOS abre Twitter para iPad.Solicitando http://mobile.twitter.com en UIWebView

¿Hay alguna manera de cambiar ese comportamiento?

Esto es lo que estoy haciendo:

UIWebView *viewDoTwitter = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.bounds.size.height)]; 
viewDoTwitter.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
viewDoTwitter.scalesPageToFit = YES; 

[rootView insertSubview:viewDoTwitter atIndex:0]; 
[viewDoTwitter loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://mobile.twitter.com"]]]; 

Editado:

OK, he encontrado la solución, aquí: http://www.mphweb.com/en/blog/easily-set-user-agent-uiwebview

UIWebView *viewDoTwitter = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.bounds.size.height)]; 
viewDoTwitter.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
viewDoTwitter.scalesPageToFit = YES; 

NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3", @"UserAgent", nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary]; 

[rootView insertSubview:viewDoTwitter atIndex:0]; 

[viewDoTwitter loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.twitter.com"]]]; 

Pero, ahora enfrenta un nuevo problema: móviles .twitter.com insiste en adaptarse al tamaño de la pantalla del iPad, en lugar del ancho de 320 píxeles que especifiqué.

+0

¿Puedes publicar tu código UIWebView por favor? –

+0

¿Desea mostrar solo la página web de Twitter en esta vista o hacerla utilizable para el usuario u otra cosa? –

+0

Sí, debe ser útil para el usuario. – JulianoRossi

Respuesta

1

Si lo haces así, no deberías redirigido

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSURL *url = [NSURL URLWithString:@"http://mobile.twitter.com"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:request]; 
} 

El comportamiento que describes es alcanzable por esta línea de código (redirecciones):

[[UIApplication sharedApplication] openURL:url]; 
+0

Estoy haciendo esto: [viewDoTwitter loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: @ "http://m.twitter.com"]]]; – JulianoRossi

1

tengo También noté este nuevo comportamiento en UIWebView en varias aplicaciones. Esto solo ha comenzado desde el día de hoy, ya que ayer todas estas aplicaciones funcionaban bien.

Si intentas conectar en su lugar al https://mobile.twitter.com (ten en cuenta que la URL es "https") en UIWebView llegarás a la pantalla de inicio de sesión de Twitter pero después de ingresar las credenciales el sitio intenta redirigir tu aplicación a twitter: // línea de tiempo después iniciando sesión. Si no tiene la aplicación móvil oficial de Twitter instalada en el dispositivo, no puede navegar por el sitio móvil de Twitter en UIWebView. Si tiene instalada la aplicación nativa de Twitter, se le redirigirá a esa aplicación en lugar de explorar el sitio móvil en UIWebView.

Lo extraño es que si prueba lo mismo en Mobile Safari no obtiene este comportamiento de redirección a la aplicación móvil nativa de Twitter.

¿Es esto una especie de nueva restricción por parte de Twitter ya que esto romperá una serie de aplicaciones que acceden al sitio móvil de Twitter dentro de un UIWebView.

No estoy seguro si otros usuarios han experimentado este mismo comportamiento nuevo?

PD: ¿Acabo de consultar el foro de discusión de soporte del desarrollador de Twitter y alguien más está experimentando el mismo problema?

+1

Descubrí que está relacionado con el usuario-agente de la vista web, por eso el comportamiento entre UIWebView y MobileSafari es diferente. – JulianoRossi

+0

¿Tiene alguna solución que lo haga funcionar? –

+0

Mire el "EDITADO" en mi pregunta en la parte superior. – JulianoRossi