4

我明白,從iOS9開始,您應該可以使用SFSafariViewController讀取cookie。SFSafariViewController cookies

如果我使用下面的設置我的網頁上的Cookie,JS:

var dd = new Date(Date.now() + 1000 * 60 * 60 * 24).toGMTString(); 
var expires = "expires="+ dd; 
document.cookie = "mycookie=cookievalue; " + expires + " domain=.mydomain.co.uk ; path=/ "; 

如果我做的:

- (void)safariViewController:(SFSafariViewController *)controller didCompleteInitialLoad:(BOOL)didLoadSuccessfully 
{ 
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    NSArray *cookiesArray = [storage cookies]; 
} 

cookiesArray總是空的。

如果我使用的是傳統的UIWebView

-(void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    NSArray *cookiesArray = [storage cookies]; 
} 

我得到我所期待的餅乾。

任何想法,我可能做錯了什麼?

回答

5

SFSafariViewController基本上是一個Safari程序,運行在您的應用程序之外。您的應用將無法訪問SFSafariViewController使用的Cookie,就像您的應用無法訪問Safari應用本身的Cookie一樣。

如果您需要此功能,您需要堅持使用UIWebViewWKWebView

+0

感謝您回覆我,但根據:https://developer.apple.com/reference/safariservices/sfsafariviewcontroller 該視圖控制器包括Safari功能,如閱讀器,自動填充,欺詐網站檢測和內容阻塞。它與Safari共享cookies和其他網站數據。用戶的活動和與SFSafariViewController的交互對您的應用程序不可見,該應用程序無法訪問自動填充數據,瀏覽歷史記錄或網站數據。您不需要在應用程序和Safari之間保護數據。 –

+1

您誤解了SFSafariViewController「與Safari共享Cookie和其他網站數據」意味着什麼。 SFSafariViewController是Safari的一個實例。它不是你的應用程序的一部分。它正在訪問數據的Safari沙盒(cookie,自動填充等),它不是您的應用程序與Safari共享該數據。您的應用無法訪問Safari中的任何安全數據,包括Cookie。如果您需要在您的應用中訪問網站cookie,SFSafariViewController不是正確的選擇。 – wottle

+0

您在代碼中證明了我的答案。如果您在SFSafariViewController中訪問網站,NSHTTPCookieStorage將爲空。 SFSafariViewController有它的用處,但不是你想要做的。 – wottle