2016-08-16 9 views
6

मैं (स्विफ्ट का उपयोग) है कि उपयोगकर्ता के लिए OAuth 2.0इंस्टाग्राम iOS पर के साथ एक उपयोगकर्ता प्रमाणित कर रहा है: निर्दिष्ट करने redirect_uri

का उपयोग कर अतीत में इंस्टाग्राम के माध्यम से प्रमाणित करने के लिए अनुमति देता है या किसी iOS एप्लिकेशन विकसित करने कर रहा हूँ, जैसा कि मैंने पा रहा था सब कुछ ठीक काम कर रहा था जैसे प्राधिकरण uRL निर्दिष्ट करने के: https://api.instagram.com/oauth/authorize/?client_id=xxx&redirect_uri=myiosapp://authorize&response_type=code

प्रमुख मुद्दा यहाँ redirect_uri myiosapp://authorize

मेरे समस्या यह है कि मैं अब के साथ इंस्टाग्राम जिससे यह असंभव बना एक कस्टम url योजना रजिस्टर करने में सक्षम हूँ है किया जा रहा है (?) रीडायरेक्ट एक्स को संभालने के लिए मेरे ऐप के माध्यम से lusively। मैं में कोई यूआरआई जोड़ने इस तरह करने की कोशिश करते हैं, तो "मान्य रीडायरेक्ट यूआरआई:" फ़ील्ड में, मैं निम्नलिखित त्रुटि मिलती है:

You must enter an absolute URI that starts with http:// or https://

विशेष रूप से एक iOS देशी आवेदन thrugh Instagram के साथ प्रमाणीकरण संभाल करने की सिफारिश की तरीका क्या है ?

+1

मुझे एहसास हुआ कि इसका उत्तर "अब संभव नहीं" के रूप में दिया गया हो सकता है, लेकिन अगर यह वास्तव में मामला है, तो मैं सोच रहा था कि कोई मुझे Instagram से किसी दस्तावेज़ या ब्लॉग पोस्ट में संदर्भित कर सकता है –

उत्तर

8

इसे समझने के बाद, मैंने सोचा कि मैं किसी भी समस्या के लिए आने वाले किसी भी व्यक्ति के लिए अपना समाधान पोस्ट करूंगा।

सबसे पहले, मैं बस स्वीकार करूंगा कि Instagram अब "सुरक्षा" -> "वैध पुनर्निर्देशन यूआरआई" फ़ील्ड में कस्टम स्कीमा की अनुमति नहीं देता है। इसके बजाय, मैं एक मनमानी लेकिन वैध यूआरआई दर्ज करूंगा जिसे मैं विशिष्ट रूप से पहचान सकता हूं। उदाहरण के लिए: http://www.mywebsite.com/instagram_auth_ios

अब, Instagram के साथ अधिकृत करने का प्रयास करते समय, मैं इसे यूआरआई रीडायरेक्ट के रूप में उपयोग करूंगा - भले ही उस यूआरआई में कोई वेबपृष्ठ वास्तव में मौजूद न हो। उदाहरण: https://api.instagram.com/oauth/authorize/?client_id=xxx&redirect_uri=http://www.mywebsite.com/instagram_auth_ios&response_type=code

अंत में, मैं UIWebViewDelegate के shouldStartLoadWithRequest विधि रीडायरेक्ट अनुरोध अवरोधन करने से पहले इसे चलाता इस्तेमाल करेंगे, और बदले अपने मूल कस्टम uri (कि जिस तरह से मैं कुछ भी फिर से लिखने की जरूरत नहीं है) कहते हैं। यहाँ मैं कैसे लिखा है कि विधि है:

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    guard let url = request.URL where url.host == "www.mywebsite.com" && url.path == "/instagram_auth_ios" else { return true } 
    guard let authUrl = NSURLComponents(URL: url, resolvingAgainstBaseURL: false) else { return true } 

    // Customize the scheme/host/path, etc. as desired for your app 
    authUrl.scheme = "myappschema" 
    authUrl.host = "instagram" 
    authUrl.path = "" 
    UIApplication.sharedApplication().openURL(authUrl.URL!) 

    return false 
} 

वहाँ shouldStartLoadWithRequest विधि में कि यह हमेशा एक त्रुटि "फ्रेम बाधित लोड" के साथ शिकायत में झूठी लौटने के साथ एक छोटा सा चेतावनी है। ऐसा कुछ भी प्रतिकूल रूप से प्रभावित नहीं होता है और (संभवतः) सुरक्षित रूप से अनदेखा किया जा सकता है।

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