2011-11-16 31 views
5

Chúng tôi hiện đang làm việc trên các ứng dụng hoàn thiện của ứng dụng sử dụng Phonegap và đã gặp phải một số sự cố với cổng Blackberry.Xác thực thông qua OAUTH với các nhà cung cấp sử dụng Phonegap cho Blackberry

Cho đến nay, chúng tôi đã xem xét nội dung có sẵn trực tuyến và không thể tìm thấy câu trả lời thực sự về đêm này. Có vẻ như cách "đúng" để thực hiện và quy trình xác thực oauth cho cả Twitter, Facebook hoặc Foursquare sẽ sử dụng plugin ChildBrowser, khởi tạo một cửa sổ và sau đó sử dụng nó để xử lý quy trình.

Đúng vậy, có vẻ như thiếu trình cắm ChildBrowser cho Blackberry. Chúng tôi đã tìm kiếm cho đến nay một vài dự án riêng trên Github trông giống như họ xây dựng/sử dụng khả năng đó nhưng chúng tôi không chắc chắn về cách kiểm soát cửa sổ được tạo ra.

Hầu hết (hoặc tất cả?) Của các plugin đó đề cập đến trình duyệt Blackberry gốc để xử lý URL, nhưng sau đó sẽ quản lý hoạt động trên callbacks, nhận mã thông báo và đóng cửa sổ vì đó là một quá trình khác.

Ví dụ, chúng ta có mã khái niệm này:

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

Những công trình mở URL, nhưng đó là nó. Có cách nào để có được một xử lý trên cửa sổ và tiêm một số người nghe cho các sự kiện? Phương pháp tiếp cận chính xác của chúng ta nên là gì?

Cảm ơn!

Trả lời

3

Tôi không phải là người dùng PhoneGap, nhưng chúng tôi phải xử lý một kịch bản rất giống nhau - ứng dụng gốc gọi trình duyệt trên thiết bị di động để nhắc luồng oAuth và sau đó có thể xử lý gọi lại cho ứng dụng.

Điều này có thể thực hiện trên BlackBerry bằng API BrowserContentProviderRegistry. Bạn có thể đăng ký ứng dụng của mình để được gọi bất cứ khi nào một loại MIME cụ thể được trả lại cho trình duyệt. Âm thanh phức tạp nhưng khá đơn giản khi tất cả các phần đều được phát.

Đây là thô flow -

  1. ứng dụng Native gọi trình duyệt đến trang OAuth. Đây là một phần dễ dàng và có vẻ như bạn có phần này.
  2. Chuyển hướng oAuth cần phải chuyển đến URL mà bạn có thể kiểm soát. Một cái gì đó như http://mycompany.com/oAuthRedirectHandler.asp.
  3. Các oAuthRedirectorHandler.asp có mã đơn giản như thế này (chúng tôi đã chọn ASP cổ điển nhưng điều này có thể được thực hiện trong PHP hoặc bất kỳ ngôn ngữ, bạn cũng có thể bỏ qua khối Android dưới đây) -

    <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. Trong BlackBerry của bạn mã bạn muốn có một BrowserContentProvider mới như thế này -

    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. Bây giờ, trong khởi tạo ứng dụng của bạn, đăng ký BrowserPlugin mới này như thế này -

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

Hy vọng điều này sẽ hữu ích. Điều này đã làm việc khá tốt cho chúng tôi. Một nhược điểm mà chúng tôi đã có ở đây là khi người dùng quay trở lại ứng dụng trình duyệt, họ bị bỏ lại với một trang trống và không có cách nào tốt để đóng nó trong BB.

+0

Ồ, điều này có vẻ thực sự thú vị. Cảm ơn rất nhiều về đầu vào của bạn! Sẽ cố gắng và báo cáo lại những gì tôi phát hiện ra. – Yaraher

Các vấn đề liên quan