使用 Android Facebook SDK 3.5,我经常遇到登录问题:我收到CLOSED_LOGIN_FAILED
. FacebookOperationCanceledException
我知道关于 SO 有大约一百万个CLOSED_LOGIN_FAILED
问题,但这个不同。请不要回答“您的密钥哈希是否正常?它是否超出沙盒?应用程序 ID 是否正常?”,因为它们是。:-)我告诉你为什么我知道他们是:
如果我禁用 SSO,我可以使用更复杂的非 SSO 方法登录。从那一刻起,即使 SSO 再次启用,它也开始工作,之后就没有CLOSED_LOGIN_FAILED
答案了。相同的用户,相同的密钥,相同的应用程序,相同的 id,一切都是一样的。非 SSO 登录只需要一次,然后一切恢复正常。不是一个孤立的案例,我可以用几个不同的帐户一致地重现它。
FacebookOperationCanceledException
尽管用户授权访问,仍会收到。要求适当的权限(实际上是一个publish_stream
,仅此而已),授权对话框没问题,我按确定,而不是取消,但我仍然得到那个异常。
代码直接来自教程。一些相关部分供参考:
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
shareButton.setEnabled(true);
if (pendingPublishReauthorization && state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
pendingPublishReauthorization = false;
publishStory();
}
}
else if (state.isClosed())
shareButton.setEnabled(false);
}
...
final LoginButton authButton = (LoginButton) findViewById(R.id.authButton);
authButton.setPublishPermissions(PERMISSIONS);
...
uiHelper = new UiLifecycleHelper(this, new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
}
});
...
@Override
public void onResume() {
super.onResume();
final Session session = Session.getActiveSession();
if (session != null && (session.isOpened() || session.isClosed()))
onSessionStateChange(session, session.getState(), null);
uiHelper.onResume();
}