【问题标题】:FB SDK not working on OS 7FB SDK 无法在 OS 7 上运行
【发布时间】:2014-06-11 17:27:25
【问题描述】:

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

在控制台上分析时,它永远不会为 OS 7 找到一次访问令牌。而在 5 和 6 上它工作得很好。

请说明可能导致问题的原因。

谢谢,

【问题讨论】:

  • 遇到了同样的问题,最后只是为我需要的调用创建了我自己的 FB 界面。
  • 你能解释一下你的界面吗?

标签: java facebook blackberry


【解决方案1】:

这不是您特定问题的解决方案。我在 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就足够了,但我还没有找到方法。

【讨论】:

  • 感谢分享知识。但是我想知道如果我们登录后没有获得访问令牌怎么办。现在我已经离开了jar并测试了与您的界面非常相似的SDK代码(除了存储访问令牌)本身来调试问题。我发现它打开 Oauth url 并在成功登录后。Url 应该是:facebook.com/connect/login_success.html#access_token=xxxxxxx 但这里浏览器现在监听 url:m.facebook.com/_rdr;interface=wifi在此之后......没有重定向,它仍然在 fb 页面上。
  • 奇怪,我也在用 OS7。如果尚未启用浏览器字段上的 cookie。否则,请确保 APP_ID 接受您登录时使用的帐户(在测试应用的情况下)。
  • 我启用了 cookie 并检查了两次,但结果是一样的。并且接受设备 OS 6 的应用程序 ID 的帐户也应该接受 OS 7。
  • 好的,这个网站建议设置一个用户代理。 bugs.launchpad.net/midori/+bug/710530。但在此之前,我会尝试在浏览器字段中打开 facebook,看看它是否已经登录。除此之外,我会像你一样使用谷歌搜索。
  • 是的,这可能是用户代理的问题。我发现了这个:stackoverflow.com/questions/9663228/… 但在 facebook 的开发者页面上没有找到这样的设置。
猜你喜欢
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多