Facebook SDK授权适用于手机,但不适用于平板电脑

时间:2012-11-19 10:36:51

标签: java android facebook

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

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...
    }

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

3 个答案:

答案 0 :(得分:1)

这里的问题是,当会话未处于OPEN状态时,您正尝试调用重新授权。只检查getPermissions()不足以保证会话打开。你应该做的是检查会话是否打开(通过session.isOpen()),如果没有,首先调用其中一种打开的方法。

答案 1 :(得分:0)

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

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

这解决了我的问题。

答案 2 :(得分:0)

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

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

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