2012-09-22 7 views
10

Trovo che l'app nativa di Vimeo iOS possa impostare i cookie su Safari mobile. Come fa?Come può un'app nativa iOS come Vimeo impostare i cookie su Safari mobile?

passi Repo:

1, installare Vimeo iOS nativa su un dispositivo iOS.

2, apri questa app nativa di Vimeo iOS e accedi con il tuo account Vimeo.

3, aprire Safari mobile e quindi aprire la pagina Web "https://vimeo.com/". Trovi che non sei connesso a Vimeo.

4, Aprire l'app nativa di Vimeo iOS e quindi fare clic sull'icona "Guida (punto interrogativo)" nella barra di navigazione sinistra. Vedrai che il centro assistenza di Vimeo viene aperto tramite UIWebView. E poi puoi chiudere questo centro assistenza.

5, aprire Safari mobile e quindi aprire la pagina Web "https://vimeo.com/". Ti accorgi di aver firmato Vimeo.

Grazie.

risposta

5

Come mostrato in this question, è possibile impostare un cookie utilizzando la classe NSHTTPCookieStorage.

EDIT:
Come Kitsune sottolineato, i documenti affermano che questo non funzionerà tra le applicazioni in iOS come appare nelle OSX.

Non ho tempo di testare questo al momento, ma forse è possibile impostare un cookie utilizzando javascript e il metodo stringByEvaluatingJavaScriptFromString di UIWebView e sarà condiviso? Ecco una funzione che ho trovato su internet, che potrebbe essere chiamato:

function SetCookie(cookieName,cookieValue,nDays) { 
var today = new Date(); 
var expire = new Date(); 
if (nDays==null || nDays==0) nDays=1; 
expire.setTime(today.getTime() + 3600000*24*nDays); 
document.cookie = cookieName+"="+escape(cookieValue) 
       + ";expires="+expire.toGMTString(); 
} 
+5

In base alla documentazione di 'NSHTTPCookieStorage': _iOS Nota: i cookie non sono condivisi tra le applicazioni in iOS._ – Kitsune

+0

Interessante, buono a sapersi! – lnafziger

+0

@Kitsune _Cookies non sono condivisi tra le applicazioni in iOS._ Le app native iOS possono impostare i cookie su Safari mobile. Ma le app native non possono ottenere o eliminare cookie in Safari mobile. ** Giusto? ** – weilou

3

E 'possibile che un'applicazione nativa di Vimeo sta passando un qualche tipo di segno in segno attraverso la stringa di query per la pagina di aiuto, che potrebbe immediatamente favore usare a una pagina senza token di accesso nell'URL più dopo aver impostato un cookie. Poiché il cookie viene impostato dal server Web su UIWebView (Safari), viene rilevato quando si utilizza l'app Safari.

Che non sarebbe necessaria un'API di supporto in iOS ...

0

Questo ovviamente non sarebbero state applicate al momento della domanda del PO, ma più recentemente biscotti erano condivisi tra Safari e SFSafariViewController casi in iOS 9 e 10. Vimeo avrebbe potuto impostare un cookie tramite un invisibile SFSafariViewController per ottenere questo risultato. Tuttavia, è cambiato in iOS 11. In futuro, ogni app (incluso Safari stesso) avrà un archivio dati completamente in modalità sandbox. Annuncio ufficiale here (al punto 17:28).

In iOS 11, un comportamento come questo non sarà più possibile (in effetti, impedendo che fosse l'esempio descritto nell'annuncio di Apple su questo cambiamento).

Se è necessario un modo per passare una corrispondenza utente garantita da Safari alla propria app, sarà necessario utilizzare una rete esistente di corrispondenze dispositivo, ad esempio Branch.io (divulgazione completa: sono nel team Branch) . Puoi leggere le tecniche utilizzate da Branch al posto del passthrough dei cookie here.