简体   繁体   English

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

[英]Android Facebook SDK3.0, session state OPENING

I am trying to use the Facebook SDK 3.0 to retrieve an access token on button press in my android app. 我正在尝试使用Facebook SDK 3.0在我的Android应用程序中按下按钮检索访问令牌。 I have a generic button in my Activity that is doing the following: 我的Activity中有一个通用按钮,它执行以下操作:

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));
        }
    });

And then the callback: 然后是回调:

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

Clicking the button prompts me for my permission to access my profile as expected, but this callback is only ever called once with SessionState as "OPENING". 单击该按钮会提示我允许按预期访问我的配置文件,但此回调仅在SessionState为“打开”时调用一次。 The state doesn't change after this. 在此之后,国家不会改变。

What am I missing here? 我在这里错过了什么? My end goal is really just to get an access token once, and I don't really care about persisting the session or using it to log into my app. 我的最终目标实际上只是获取一次访问令牌,我并不真正关心持久化会话或使用它来登录我的应用程序。

You need to override the onActivityResult so that after the credentials are checked against Facebook for Android (or an inline login) the results are handled and the session updated. 您需要覆盖onActivityResult,以便在针对Android for Facebook(或内联登录)检查凭据后,处理结果并更新会话。 Add the following code: 添加以下代码:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession()
        .onActivityResult(this, requestCode, resultCode, data);
}

@Lucas Jota: Try changing request code. @Lucas Jota:尝试更改请求代码。 this works for me. 这对我有用。 session.openForRead(new Session.OpenRequest(LoginActivity.this).setCallback(statusCallback).setRequestCode(urRequestCode)); session.openForRead(new Session.OpenRequest(LoginActivity.this).setCallback(statusCallback).setRequestCode(urRequestCode)); Also, assure that your activity doesn't have "single instance" as property. 此外,确保您的活动没有“单个实例”作为属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM