2009-10-22 8 views
8

¿Es posible establecer una cookie en una aplicación de iPhone que persista, de modo que más tarde cuando el usuario esté en Mobile Safari, esa cookie se pueda enviar a un servidor web?Configuración de una cookie en una aplicación de iPhone

+0

Aquí está la solución: http: // stackoverflow.com/questions/5837702/nshttpcookiestorage-state-not-saved-on-app-exit-any-definititive-knowledge-docume/15633164 # 15633164 –

Respuesta

13

** Actualización 2017 **
Se han introducido muchos cambios en los mecanismos de seguridad y la comunicación entre aplicaciones en iOS en los últimos años desde que se respondió por primera vez.

El código de abajo ya no funciona en iOS versiones actuales desde Safari ya no acepta javascript:... en las URL y los marcos como NSURL atrapar a estos y volver nil.

La única alternativa que aún funciona es alojar un sitio web y tener Safari abrirlo o integrar dicha página HTML en su aplicación y ejecutar un pequeño servidor http para alojarlo bajo demanda.

** iOS hasta 6.x **
Desde que Apple ha obligado a los sandboxing en todas las aplicaciones de la tienda de aplicaciones
actualmente no hay manera fácil de realizar su solicitud.

No obstante, usted podría abrir una especial http://-URL desde la aplicación que contiene Javascript para colocar una cookie:

NSString jsURL = @"javascript:function someFunction(){ /* your javascript code here */ } someFunction();void(0)"; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: jsURL]]; 

uso de JavaScript en las URL ha sido utilizado por diferentes aplicaciones de iPhone para cruzar comunicarse
con MobileSafari (por ejemplo instapaper)

Otra opción sería incluir una página HTML estática en su aplicación o en su servidor e indicarle a MobileSafari que la abra.
La página a su vez podría establecer la cookie permanente.

Espero que esto ayude!

+0

Ha probado esto y parece que no funciona. [NSURL URLWithString: @ "javascript: function someFunction() {alert ('test!');} SomeFunction(); void (0)"] devuelve nil . –

+0

¿Cómo podríamos instruir a Safari para que abra un html estático desde nuestra aplicación? – Deam

+0

Usando iOS Safari.app no ​​se puede (no sin jailbreak y file: // support). – Shirkrin

0

El documentation for NSCookieStorage sugiere que sería un mecanismo de este tipo. Pero si "todas las aplicaciones" realmente incluye Mobile Safari o no, su experimentación tendrá que determinar ...

Consulte también la documentación general para el URL Loading System.

+0

Basado en mis rápidos experimentos, las cookies que estaba guardando usando NSCookieStorage solo fueron legibles por el aplicación que los creó. No estoy seguro de si estoy haciendo algo mal o si ese pasaje en los documentos es engañoso. –

+0

Admito que nunca lo he usado en mis propias aplicaciones, pero vi comentarios en la web que parecían indicar que otros habían tenido éxito. Lamento escuchar que no funcionó para ti. :-( –

0

Soy nuevo en el desarrollo de iPhone, pero si no abriera un UIWebView, ¿permitiría que su servidor establezca una cookie en el navegador para que cuando el usuario visite el sitio con Safari la cookie pueda leerse en su servidor web? Tal vez un UIWebView oculto o pequeño? No puedo decir cuál es el caso de uso de su pregunta.

+1

UIWebViews tienen espacio aislado y usan un almacenamiento de cookies diferente para Mobile Safari – Fraser

2

Creo que esto es fácil mediante el uso de la biblioteca ASIHTTPRequest. Encapsula el uso de la tienda de cookies global.

http://allseeing-i.com/ASIHTTPRequest/How-to-use

Puede hacer peticiones con esta biblioteca, que se acumularán las cookies, y luego estas cookies afectarán otras peticiones más tarde.

Lo uso con gran efecto al acceder a las API autenticadas en mi aplicación de iPhone.

Cuestiones relacionadas