2011-02-03 25 views
5

Tôi cần kết nối và xác thực người dùng từ ứng dụng java trên bàn, tôi đã thử dùng facebook-java-api bằng facebookjsonclient và facebookRestclient nhưng không thể lấy khóa phiên. là có bất kỳ thay đổi trong facebook do đó chúng tôi r không thể kết nối, hoặc là có asi java tốt nhất khác hoặc ví dụ làm thế nào để kết nối. mã của tôi làLàm thế nào để kết nối facebook với ứng dụng java desktop

private static void getUserID(String email, String password){ 
     String session = null; 
     try { 

      HttpClient http = new HttpClient(); 

      http.getHostConfiguration().setHost("www.facebook.com"); 
      String api_key = "key"; 
      String secret = "sec"; 
      FacebookJaxbRestClient client = new FacebookJaxbRestClient(api_key, secret); 
       System.out.println("====>"+client.isDesktop()); 

      String token = client.auth_createToken(); 
      System.out.println(" :::::::"+token); 
      System.out.println(" :::::::::: "+token); 
      PostMethod post = new PostMethod("/login.php?"); 

      post.addParameter("api_key", api_key); 


      post.addParameter("email", email); 
      post.addParameter("pass", password); 


      int postStatus = http.executeMethod(post); 
       System.out.println("url : " + post.getURI()); 
      System.out.println("Response : " + postStatus); 
      for (Header h : post.getResponseHeaders()) { 
       System.out.println(h); 
      } 
      session = client.auth_getSession(token); // Here I am getting error 
      System.out.println("Session string: " + session); 
      long userid = client.users_getLoggedInUser(); 
      //System.out.println("User Id is : " + userid);*/ 
     } catch (FacebookException fe) { 

      fe.printStackTrace(); 

     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
+0

Để bắt đầu, hãy chuyển đến http://restfb.com/ và OAuth 2.0. –

+0

Vấn đề Richard thậm chí là với OAuth 2.0 Tôi đã không tìm thấy cách nào từ ứng dụng máy tính để bàn Java để nhận mã thông báo OAuth 2.0. Vì vậy, nhận xét của bạn không thực sự giúp trả lời câu hỏi về cách bạn nhận được access_token từ java trên máy tính để bàn? – haskovec

+0

Hi pradeep..Có thể bạn hãy đăng mã đầy đủ cho câu hỏi trên.Y vì trong 1 tuần qua tôi đang tìm kiếm thông tin đăng nhập facebook, tôi vẫn không thể nhận được điều đó ... Thật tuyệt vời nếu u đăng toàn bộ mã. –

Trả lời

0

Trước hết, bạn cần nhận được access_token và sau đó tôi khuyên bạn nên sử dụng thư viện restfb. Để có mã thông báo tôi sẽ khuyên bạn nên đọc này: https://developers.facebook.com/docs/authentication/

Một bản tóm tắt đơn giản:

  1. HTTP GET: https://www.facebook.com/dialog/oauth? client_id = YOUR_APP_ID & redirect_uri = your_URL & phạm vi = email, read_stream & response_type = thẻ
  2. Sử dụng mã bạn nhận được từ trên và sau đó, làm: https://graph.facebook.com/oauth/access_token? client_id = YOUR_APP_ID & redirect_uri = your_URL & client_secret = YOUR_APP_SECRET & code = THE_CODE_FROM_ABOVE
  3. chính xác các access_token và sử dụng FacebookClient từ restfb để làm cho yêu cầu API.
+5

Anh ta đang cố gắng thực hiện điều này từ một ứng dụng Java trên máy tính không ngụ ý rằng anh ta có một URL để chuyển hướng đến (nếu nó là một ứng dụng java), về cơ bản bạn không trả lời bất cứ điều gì về cách lấy mã thông báo từ một máy tính để bàn ứng dụng, bạn chỉ cần nói để có được nó. – haskovec

0

AFAIK, hiện không có cách nào để kết nối với facebook từ "ứng dụng dành cho máy tính để bàn" theo cách thẳng tiến. Bạn có thể sử dụng thư viện máy khách http apache để bắt chước trình duyệt và hoàn thành nó. Nhưng nó không thể được bảo đảm để làm việc luôn luôn. Tôi cũng đã cố gắng để làm điều đó cho đôi khi với một số thư viện, nhưng họ có vẻ bị hỏng.

0

Tôi đã thực hiện một số thành công. Cách tiếp cận của tôi là sử dụng trình duyệt được nhúng để hiển thị xác thực cho người dùng. Facebook xử lý xác thực và chuyển hướng bạn đến trang "đăng nhập thành công" với mã thông báo truy cập và thời gian hết hạn được gắn vào URL dưới dạng dữ liệu GET. Hầu hết mã bên dưới là để tạo và hiển thị trình duyệt bằng cách sử dụng thư viện t.

private static final String APP_ID = "###########"; 
private static final String PERMISSIONS = 
     "COMMA SEPARATED LIST OF REQUESTED PERMISSIONS"; 
private String access_token; 
private long expirationTimeMillis; 
/** 
* Implements facebook's authentication flow to obtain an access token. This 
* method displays an embedded browser and defers to facebook to obtain the 
* user's credentials. 
* According to facebook, the request as we make it here should return a 
* token that is valid for 60 days. That means this method should be called 
* once every sixty days. 
*/ 
private void authenticationFlow() { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    final Browser browser; 
    GridLayout gridLayout = new GridLayout(); 
    gridLayout.numColumns = 3; 
    shell.setLayout(gridLayout); 

    try { 
     browser = new Browser(shell, SWT.NONE); 
    } catch (SWTError e){ 
     System.err.println("Could not instantiate Browser: " + e.getMessage()); 
     display.dispose(); 
     display = null; 
     return; 
    } 
    browser.setJavascriptEnabled(true); 

    GridData data = new GridData(); 
    data.horizontalAlignment = GridData.FILL; 
    data.verticalAlignment = GridData.FILL; 
    data.horizontalSpan = 3; 
    data.grabExcessHorizontalSpace = true; 
    data.grabExcessVerticalSpace = true; 
    browser.setLayoutData(data); 

    final ProgressBar progressBar = new ProgressBar(shell, SWT.MOZILLA); 
    data = new GridData(); 
    data.horizontalAlignment = GridData.END; 
    progressBar.setLayoutData(data); 

    /* Event Handling */ 
    browser.addProgressListener(new ProgressListener(){ 
     public void changed(ProgressEvent event){ 
      if(event.total == 0) return; 
      int ratio = event.current * 100/event.total; 
      progressBar.setSelection(ratio); 
     } 
     public void completed(ProgressEvent event) { 
      progressBar.setSelection(0); 
     } 
    }); 
    browser.addLocationListener(new LocationListener(){ 
     public void changed(LocationEvent e){ 
      // Grab the token if the browser has been redirected to 
      // the login_success page 
      String s = e.location; 
      String token_identifier = "access_token="; 
      if(s.contains("https://www.facebook.com/connect/login_success.html#access_token=")){ 
       access_token = s.substring(s.lastIndexOf(token_identifier)+token_identifier.length(),s.lastIndexOf('&')); 
       String expires_in = s.substring(s.lastIndexOf('=')+1); 
       expirationTimeMillis = System.currentTimeMillis() + (Integer.parseInt(expires_in) * 1000); 
      } 
     } 
     public void changing(LocationEvent e){} 
    }); 

    if(display != null){ 
     shell.open(); 
     browser.setUrl("https://www.facebook.com/dialog/oauth?" 
       + "client_id=" + APP_ID 
       + "&redirect_uri=https://www.facebook.com/connect/login_success.html" 
       + "&scope=" + PERMISSIONS 
       + "&response_type=token"); 
     while(!shell.isDisposed()) { 
      if(!display.readAndDispatch()){ 
       display.sleep(); 
       if(access_token != null && !access_token.isEmpty()){ 
        try{ Thread.sleep(3000);}catch(Exception e){} 
        shell.dispose(); 
       } 
      } 
     } 
     display.dispose(); 
    } 
} 

Vì vậy, tất cả những gì bạn phải làm là tìm hiểu xem bạn sẽ cần những quyền nào để ứng dụng của mình hoạt động. Xin lưu ý rằng quyền "hộp thoại thứ hai" có thể được người dùng chọn để không đảm bảo rằng bạn thực sự sẽ có các quyền này.

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