Android Facebook SDK3.0,会话状态为OPENING

 2021-01-14 

Android Facebook SDK3.0, session state OPENING

我正在尝试使用Facebook SDK 3.0在我的android应用中按下按钮时检索访问令牌。我的活动中有一个通用按钮正在执行以下操作:

1
2
3
4
5
6
7
8
9
Button facebook = (Button)findViewById(R.id.facebookLoginButton);
    facebook.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Session session = new Session(getApplicationContext());
            Session.setActiveSession(session);
            session.openForRead(new Session.OpenRequest(SignInActivity.this).setCallback(statusCallback));
        }
    });

然后是回调:

1
2
3
4
5
6
private class FacebookSessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
            String s=session.getAccessToken();
    }
}

单击按钮会提示我允许我按预期方式访问我的个人资料,但是此回调仅在SessionState为" OPENING "时才被调用过一次。此后状态不会改变。

我在这里想念什么?我的最终目标实际上是只获取一次访问令牌,并且我真的不关心持久化会话或使用它登录我的应用程序。


您需要覆盖onActivityResult,以便在针对Android版Facebook(或内联登录名)检查了凭据之后,将处理结果并更新会话。添加以下代码:

1
2
3
4
5
6
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession()
        .onActivityResult(this, requestCode, resultCode, data);
}


@Lucas Jota:尝试更改请求代码。这对我有用。
session.openForRead(new Session.OpenRequest(LoginActivity.this).setCallback(statusCallback).setRequestCode(urRequestCode));
另外,请确保您的活动不具有"单个实例"作为属性。