1

目前我正在尝试在我的 Android 应用程序中实现 Facebook SDK。我按照官方教程进行操作,至少在我的 Galaxy S2 上是这样。我可以授权自己并将消息发布到我的墙上。但是当我在我的 Acer 平板电脑上尝试时,我得到了

11-19 11:15:54.160: W/System.err(7224): java.lang.UnsupportedOperationException: Session: an attempt was made to reauthorize a session that is not currently open.
11-19 11:15:54.160: W/System.err(7224):     at com.facebook.Session.reauthorize(Session.java:1088)
11-19 11:15:54.160: W/System.err(7224):     at com.facebook.Session.reauthorizeForPublish(Session.java:542)
11-19 11:15:54.160: W/System.err(7224):     at de.lochmann.unnuetze.fakten.FacebookConnect.postToWall(FacebookConnect.java:199)

我的问题可能与android facebook sdk - Session: an attempt was made to reauthorize a session that has a pending request相关,但由于没有有效的答案,我想我会再试一次。

我的代码的重要部分:

    if (session != null){
        List<String> permissions = session.getPermissions();
        if (!isSubsetOf(PERMISSIONS, permissions)) {
            this.pendingPublishReauthorization = true;
            Session.ReauthorizeRequest reauthRequest = new Session.ReauthorizeRequest((Activity) _ctx, PERMISSIONS).setRequestCode(REAUTH_ACTIVITY_CODE);
            try {
                session.reauthorizeForPublish(reauthRequest);   
            } catch(UnsupportedOperationException uoe) {
                uoe.printStackTrace();
                Toast.makeText(this._ctx, "Error,  Reauthorization failed",Toast.LENGTH_LONG).show();
            }
            return;
        }

        etc...
    }

你知道我错过了什么吗?在此先感谢,非常感谢任何帮助。

4

3 回答 3

1

这里的问题是您尝试在会话未处于 OPEN 状态时调用 reauthorize。仅检查 getPermissions() 不足以保证会话是打开的。你应该做的是检查会话是否打开(通过 session.isOpen()),如果没有,首先调用各种打开方法之一。

于 2012-11-19T21:19:35.620 回答
0

我认为您必须先检查会话是否已打开,因此只需添加:

if(!session.isOpened()){ session.reauthorizeForPublish(reauthRequest);
}

希望我的回答能帮助你.. :)

于 2013-02-26T12:20:39.853 回答
0

我假设您正在关注https://developers.facebook.com/docs/howtos/androidsdk/3.0/publish-to-feed/。我和你有类似的问题。我创建了一个基本 Activity,它包含了发布以提供和重新授权(如果需要)的逻辑。然后在需要该功能的活动中,我从这个基本活动继承并使用发布逻辑。我有错误,因为我忘记调用 super.onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
            ....
     }

这为我解决了这个问题。

于 2012-11-20T11:28:35.260 回答