FB SDK无法在OS 7上运行

时间:2014-06-10 10:20:13

标签: java facebook blackberry

我正在我的一个应用程序中实现FB。我正在使用jar 0.8.25。它适用于从5到7.1的所有模拟器。对于设备仅适用于OS 5和6但不适用于设备7和7.1。对于OS 7,登录成功后它仍保留在FB页面上,它不会重定向回来。当我按下后退按钮时,我遇到错误,无法刷新访问令牌再次尝试按钮。

在控制台上进行分析时,它永远不会为OS 7找到访问令牌的单一时间。而对于5和6,它可以完美地工作。

请告诉可能导致问题的原因。

谢谢,

1 个答案:

答案 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应该足够了,但我还没有办法做到这一点。