2016-03-24 7 views
9

Ich habe eine unglaublich einfache App erstellt, die eine SFSafariViewController enthält, die auf die URL http://www.w3schools.com/js/js_cookies.asp zeigt. Dies ist eine Test-Website zum Lesen und Schreiben von Cookies.Warum teilt SFSafariWebViewController Cookies nicht ordnungsgemäß mit Safari zu?

Ich habe dann die gleiche Website in Mobile Safari geladen und ein Cookie hinzugefügt. Ich wechselte zu meiner App, las den Keks, er ist da. Ich gehe zurück zu Safari, füge einen weiteren Cookie hinzu, gehe zurück zu meiner App, aber der zweite Cookie ist nicht erschienen. Ich aktualisiere die Seiten, kein Unterschied. Gehe zurück zu Safari und lies die Cookies, die beide erfolgreich gelesen wurden.

Was muss ich zwischen den Apps tun, damit die Cookies richtig geschrieben und gelesen werden können?

+1

Welches sind die Eigenschaften der Cookies? NSHTTPCookieStorage ansehen – atrebbi

+0

Wird dies von SFSafariViewController beeinflusst? Es ist eine Untersuchung wert, danke. – jowie

+2

Hey, hast du das jemals herausgefunden? Ich probiere eine Safari-Authentifizierungsmethode in meiner App aus und habe das gleiche Problem. Browseranfragen zeigen Cookies in Ordnung, aber In-App-SFSafariVC-Anfragen nicht. – Dima

Antwort

2

Als Apple-Dokument sagte:

Die SFSafariViewController Klasse für das Surfen im Web eine Standard-Schnittstelle zur Verfügung stellt. Der View-Controller enthält Safari-Funktionen wie z. B. Reader, AutoFill, Erkennung betrügerischer Websites und Blockierung von Inhalten. Es teilt Cookies und andere Website-Daten mit Safari. Die Aktivität des Benutzers und die Interaktion mit SFSafariViewController sind für Ihre App nicht sichtbar. Sie können nicht auf AutoFill-Daten, Browserverlauf oder Website-Daten zugreifen. Sie müssen keine Daten zwischen Ihrer App und Safari sichern.

Standardmäßig teilt es Cookies und andere Website-Daten mit Safari. Du musst nichts tun.

+0

okay ja ich würde das schon mal lesen. Danke für das Teilen. Cookies werden in ungefähr 50% der Fälle geteilt und werden normalerweise nur aktualisiert, wenn Sie die App zwangsweise beenden und neu laden. – jowie

+0

Ich muss Cookies aus der Safari App in meiner App lesen. Ist es möglich? –

4

Sie könnten die SFSarfariViewController erzwingen, um zu schließen, wenn die App geschlossen wird. Dies würde sicherstellen, dass die Webseite zusammen mit neuen Cookies aktualisiert wird.

In ViewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shouldDismiss:) name:UIApplicationDidEnterBackgroundNotification object:nil]; 

dann:

- (void)shouldDismiss:(NSNotification*)notification { 

    [self.safariViewContollerName dismissViewControllerAnimated:YES completion:nil] 
} 

hoffe, das hilft,

Liam

+0

Toller Fund, was ist, wenn Ihr Anwendungsfall andersherum ist? Ihre App ist nicht in der Lage, den neuesten Cookie von Safari zu erhalten? – Mills

+0

Das ist ein netter "Hack", aber leider hilft es unserem speziellen Anwendungsfall nicht. Wir kommen von Safari, speichern den Cookie dort und dann, wenn die App gestartet wird, verwenden wir SFSafariViewController, um zu versuchen, diesen Cookie zu lesen. Leider, wenn wir versuchen, es zu lesen, liest es sich manchmal nicht als gesetzt. – jowie

4

Ein Benutzer auf dem Apple Dev Forums schlug vor, dass es nur für „verharrte funktionieren könnte Cookies "nicht" Session Cookies ". Ich habe kein Ablaufdatum für meine Cookies festgelegt. Ich änderte, dass durch eine Zeit in der Zukunft bekommen:

const expireTime = new Date(Date.now() + 1000 * 60 * 60 * 24).toGMTString(); 

und dann im Dateikopf:

"Set-Cookie":`query=${uri.query}; path=/; expires=${expireTime}` 

Und nun der Cookie-Wert erscheint in SFSafariViewController.

+0

Arbeitete für mich! Danke für das Teilen! – Kukiwon

Verwandte Themen