2009-10-22 9 views
8

È possibile impostare un cookie in un'applicazione iPhone che persiste, in modo che successivamente quando l'utente si trova in Mobile Safari, tale cookie possa essere inviato a un server web?Impostazione di un cookie in un'app per iPhone

+0

Ecco la soluzione: http: // stackoverflow.it/questions/5837702/nshttpcookiestorage-state-not-saved-on-app-exit-any-definitive-knowledge-docume/15633164 # 15633164 –

risposta

13

** Aggiornamento 2017 **
Un sacco di modifiche ai meccanismi di sicurezza e comunicazione cross-app sono state introdotte per iOS negli ultimi anni da quando questa è stata la prima risposta.

Il seguente codice non funziona più sulle versioni iOS attuali poiché Safari non accetta più javascript:... in URL e framework come NSURL e li recupera e restituisce nil.

L'alternativa che funziona ancora è quella di ospitare un sito Web e di aprire Safari o integrare tale pagina HTML nella tua app ed eseguire un piccolo server http per ospitarla su richiesta.

iOS ** Fino 6.x **
Dal momento che Apple ha costretto il sandboxing su tutte le applicazioni App Store
non c'è attualmente alcun modo semplice per realizzare la vostra richiesta.

Si potrebbe tuttavia aprire una speciale http://-URL dall'applicazione che contiene JavaScript per inserire un cookie:

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

Utilizzo di javascript in URL è stato utilizzato da diverse applicazioni per iPhone per attraversare la comunicazione
con MobileSafari (ad esempio instapaper).

Un'altra opzione sarebbe quella di includere una pagina HTML statica nell'app o sul server e richiedere a MobileSafari di aprirlo.
La pagina a sua volta potrebbe impostare il cookie permanente.

Spero che questo aiuti!

+0

Ho provato questo e non sembra funzionare. [NSURL URLWithString: @ "javascript: function someFunction() {alert ('test!');} SomeFunction(); void (0)"] restituisce nil –

+0

come potremmo istruire il safari per aprire un html statico dalla nostra app ??? – Deam

+0

Utilizzando l'iOS Safari.app non è possibile (non senza jailbreak e file: // supporto). – Shirkrin

0

Il documentation for NSCookieStorage suggerisce che sarebbe un tale meccanismo. Ma se "tutte le applicazioni" include davvero Safari Mobile o meno, la tua sperimentazione dovrà determinare ...

Vedere anche la documentazione generale per il URL Loading System.

+0

Sulla base dei miei rapidi esperimenti, i cookie che stavo salvando usando NSCookieStorage erano leggibili solo dal app che li ha creati. Non sono sicuro se sto facendo qualcosa di sbagliato o se quel passaggio nei documenti è fuorviante. –

+0

Ammetto che non l'ho mai usato nelle mie app, ma ho visto commenti sul web che sembravano indicare che altri avevano avuto successo con esso. Mi dispiace sapere che non ha funzionato per te. :-( –

0

Sono nuovo nello sviluppo di iPhone, ma non aprire una UIWebView consente al server di impostare un cookie sul browser, quindi quando l'utente visita il sito con Safari il cookie sarebbe leggibile sul server web? Forse un UIWebView nascosto o piccolo? Non posso dire quale sia il caso d'uso dalla tua domanda.

+1

UIWebViews sono in modalità sandbox e utilizzano una diversa memorizzazione dei cookie su Mobile Safari – Fraser

2

Credo che ciò sia reso semplice utilizzando la libreria ASIHTTPRequest. Incapsula l'uso del negozio di cookie globale.

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

È possibile effettuare richieste con questa libreria che maturerà i cookie, e quindi questi biscotti interesserà altre richieste in seguito.

Lo uso con grande efficacia per accedere alle API autenticate all'interno della mia app per iPhone.

Problemi correlati