2016-03-24 4 views
9

मैं जो यूआरएल http://www.w3schools.com/js/js_cookies.asp पर एक SFSafariViewController इशारा शामिल एक अविश्वसनीय रूप से बुनियादी एप्लिकेशन बनाया। कुकीज़ पढ़ने और लिखने के लिए यह एक परीक्षण वेबसाइट है।क्यों SFSafariWebViewController Safari के साथ कुकीज़ साझा नहीं कर रहा है?

मैं तो मोबाइल सफारी में एक ही वेबसाइट लोड, और एक कुकी गयी। मैंने अपने ऐप पर स्विच किया, कुकी पढ़ी, यह वहां है। मैं सफारी वापस जाता हूं, एक और कुकी जोड़ता हूं, मेरे ऐप पर वापस जाता हूं, लेकिन दूसरी कुकी दिखाई नहीं देती है। मैं पृष्ठों को ताज़ा करता हूं, कोई फर्क नहीं पड़ता। सफारी वापस जाएं और कुकीज़ पढ़ें, वे दोनों सफलतापूर्वक पढ़े जाते हैं।

क्या मैं क्रम में क्षुधा के बीच कर के लिए कुकीज़ लिखा होना और ठीक से पढ़ने की जरूरत है है?

+1

जो कुकीज़ के गुण हैं? NSHTTPCookieStorage – atrebbi

+0

के अंदर देखो क्या यह SFSafariViewController से प्रभावित है? यह एक जांच के लायक है तो धन्यवाद। – jowie

+2

अरे, क्या आपने कभी यह पता लगाया है? मैं अपने ऐप में एक सफारी ऑथ विधि का प्रयास कर रहा हूं और मुझे एक ही समस्या है। ब्राउज़र अनुरोध कुकीज़ को ठीक दिखाते हैं, लेकिन इन-ऐप SFSafariVC अनुरोध नहीं करते हैं। – Dima

उत्तर

2

के रूप में एप्पल के दस्तावेज़ ने कहा:

SFSafariViewController वर्ग वेब ब्राउज़िंग के लिए एक मानक इंटरफेस प्रदान करता है। व्यू कंट्रोलर में रीडर, ऑटोफिल, धोखाधड़ी वेबसाइट डिटेक्शन और सामग्री अवरोधन जैसी सफारी सुविधाएं शामिल हैं। यह सफारी के साथ कुकीज़ और अन्य वेबसाइट डेटा साझा करता है। SFSafariViewController के साथ उपयोगकर्ता की गतिविधि और बातचीत आपके ऐप पर दिखाई नहीं दे रही है, जो ऑटोफ़िल डेटा, ब्राउज़िंग इतिहास या वेबसाइट डेटा तक नहीं पहुंच सकता है। आपको अपने ऐप और सफारी के बीच डेटा सुरक्षित करने की आवश्यकता नहीं है।

डिफ़ॉल्ट रूप से यह सफारी के साथ साझा करता कुकीज़ और अन्य वेबसाइट डेटा है। आपको कुछ भी करने की ज़रूरत नहीं है।

+0

ठीक है हाँ मैं इसे पहले पढ़ूंगा। साझा करने के लिए धन्यवाद। कुकीज को लगभग 50% समय साझा किया जा रहा है, और आम तौर पर केवल ताज़ा करें अगर आप ऐप को मजबूर करते हैं और पुनः लोड करते हैं। – jowie

+0

मुझे अपने ऐप के अंदर सफारी ऐप से कुकीज़ पढ़ने की जरूरत है। क्या यह संभव है? –

4

आप SFSarfariViewController लागू खारिज करने के लिए जब एप्लिकेशन बंद कर देता है सकता है। यह सुनिश्चित करेगा कि वेबपृष्ठ किसी भी नई कुकीज़ के साथ ताज़ा हो जाए।

viewDidLoad में:

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

:

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

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

आशा इस मदद करता है,

लियाम

+0

बहुत बढ़िया खोज, क्या होगा यदि आपका उपयोग केस आपके ऐप के आसपास का दूसरा तरीका सफारी से नवीनतम कुकी प्राप्त करने में सक्षम नहीं है? – Mills

+0

यह एक अच्छा "हैक" है लेकिन दुर्भाग्य से यह हमारे विशिष्ट उपयोग मामले में मदद नहीं करता है। हम सफारी से आ रहे हैं, वहां कुकी को संग्रहित कर रहे हैं, और फिर जब ऐप लॉन्च किया जाता है तो हम उस कुकी को पढ़ने की कोशिश करने के लिए SFSafariViewController का उपयोग कर रहे हैं। दुर्भाग्य से जब हम इसे पढ़ने की कोशिश करते हैं, कभी-कभी इसे सेट के रूप में नहीं पढ़ा जाता है। – jowie

4

Apple Dev Forums पर एक उपयोगकर्ता सुझाव दिया है कि यह केवल "कायम लिए काम कर सकते कुकीज "नहीं" सत्र कुकीज़ "। मैं अपनी कुकीज़ पर समाप्ति तिथि निर्धारित नहीं कर रहा था। मुझे लगता है कि बदल भविष्य में एक समय हो रही द्वारा:

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

और फिर शीर्षक में स्थापित:

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

और अब कुकी मान SFSafariViewController में दिखाई देता है।

+0

मेरे लिए काम किया! साझा करने के लिए धन्यवाद! – Kukiwon

संबंधित मुद्दे