2014-05-02 86 views
6

經過大量的搜索與桌面應用程序的facebook登錄搜索後,我做了我的自我使用DJ本機搖擺瀏覽器。用Java通過Facebook登錄從桌面刪除權限框

但我仍然有一個問題,我需要改變一些東西。

我正在使用啓用瀏覽器Swing的Facebook登錄。當我登錄Facebook時,我得到一個權限框,它要求用戶許可。但我不想展示那個盒子。是否有可能在Facebook中授予權限自動。

我只想刪除這個警告對話框,並想授予權限自動,所以我怎麼能做到這一點?

任何建議是受歡迎的。

回答

1

嗯,我解決它通過只刪除了一些參數,比如我做的

public static String firstRequest = "https://graph.facebook.com/oauth/authorize?" 
      + "client_id=" 
      + API_KEY 
      + "&redirect_uri=http://www.facebook.com/connect/login_success.html&" 
      + "scope=email,offline_access"; 

URL它只是要求只有一次,因爲我想:)

以及這裏同樣的例子。

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package com.SimpleWebBrowserExample; 

import chrriis.dj.nativeswing.swtimpl.NativeInterface; 
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser; 
import chrriis.dj.nativeswing.swtimpl.components.WebBrowserAdapter; 
import chrriis.dj.nativeswing.swtimpl.components.WebBrowserNavigationEvent; 
import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.IOException; 
import java.io.StringReader; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 
import javax.swing.text.html.HTMLEditorKit; 
import javax.swing.text.html.parser.ParserDelegator; 

/** 
* 
* @author kishan 
*/ 
public class FacBookApiLogin extends javax.swing.JFrame { 

    public static String API_KEY = "*****************"; 
    public static String SECRET = "********************"; 

    public static String firstRequest = "https://graph.facebook.com/oauth/authorize?" 
      + "client_id=" 
      + API_KEY 
      + "&redirect_uri=http://www.facebook.com/connect/login_success.html&" 
      + "scope=email,offline_access"; 

    // 
    public static String secondRequest = "https://graph.facebook.com/oauth/access_token?" 
      + "client_id=" 
      + API_KEY 
      + "&redirect_uri=http://www.facebook.com/connect/login_success.html&" 
      + "client_secret=" + SECRET + "&code="; 

    public static String access_token = ""; 
    public static boolean firstRequestDone = false; 
    public static boolean secondRequestDone = false; 
    static FacBookApiLogin apiLogin; 
    static SimpleFrame browserExample; 

    /** 
    * Creates new form FacBookApiLogin 
    */ 
    public FacBookApiLogin() { 
     initComponents(); 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     jPanel1 = new javax.swing.JPanel(); 
     LoginFacebook = new javax.swing.JButton(); 
     AutoLoginButton = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     LoginFacebook.setText("Login Facebook"); 
     LoginFacebook.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       LoginFacebookActionPerformed(evt); 
      } 
     }); 

     AutoLoginButton.setText("Auto Login"); 
     AutoLoginButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       AutoLoginButtonActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
     jPanel1.setLayout(jPanel1Layout); 
     jPanel1Layout.setHorizontalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(AutoLoginButton, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addComponent(LoginFacebook) 
       .addContainerGap(109, Short.MAX_VALUE)) 
     ); 
     jPanel1Layout.setVerticalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() 
       .addGap(0, 247, Short.MAX_VALUE) 
       .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(LoginFacebook) 
        .addComponent(AutoLoginButton))) 
     ); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addContainerGap()) 
     ); 

     pack(); 
    }// </editor-fold>       

    private void LoginFacebookActionPerformed(java.awt.event.ActionEvent evt) {            
     // TODO add your handling code here: 
     NativeInterface.open(); 
     final JFrame authFrame = new JFrame(); 
     // Create the JWebBrowser and add the WebBrowserAdapter 
     JPanel webBrowserPanel = new JPanel(new BorderLayout()); 
     final JWebBrowser webBrowser = new JWebBrowser(); 
     webBrowser.navigate(firstRequest); 
     webBrowser.addWebBrowserListener(new WebBrowserAdapter() { 
      @Override 
      public void locationChanged(WebBrowserNavigationEvent e) { 
       super.locationChanged(e); 
       // Check if first request was not done 
       if (!firstRequestDone) { 
        // Check if you left the location and were redirected to the next 
        // location 
        if (e.getNewResourceLocation().contains("http://www.facebook.com/connect/login_success.html?code=")) { 
         // If it successfully redirects you, get the verification code 
         // and go for a second request 
         String[] splits = e.getNewResourceLocation().split("="); 
         String stage2temp = secondRequest + splits[1]; 
         System.err.println("URL location" + stage2temp); 
         webBrowser.navigate(stage2temp); 
         System.out.println("This is what we looking for" + splits[2]); 

         firstRequestDone = true; 
         if (firstRequestDone == true) { 
          //apiLogin.dispose(); 
          //browserExample = new SimpleFrame(); 
          //browserExample.setVisible(true); 
         } 

        } 
       } else { 
        // If secondRequest is not done yet, you perform this and get the 
        // access_token 
        if (!secondRequestDone) { 
         System.out.println(webBrowser.getHTMLContent()); 
         // Create reader with the html content 
         StringReader readerSTR = new StringReader(webBrowser.getHTMLContent()); 
         // Create a callback for html parser 
         HTMLEditorKit.ParserCallback callback 
           = new HTMLEditorKit.ParserCallback() { 
            public void handleText(char[] data, int pos) { 
             System.out.println(data); 
             // because there is only one line with the access_token 
             // in the html content you can parse it. 
             String string = new String(data); 

             System.out.println("Main string : " + data.toString()); 
             String[] temp1 = string.split("&"); 

             String[] temp2 = temp1[0].split("="); 

             access_token = temp2[1]; 
             System.out.println("accesstoken is here" + access_token); 

             System.out.println("length of token" + temp2.length); 
             System.err.println("Temp 0" + temp2[0]); 
            } 
           }; 
         try { 
          // Call the parse method 
          new ParserDelegator().parse(readerSTR, callback, false); 

         } catch (IOException e1) { 
          e1.printStackTrace(); 
         } 
         // After everything is done, you can dispose the jframe 
         authFrame.dispose(); 

        } 
       } 

      } 
     }); 
     webBrowserPanel.add(webBrowser, BorderLayout.CENTER); 
     authFrame.add(webBrowserPanel); 
     authFrame.setSize(400, 500); 
     authFrame.setVisible(true); 

    }            

    private void AutoLoginButtonActionPerformed(java.awt.event.ActionEvent evt) {             
     // TODO add your handling code here: 
     NativeInterface.open(); 
     final JFrame loginFrame = new JFrame(); 
     JPanel webBrowserPanel = new JPanel(new BorderLayout()); 
     // this is the JWebBrowser i mentioned earlier 
     final JWebBrowser webBrowser = new JWebBrowser(); 
     // You can set this fields to false, or even let them activated 
     webBrowser.setMenuBarVisible(false); 
     webBrowser.setButtonBarVisible(false); 
     webBrowser.setLocationBarVisible(false); 
     final String fb_url = "http://www.facebook.com/"; 
     webBrowser.navigate(fb_url); 

     // Here we add to our JWebBrowser an Adapter and override the 
     // locationChanging() method. Here we can check, if we are 
     // changing the location 
     // in our case the String fb_url, then this JWebBrowser can be 
     // disposed. 
     // The Timer is set for 2 seconds, so we can still see if the 
     // login was successfull or not. 
     webBrowser.addWebBrowserListener(new WebBrowserAdapter() { 

      @Override 
      public void locationChanging(WebBrowserNavigationEvent e) { 
       super.locationChanging(e); 

       System.out.println(e.getNewResourceLocation()); 

       if (!e.getNewResourceLocation().equals(fb_url)) { 
        Timer timer = new Timer(2000, new ActionListener() { 
         public void actionPerformed(ActionEvent arg0) { 
          loginFrame.dispose(); 
         } 
        }); 
        timer.start(); 
       } 
      } 
     }); 

     webBrowserPanel.add(webBrowser, BorderLayout.CENTER); 
     loginFrame.add(webBrowserPanel); 
     loginFrame.setSize(400, 500); 
     loginFrame.setVisible(true); 
    }            

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 

       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(FacBookApiLogin.class 
        .getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(FacBookApiLogin.class 
        .getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(FacBookApiLogin.class 
        .getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(FacBookApiLogin.class 
        .getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       apiLogin = new FacBookApiLogin(); 
       apiLogin.setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JButton AutoLoginButton; 
    private javax.swing.JButton LoginFacebook; 
    private javax.swing.JPanel jPanel1; 
    // End of variables declaration     
} 
+0

offline_access權限早已棄用... – Tobi