0

在以前的 android SDK 中,我通过调用请求新的权限Facebook.authorize(),它显示了批准权限屏幕。但在 SDK 3.0 中,当我调用时FacebookActivity.openSessionForPublish(),对话框总是显示登录表单。如何显示批准权限屏幕?

我已经设置了具有令牌和到期日期的会话,其 SessionState 为CREATED_TOKEN_LOADED.

是否需要显示权限对话框或Facebook.authorize()总是显示登录表单?那么请教我正确的方法。

我的代码如下

 public class FbConn extends FacebookActivity {
    public void onCreate(Bundle savedInstanceState) {
       ...
       if( savedInstanceState == null ) {
          Session savedSession = CommonUtil.getFbSession(CustomSessionStore.getFbInfo(getApplicationContext())); //get access token and expiration date from session store and set up new session.
          Session.setActiveSession(savedSession); 
          setSession(savedSession);
       }

    }

    protected void onStart() {
       super.onStart();
       openSessionForPublish(EpisodeApplication.config.getSelectedServer().fbAppId, Constants.FB_PERMISSIONS);
    }

 }

更新

我已经注释掉了这些行并且权限请求屏幕显示成功。但我不确定这是否正确。

com.facebook.LoginActivity第 62 行,

Utility.clearFacebookCookies(this);

com.facebook.Session第 1202 行,

Utility.clearFacebookCookies(getStaticContext());
4

1 回答 1

6

如果您已经有一个有效的会话,来自以前的身份验证流程,那么如果您想请求新的权限,请使用 Session.ReauthorizeRequest 类。

Session.ReauthorizeRequest reauthRequest = new Session
                .ReauthorizeRequest(this, Constants.FB_PERMISSIONS);
session.reauthorizeForPublish(reauthRequest);

这应该会显示您要求的新权限的权限屏幕,而不是登录表单。

但是,从您的逻辑来看,尚不清楚您在哪里处理第一次登录。如果您希望在此类中处理它,那么我建议使用以下内容:

Session.openActiveSession(this, true);

如果没有缓存的令牌,这将打开一个登录表单。如果有缓存的令牌,它将创建一个新的 Session 并使其处于活动状态。这将打开一个具有基本权限的会话(如果用户需要登录)或打开一个具有基于检索到的缓存令牌的权限的会话。然后,您可以调用 re-auth 方法来请求发布权限。您需要在上下文中执行此操作,并且通常不希望背靠背调用 auth 函数,即登录用户,然后立即请求发布权限。

于 2012-11-07T19:04:01.083 回答