2011-11-16 110 views
5

目前,我們正在研究使用Phonegap的應用程序的最後一步,並且已經觸及黑莓端口的一些問題。通過oAUTH使用Phonegap for Blackberry進行身份驗證

到目前爲止,我們一直在審查網上提供的內容,無法找到真正壓軸的答案。似乎Twitter,Facebook或Foursquare的「正確」方法使oauth認證過程可以使用ChildBrowser插件,實例化一個窗口,然後用它來處理該過程。

說得對,黑莓似乎缺少一個ChildBrowser插件。我們一直在尋找Github上的幾個私人項目,看起來他們構建/使用該功能,但我們不確定如何控制創建的窗口。

這些插件的大部分(或全部?)是指調用原生Blackberry瀏覽器來處理URLS,但是如何設法處理回調,獲取令牌並關閉窗口,因爲這是另一個過程。

例如,我們有這個概念代碼:

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

我不是PhoneGap的用戶,但我們卻必須處理非常類似的情景 - 本機應用程序調用手機瀏覽器提示的OAuth流,然後能夠處理回調到aative應用。

這有可能在使用BrowserContentProviderRegistry API黑莓。只要將特定的MIME類型返回給瀏覽器,就可以註冊您的應用程序。聽起來很複雜,但在所有作品中都相當簡單。

這裏是粗糙的流量 -

  1. 本機應用程序調用瀏覽器對網頁的OAuth。這部分很容易,看起來像你有這個部分。
  2. 的OAuth的重定向需要去,你可以控制的URL。類似於http://mycompany.com/oAuthRedirectHandler.asp
  3. 的oAuthRedirectorHandler.asp簡單像這樣的代碼(我們選擇了傳統的ASP,但這可以用PHP來完成或任何語言,你也可以忽略以下的Android塊) -

    <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> 
    
  4. 在黑莓手機代碼你想要一個新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());    
    

希望這會有所幫助。這工作很適合我們。一個缺點,我們在這裏度過的是,當用戶返回到瀏覽應用程序,他們留下的空白頁,並沒有關閉,在BB沒有什麼好辦法。

+0

哇,這看起來很有趣。非常感謝您的意見!將嘗試並報告我發現的內容。 – Yaraher

相關問題