Аутентификация через oAUTH с провайдерами, использующими Phonegap для Blackberry - PullRequest
5 голосов
/ 16 ноября 2011

В настоящее время мы работаем над последними штрихами приложения, которое использует PhoneGap, и столкнулись с некоторыми проблемами с портом Blackberry.

До сих пор мы просматривали контент, доступный в Интернете, и не можем найти окончательный ответ на этот вопрос.Похоже, что «правильный» способ создания и проверки подлинности для Twitter, Facebook или Foursquare состоит в том, чтобы использовать плагин ChildBrowser, создать экземпляр окна и затем использовать его для управления процессом.

похоже, отсутствует плагин ChildBrowser для Blackberry.До сих пор мы рассматривали пару частных проектов на Github, которые выглядят так, как будто они создают / используют эту возможность, но мы не уверены, как управлять созданным окном.

Большинство (или все?) Изэти плагины относятся к вызову нативного браузера Blackberry для обработки URL-адресов, но тогда как будет работать с обратными вызовами, получать токены и закрывать окна, поскольку это другой процесс.

Например, у нас есть этокод концепции:

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, но это все.Есть ли способ получить дескриптор окна и внедрить слушателя в события?Каким должен быть наш правильный подход?

Спасибо!

1 Ответ

3 голосов
/ 03 декабря 2011

Я не пользователь PhoneGap, но нам пришлось работать с очень похожим сценарием - нативное приложение вызывает мобильный браузер, чтобы запросить поток oAuth, а затем иметь возможность обработать обратный вызов в собственное приложение.

Это возможно на BlackBerry с помощью API BrowserContentProviderRegistry. Вы можете зарегистрировать приложение, которое будет вызываться всякий раз, когда в браузер возвращается определенный тип 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. В вашем коде BlackBerry вам нужен новый 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. Теперь, при инициализации вашего приложения, зарегистрируйте этот новый плагин Browser следующим образом -

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

Надеюсь, это поможет. Это хорошо сработало для нас. Единственный недостаток, который у нас был здесь, заключается в том, что когда пользователь возвращается в приложение браузера, у него остается пустая страница, и нет хорошего способа закрыть его в BB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...