我正在我的一个应用程序中实现FB。我正在使用jar 0.8.25。它适用于从5到7.1的所有模拟器。对于设备仅适用于OS 5和6但不适用于设备7和7.1。对于OS 7,登录成功后它仍保留在FB页面上,它不会重定向回来。当我按下后退按钮时,我遇到错误,无法刷新访问令牌再次尝试按钮。
在控制台上进行分析时,它永远不会为OS 7找到访问令牌的单一时间。而对于5和6,它可以完美地工作。
请告诉可能导致问题的原因。
谢谢,
答案 0 :(得分:0)
这不是您特定问题的解决方案。我在评论中提到我正在使用界面。所以我在这里发表评论部分太多了。它也不是COMPLETE解决方案,你需要处理流程和过期的令牌,这只是为了向你展示我是如何做到这一点的逻辑。
对于我的界面,我打开一个浏览器域到Oauth网址:
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/
需要访问令牌的方法应将其附加到网址,例如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
之前在浏览器字段中打开此链接
清除浏览器的cookie应该足够了,但我还没有办法做到这一点。