这不是您特定问题的解决方案。我在 cmets 中提到我正在使用接口。所以我在这里发帖是因为评论区太多了。它也不是 COMPLETE 解决方案,您需要处理流量和过期令牌,这只是为了向您展示我是如何做到这一点的逻辑。
对于我的界面,我打开一个浏览器字段到 Oauth url:
https://www.facebook.com/dialog/oauth?client_id=<APP_ID>&response_type=token&redirect_uri=http://www.facebook.com/connect/login_success.html&scope=publish_actions
我在这个浏览器中添加了一个监听器来监听登录后的重定向。获得访问令牌后,应将其持久化并关闭浏览器字段。
private class OAuthScreen extends MainScreen
{
BrowserField browser_field;
LoadingDialog loading_dialog;
public OAuthScreen(final Command task)
{
super(VERTICAL_SCROLL | HORIZONTAL_SCROLL);
BrowserFieldConfig browserConfig = new BrowserFieldConfig();
browserConfig.setProperty(BrowserFieldConfig.VIEWPORT_WIDTH, new Integer(Display.getWidth()));
browser_field = new BrowserField(browserConfig);
browser_field.addListener(new BrowserFieldListener()
{
public void documentCreated(BrowserField browserField, ScriptEngine scriptEngine, Document document) throws Exception
{
int index = browserField.getDocumentUrl().indexOf("#access_token=");
if (index == -1)
{
super.documentCreated(browserField, scriptEngine, document);
}
else
{
access_token = browserField.getDocumentUrl().substring(index + "#access_token=".length(), browserField.getDocumentUrl().indexOf("&"));
PersistentObject store = PersistentStore.getPersistentObject(STORE_KEY);
FacebookTokens store_tokens = new FacebookTokens();
store_tokens.access_token = access_token;
store.setContents(store_tokens);
store.commit();
if (task != null) task.execute();
OAuthScreen.this.close();
}
}
public void documentLoaded(BrowserField browserField, Document document) throws Exception
{
super.documentLoaded(browserField, document);
loading_dialog.close();
}
});
// whatever loading dialog you want, this sometimes takes a while to open
loading_dialog = LoadingDialog.push(loading_field);
add(browser_field);
browser_field.requestContent("https://www.facebook.com/dialog/oauth?client_id="+APP_ID+"&response_type=token&redirect_uri=http://www.facebook.com/connect/login_success.html&scope=publish_actions");
}
}
回调任务仅用于登录后直接调用。
现在只需根据需要执行 API 调用。 API方法在这里https://developers.facebook.com/docs/graph-api/reference/v2.0/
需要访问令牌的方法,应将其附加到 url,例如,https://graph.facebook.com/me/feed?access_token=" + access_token
请注意,清除您的访问令牌不会清除存储在浏览器字段中的令牌。并且将意味着您下次无法登录(因为浏览器仍处于登录状态)。
因此,如果您想注销,您需要在清除本地访问令牌之前在浏览器字段中打开此链接"https://www.facebook.com/logout.php?next=http://www.facebook.com/connect/login_success.html&access_token=" + access_token
清除浏览器的cookies就足够了,但我还没有找到方法。