2015-09-22 9 views
12

मेरे पास एक आईओएस एप्लिकेशन है जो UIWebView में OAuth2 का उपयोग करके उबर एपीआई के साथ प्रमाणित करता है। आईओएस 9 में अपग्रेड करते समय, मैं लॉगिन पृष्ठ के लिए https अनुरोध को अवरुद्ध करने वाले एटीएस के मुद्दे पर चलता हूं। इसके बाद मैंने उबर लॉगिन पेज के लिए एक अपवाद जोड़ा, लेकिन फिर ध्यान दिया कि लॉगिन पेज फेसबुक, अमेज़ॅन वेब सर्विसेज और अन्य वेबसाइटों पर कई अन्य अनुरोध करता है, जो सभी एटीएस द्वारा अवरुद्ध हो रहे हैं।SFSafariViewController OAuth2 कुकी को हटाएं

मैं उबर लॉगिन पृष्ठ के लिए अपवादों की एक सूची बनाए रखना नहीं चाहता, क्योंकि उबर आसानी से अपना पृष्ठ बदल सकता है और मेरे ऐप में सही अपवाद नहीं होंगे। तो मैंने SFSafariViewController एक शॉट देने का फैसला किया।

मैं SFSafariViewController के साथ OAuth2 प्रक्रिया को पूरा करने में सक्षम हूं, समस्या यह है कि प्रमाणीकरण पूर्ण होने पर उबर से कुछ प्रकार की कुकी संग्रहित की जा रही है। अगर मैं एक अलग खाता प्रमाणित करना चाहता हूं और मैं SFSafariViewController फिर से लाता हूं, तो कुकी को पिछले प्रमाणीकरण से उठाया जाता है, और एक अलग खाते को प्रमाणीकृत करने का कोई मौका नहीं है। मुझे के माध्यम से कुकी को हटाकर UIWebView के साथ मिल गया, लेकिन मुझे SFSafariViewController से कुकी को हटाने का कोई तरीका नहीं दिख रहा है।

+0

क्या आपने इसे हल करने का प्रबंधन किया था? मुझे एक ही समस्या का सामना करना पड़ रहा है। – goldengil

+0

मुझे कुकी को हटाने का कोई समाधान नहीं मिला। मैंने मूल रूप से लॉग इन पर OAuth टोकन को रद्द करने के लिए अपना ऐप बदल दिया ताकि संग्रहित OAuth कुकी अब मान्य नहीं हो। – duncanc4

उत्तर

0

आईओएस 9 और उसके बाद सबसे अच्छा विकल्प के लिए, उदाहरण के लिए देखें WebKit Framework

जो एक WKWebsiteDataStore कि वेबव्यू द्वारा उपयोग की गई कुकी/संचय हटाएं किया जा सकता है प्रदान करता है में WKWebView वर्ग उपलब्ध उपयोग करने के लिए है: https://stackoverflow.com/a/31803708/313113 या https://stackoverflow.com/a/32491271/313113

डॉक्स के अनुसार: SFSafariViewController शेयरों कुकीज़ और सफारी के साथ अन्य वेबसाइट डेटा और क्योंकि यह आपके एप्लिकेशन की प्रक्रिया के बाहर रन (सुरक्षा कारणों से) आप संशोधित नहीं कर सकते यह आपके ऐप्लिकेशन को अंदर से राज्य है।

SFSafariViewController मेरे ऐप की प्रक्रिया के बाहर और व्यवस्था SFSafariViewController के राज्य संशोधित नहीं कर सकते मेरे अनुप्रयोग को सुरक्षित किया जाना है में चलता है: कोई है जो संपर्क एप्पल ग्राहक सहायता और निम्न जबाब मिल गया से https://stackoverflow.com/a/34136074/313113: इस उत्तर देखें। अन्य शब्दों में, मेरा ऐप SFSafariViewController द्वारा संग्रहीत प्रमाण-पत्र साफ़ नहीं कर सकता है।

+2

'WKWebView' काम नहीं करेगा क्योंकि मुझे उबर लॉगिन पृष्ठ द्वारा बनाए गए प्रत्येक HTTP अनुरोध के लिए एक डोमेन निर्दिष्ट करने की आवश्यकता होगी। यह देखते हुए कि पृष्ठ मेरे द्वारा बनाए रखा नहीं गया है और एटीएस अपवादों का उपयोग करके सबसे अधिक संभावना बदल जाएगी, आसानी से टूट जाएगा। यही कारण है कि मुझे 'SFSafariViewController' पर स्विच करना पड़ा। – duncanc4

0

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

extension AlertsTableViewController: SFSafariViewControllerDelegate { 

    public func safariViewController(_ controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) { 
     if controller == logoutSVC { 
      controller.dismiss(animated: false) 
     } 
    } 

} 

मैं संग्रहीत logoutSVC में SFSafariViewController तो मैं केवल इस कोड को अगर यह लॉगआउट SFSafariViewController है चलाते हैं। आपके मामले में ऐसा लगता है कि आपने ओएथ टोकन को रद्द करने के लिए अभी एक एपीआई कॉल किया है जो थोड़ा अच्छा है क्योंकि यह उपयोगकर्ता को बिल्कुल नहीं दिखाता है लेकिन यह उन उदाहरणों के लिए अच्छा है जहां आपके पास ऐसी पहुंच नहीं है। एक और बात, किसी कारण से मुझे कुछ कारणों से वास्तविक वर्तमान UIViewController के बजाय SFSafariViewController पर खारिज (एनिमेटेड: झूठी) विधि को कॉल करना पड़ा। मुझे यह समझने के लिए एक सेकंड लगा कि यह मेरे लिए क्यों काम नहीं कर रहा था।

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