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));
另外,请确保您的活动不具有"单个实例"作为属性。