2011-11-16 11 views
5

के लिए फोनगैप का उपयोग कर प्रदाताओं के साथ ओएयूथ के माध्यम से प्रमाणीकरण करना हम वर्तमान में फोनगैप का उपयोग करने वाले एप्लिकेशन के अंतिम छोर पर काम कर रहे हैं और ब्लैकबेरी बंदरगाह के साथ कुछ मुद्दों को मारा है।ब्लैकबेरी

अभी तक, हम ऑनलाइन उपलब्ध सामग्री की समीक्षा कर रहे हैं और इसे वास्तव में अंतिम जवाब नहीं मिल रहा है। लगता है कि ट्विटर, फेसबुक या फोरस्क्वेयर के लिए प्रमाणीकरण प्रक्रिया बनाने के लिए "दाएं" तरीके की तरह लगता है कि चाइल्डब्रोसर प्लगइन का उपयोग करना होगा, एक विंडो को तुरंत चालू करें और फिर प्रक्रिया को संभालने के लिए इसका उपयोग करें।

ठीक है, ब्लैकबेरी के लिए चाइल्डब्रोसर प्लगइन की कमी प्रतीत होती है। हम गीथूब पर कुछ निजी परियोजनाओं पर अब तक देख रहे हैं जो ऐसा लगता है कि वे उस क्षमता का निर्माण/उपयोग करते हैं, लेकिन हम सुनिश्चित नहीं हैं कि बनाई गई विंडो को कैसे नियंत्रित किया जाए।

अधिकांश (या सभी?) उन प्लग इन की यूआरएल को संभालने के लिए देशी ब्लैकबेरी ब्राउज़र लागू करने का उल्लेख है, लेकिन फिर कैसे, कॉलबैक पर काम टोकन हो और विंडो बंद के बाद से यह एक और प्रक्रिया है के लिए प्रबंधन की जाएगी।

उदाहरण के लिए, हम इस अवधारणा को कोड है:

function openWindow() { 
    if (typeof blackberry !== 'undefined') { 
    app_id = SOMETHING_HERE; 
    redirect = 'http://www.facebook.com/connect/login_success.html'; 
    url = 'https://graph.facebook.com/oauth/authorizeclient_id='+app_id+'&redirect_uri='+redirect+'&display=touch&scope=publish_stream'; 
    var args = new blackberry.invoke.BrowserArguments(url); 
    blackberry.invoke.invoke(blackberry.invoke.APP_BROWSER, args); 
      } 
     } 

कौन से URL खोलने के लिए काम करता है, लेकिन वह यह है। खिड़की पर एक हैंडल पाने और घटनाओं के लिए कुछ श्रोता इंजेक्षन करने का कोई तरीका है? हमारा सही दृष्टिकोण क्या होना चाहिए?

धन्यवाद!

उत्तर

3

मैं फोनगैप उपयोगकर्ता नहीं हूं, लेकिन हमें एक बहुत ही समान परिदृश्य को संभालना पड़ा - मूल ऐप ओएथ प्रवाह को संकेत देने के लिए मोबाइल ब्राउज़र को आमंत्रित करता है और फिर एबेटिव ऐप में कॉलबैक को संभालने में सक्षम होता है।

ब्राउज़रकंटेंटप्रोवाइडर रजिस्ट्री API का उपयोग करके ब्लैकबेरी पर यह संभव है। जब भी कोई विशेष एमआईएम प्रकार ब्राउज़र पर वापस आ जाता है तो आप अपने ऐप को आमंत्रित करने के लिए पंजीकृत कर सकते हैं। जटिल लगता है लेकिन यह काफी सरल है जब सभी टुकड़े खेल रहे हैं।

  1. घरेलू एप्लिकेशन oAuth पृष्ठ पर ब्राउज़र का आह्वान -

    यहाँ किसी न किसी तरह प्रवाह है। यह हिस्सा आसान है और ऐसा लगता है कि आपको यह हिस्सा मिला है।

  2. ओएथ रीडायरेक्ट को उस URL पर जाने की आवश्यकता है जिसे आप नियंत्रित कर सकते हैं। कुछ http://mycompany.com/oAuthRedirectHandler.asp की तरह।

    <html><body> 
    <h1>Redirect page</h1> 
    If you are not re-directed, please open the application manually. 
    <% strUA = Request.ServerVariables("HTTP_USER_AGENT") 
    if (InStr(strUA, "BlackBerry")) then  
         Response.Write("Opening appplication on BlackBerry") 
         Response.ContentType="application/x-MyCustomApp" 
    elseif (InStr(strUA, "Android")) then 
         Response.Write("Opening appplication on Android")  
         Response.Redirect("MyCustomApp://mycompany.com") 
    end if %> 
    </body> </html> 
    
  3. अपने ब्लैकबेरी में -

  4. oAuthRedirectorHandler.asp (हम क्लासिक एएसपी चुना है, लेकिन यह PHP में किया जा सकता है या किसी भी भाषा, आप भी नीचे एंड्रॉयड ब्लॉक अनदेखा कर सकते हैं) इस तरह सरल कोड है कोड आप इस तरह एक नया BrowserContentProvider चाहते हैं -

    - अब

    final class CustomBrowserProvider extends BrowserContentProvider{ 
        String[] ACCEPT = new String[]{"application/x-MyCustomApp}; 
        String appName; 
    
        CustomBrowserProvider(String appName){ 
        this.appName = ApplicationDescriptor.currentApplicationDescriptor().getModuleName(); 
        //cache this appName from the constructor in the invocation code below. 
        } 
    
        public String[] getSupportedMimeTypes() { return ACCEPT;} 
        public String[] getAccept(RenderingOptions context){return ACCEPT;} 
    
        public BrowserContent getBrowserContent(BrowserContentProviderContext context) throws RenderingException { 
        //this is where the callback happens 
        //this is happening in a separate process, raise your main app here using the appName that got passed in 
        //I dont have a sanitized ready to go sample to post here on how to do this, but not too complicated 
        //as a hint use the ApplicationDescriptor and CodeModuleManager classes 
        return null; 
        } 
    } 
    
  5. , आपके आवेदन प्रारंभ में, इस तरह इस नए BrowserPlugin रजिस्टर

    BrowserContentProviderRegistry converterRegistry = BrowserContentProviderRegistry.getInstance(); 
    converterRegistry.register(new CustomBrowserProvider());    
    

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

+0

वाह, यह वास्तव में दिलचस्प लगता है। आपके इनपुट के लिए बहुत बहुत धन्यवाद! जो मैंने पाया उसे वापस आज़माएं और रिपोर्ट करें। – Yaraher