Java-Facebook SDK注销功能(Marketing API)

时间:2019-04-30 15:05:35

标签: java facebook facebook-graph-api

因此,我编写了一个程序,该程序创建一个弹出窗口,该弹出窗口定向到Facebook登录页面,用户可以在其中登录,以便可以获取access_token。问题是,即使过了几天,用户仍保持登录状态。

以下是创建登录窗口的代码:

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);
    Browser.clearSessions();

    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=")){
                accessToken = s.substring(s.lastIndexOf(token_identifier)+token_identifier.length(),s.indexOf('&'));
                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();
        System.out.println("hello");
        browser.setUrl("https://www.facebook.com/v3.2/dialog/oauth?"
                + "client_id=" + appID
                + "&redirect_uri=https://www.facebook.com/connect/login_success.html"
                + "&scope=" + PERMISSIONS
                + "&response_type=token");
        while(!shell.isDisposed()) {
            if(!display.readAndDispatch()){
                display.sleep();
                if(accessToken != null && !accessToken.isEmpty()){
                    try{ Thread.sleep(3000);}catch(Exception e){}
                    shell.dispose();
                }
            }
        }
        display.dispose();
    }
}

这很好用。但是,我正在努力寻找一种注销用户的方法。经过长时间的谷歌搜索后,我能找到的只是2010年以来使用变通方法(例如使用移动页)的帖子。

但是我怀疑在2019年没有干净的解决方案。

有人知道吗?

0 个答案:

没有答案