2011-11-16 16 views
5

Attualmente stiamo lavorando ai ritocchi finali di un'applicazione che utilizza PhoneGap e che ha riscontrato alcuni problemi con la porta Blackberry.Autenticazione tramite oAUTH con provider che utilizzano Phonegap per Blackberry

Finora, abbiamo esaminato il contenuto disponibile online e non riesco a trovare una risposta davvero definitiva a questo. Sembra che il modo "giusto" per fare e oauth il processo di autenticazione per Twitter, Facebook o Foursquare sia quello di usare il plugin ChildBrowser, creare un'istanza di una finestra e usarla per gestire il processo.

Giustamente, sembra esserci la mancanza di un plug-in ChildBrowser per Blackberry. Abbiamo esaminato fino ad ora un paio di progetti privati ​​su Github che sembrano costruire/utilizzare questa funzionalità, ma non siamo sicuri su come controllare la finestra creata.

La maggior parte (o tutti?) Di tali plug-in si riferiscono al richiamo del browser nativo Blackberry per gestire gli URL, ma come sarebbe possibile gestire i callback, ottenere i token e chiudere le finestre poiché si tratta di un altro processo.

Ad esempio, abbiamo questo codice concetto:

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); 
      } 
     } 

che lavora per l'apertura del URL, ma questo è tutto. C'è un modo per ottenere un handle sulla finestra e iniettare un ascoltatore per gli eventi? Quale dovrebbe essere il nostro approccio corretto?

Grazie!

risposta

3

Non sono un utente PhoneGap, ma abbiamo dovuto gestire uno scenario molto simile: l'app nativa richiama il browser mobile per richiedere il flusso di oAuth e quindi essere in grado di gestire una richiamata all'app.

Questo è possibile sul BlackBerry utilizzando l'API BrowserContentProviderRegistry. Puoi registrare la tua app per essere richiamata ogni volta che un particolare tipo MIME viene restituito al browser. Sembra complicato ma è abbastanza semplice quando tutti i pezzi sono in gioco.

Ecco il flusso di massima -

  1. nativa App invoca browser alla pagina di OAuth. Questa parte è facile e sembra che tu abbia ottenuto questa parte.
  2. Il reindirizzamento oAuth deve passare a un URL che è possibile controllare. Qualcosa come http://mycompany.com/oAuthRedirectHandler.asp.
  3. L'oAuthRedirectorHandler.asp ha semplice codice come questo (abbiamo scelto ASP classico, ma questo può essere fatto in PHP o qualsiasi altro linguaggio, si può anche ignorare il blocco di Android sotto) -

    <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. In tuo BlackBerry codice che si desidera un nuovo BrowserContentProvider come questo -

    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. Ora, nella vostra inizializzazione dell'applicazione, registrare questo nuovo BrowserPlugin come questo -

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

Spero che questo aiuti. Questo ha funzionato abbastanza bene per noi. L'unico svantaggio che abbiamo avuto qui è che quando l'utente ritorna all'app browser, rimane una pagina vuota e non c'è un buon modo per chiuderla nel BB.

+0

Wow, questo sembra davvero interessante. Grazie mille per il tuo contributo! Proverò a riferire ciò che ho scoperto. – Yaraher

Problemi correlati