¿Puede una aplicación de iPhone leer las cookies almacenadas previamente por Safari Mobile?¿Puede una aplicación xcode de iPhone leer las cookies almacenadas previamente por Safari Mobile?
Respuesta
Para realmente respuesta a su pregunta:
Nº
las cookies de Safari móvil no son accesibles desde aplicaciones SDK. Y cada aplicación SDK recibe su propio caché WebKit y tiendas de cookies, por lo que aunque las cookies persistirán en la misma aplicación, no se podrá acceder entre ellas.
Debido a la zona de pruebas en el iPhone, no tiene acceso a las cookies de Safari. Solo puede acceder a las cookies creadas dentro de su aplicación, por ejemplo, mediante UIWebView.
mfazekas hola, Gracias de nuevo por su respuesta. Las cookies se configuran a través de un javascript de una página que carga desde el directorio de documentos de mi aplicación en el control UIWebView de mi aplicación. ¿Esto garantizaría que las cookies se almacenaran en el arenero de mi aplicación? Gracias por su ayuda hombre. – TonyNeallon
A pesar de haber hecho la misma pregunta twicebefore, aquí hay un enfoque aún no se ha mencionado ...
Esto puede ser un poco complicado, pero se pueden hacer cosas Greasemonkey-esque con un UIWebView. Algo como esto:
- cargar la página de destino
- embarcaciones algunos javascript que leerá el document.cookie y devolver los datos que necesita
- En el delegado webViewDidFinishLoad, se inyecte esta javascript en el UIWebView con el stringByEvaluatingJavaScriptFromString mensaje
He utilizado esta técnica para mejorar páginas de terceros en una aplicación de iPhone, pero no estoy seguro si leerá cookies del mismo lugar que Safari mobile.
¿Vale la pena intentarlo?
Hola Paul, Gracias por la sugerencia.Inyectar el javascript para leer document.cookies aún no pasa nada asustado. Pero valió la pena intentarlo. Pensé que lo tenía :) – TonyNeallon
Es posible que desee comprobar
if ([[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy] != NSHTTPCookieAcceptPolicyAlways) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
}
Pero al parecer NSHTTPCookieStorage ni siquiera mantener las cookies de la última solicitud en la aplicación actual en IOS (rdar: // 8190706)
Aquí está mi utilidades obtienen/establecer métodos de cookies
+(void)setCookie:(NSString *)key withValue:(NSString *)value {
NSArray *keys = [NSArray arrayWithObjects:
NSHTTPCookieDomain,
NSHTTPCookieExpires,
NSHTTPCookieName,
NSHTTPCookiePath,
NSHTTPCookieValue, nil];
NSArray *objects = [NSArray arrayWithObjects:
@"YOURDOMAIN",
[NSDate distantFuture],
key,
@"/",
value, nil];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:dict];
NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
[sharedHTTPCookieStorage setCookie:cookie];
}
+(NSString *)getCookie:(NSString *)key {
NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookies = [sharedHTTPCookieStorage cookiesForURL:[NSURL URLWithString:@"YOURDOMAIN"]];
NSEnumerator *enumerator = [cookies objectEnumerator];
NSHTTPCookie *cookie;
while (cookie = [enumerator nextObject])
{
if ([[cookie name] isEqualToString:key])
{
return [cookie value];
}
}
return nil;
}
¿La cookie guardada con este método nunca caduca? –
De hecho, hay una manera interesante si tiene acceso a una URL del servidor.
- En su aplicación, inicie la url del servidor con safari móvil.
- la URL del servidor de destino lee la cookie y redirige a una URL específica aplicación (miaplicacion: // galletas = 123)
- La aplicación está encenderse nuevamente y se puede leer que el valor del controlador de URL
Es un poco hacky ya que la aplicación cambiaría de safari móvil y luego volvería de inmediato a la aplicación. Pero, es posible.
Hola, este es un comentario a una respuesta bastante antigua. Apple comenzó a rechazar este cambio a safari y volver a la aplicación hace algunos años. Creo que fue una solución bastante buena para cuando se dio la respuesta. – lnjuanj
Tenga en cuenta que en iOS 8, probablemente sea mejor utilizar Safari Password Sharing para resolver algunos de los casos de uso que dan lugar a este problema.
Esto no es directamente posible, pero con la cooperación del sitio web es posible.
Para aclarar, el caso del usuario es que una aplicación Objective C quiere leer el valor de una cookie que ha sido establecida por un sitio web en el safari móvil. (. Es decir, en particular, un UIWebView no estaba involucrado en el establecimiento de la cookie)
Su aplicación debe hacer esto:
- Safari Mobile lanzamiento, usando [[UIApplication sharedApplication] openURL: url];
- La URL debe ser especial, ej. http://yourwebsite.com/give-ios-app-the-cookie
- En su página web, cuando esa url se pone en marcha, una redirección a su aplicación-url-esquema: = (por ejemplo angrybirds.: Cookievalue = hh4523523sapdfa) cookievalue
- al delegado de la aplicación recibe - (BOOL) aplicación : (UIApplication *) openURL aplicación: (NSURL *) sourceApplication url: (NSString *) sourceApplication anotación: (id) proceso de anotación de la URL para obtener el valor de la cookie
Tenga en cuenta que no debe hacer esto de forma automática cuando el se inicia la aplicación: el usuario verá la transferencia a Mobile Safari y viceversa, lo que no es una buena experiencia para el usuario y Apple rechazará su aplicación (Apple también considera que es "la carga de los datos personales del usuario a servidor sin su consentimiento previo "). Sería mejor hacerlo en respuesta al usuario, prestando atención a la experiencia del usuario, por ej. espere a que el usuario presione un botón de "inicio de sesión", luego hágalo, y si el usuario no ha iniciado sesión en su sitio web, http://yourwebsite.com/give-ios-app-the-cookie debe mostrarle al usuario la pantalla de inicio de sesión dentro de safari. Si el usuario ha iniciado sesión, puede mostrar brevemente una pantalla de "Iniciar sesión automáticamente ..." durante uno o dos segundos en Safari antes de redireccionar al usuario.
No hay forma de que esto funcione con hotmail/gmail/etc. por supuesto, tiene que ser su propio sitio web.
El crédito va a Unique Identifier for both mobile safari and in app in iOS por sugerir este tipo de enfoque.
La mejor fuente de documentación para "Uso compartido de contraseñas de Safari" es WWDC2014 Session 506: "Su aplicación, su sitio web y Safari" –
¡A partir de iOS 9 esto es posible!
Utilice un sfSafariViewController.
Usted tendrá que configurar:
- Un custom URL scheme en su aplicación para recibir datos de las cookies.
- El sitio web del que obtiene las cookies deberá implementar una API específica del esquema de URL personalizado de su aplicación, para redireccionar a su aplicación.
Puede clonar este repo que tiene una demostración completamente funcional de esto.
Espero que esto ayude,
Liam
- 1. Eliminar las cookies almacenadas anteriormente de Mechanize
- 2. iphone nsurlconnection leer cookies
- 3. Acceda a todas las cookies almacenadas
- 4. Cómo leer las cookies locales
- 5. Mobile Safari en iPhone/iPod CSS hack
- 6. Safari Mobile pantalla completa
- 7. Cómo acceder a la cámara del iPhone desde Mobile Safari
- 8. Implementar una aplicación de iphone de xcode a iphone
- 9. OnSubmit con Mobile Safari
- 10. Mobile Safari Problema SVG
- 11. ¿Puede una aplicación local html5 tener una sesión asp.net? (Aplicación web local para iPhone)
- 12. Aplicación web para iPhone, no almacena cookies
- 13. ASP.NET sin cookies de sesión de URL problema sólo en Safari Mobile
- 14. Crear una aplicación para iPhone sin Xcode
- 15. ¿Cómo puede una aplicación nativa de iOS como Vimeo establecer cookies para Safari móvil?
- 16. Mobile Safari botón Atrás
- 17. Mobile Safari en iPhone 5: ¿Tamaño de área visible?
- 18. Eliminar la sombra interior de textarea en Mobile Safari (iPhone)
- 19. Borrar las cookies del simulador de iPhone
- 20. Editor de texto enriquecido en Mobile Safari
- 21. PHP leer las cookies creadas con setcookie()
- 22. ¿Cómo puedo iniciar Safari desde una aplicación de iPhone?
- 23. Borrar las cookies de Safari de la Terminal
- 24. iPhone Mobile Safari, ¿Cuántas conexiones http paralelas máximas?
- 25. Mobile Safari 5mb ¿Límite de caché de la aplicación HTML5?
- 26. ¿Se puede acceder a la cámara del iPhone desde Mobile Safari?
- 27. XCode 4.2 + Iphone 3g no se puede ejecutar la aplicación
- 28. Mobile Safari realiza solicitudes de video múltiples
- 29. ¿Diferencias de Javascript entre Mobile Safari y Safari en Mac?
- 30. ¿Dónde se almacenan las cookies de UIWebView?
Hola Marco, Gracias hombre. Eso es lo suficientemente alto y claro incluso para mí :). Usted dice que a cada aplicación SDK se le asigna su propio caché WebKit, supongo que se puede acceder a ellas usando la clase HSHTTPCookieStorage. ¿O estoy todavía lejos? – TonyNeallon
No estoy seguro, nunca lo intenté. Pruébalo. Instalar UIWebView solo requiere unos minutos de trabajo, cargar una URL para un sitio que le dará una cookie e intentar leer las cookies. Probablemente lo haría con Javascript si la vista web todavía estaba accesible. (stringByEvaluatingJavascriptString :) – Marco