我正在尝试使用 Facebook API 在 Android 上实现 Facebook 登录。我已经完成了所有事情Facebook Login Flow说。代码如下。
public class FBSignIn extends Fragment {
private UiLifecycleHelper uiHelper;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = super.onCreateView(inflater, container, savedInstanceState);
setTitle("Sign In");
reloadTemplate();
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
return v;
}
@Override
public void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
@Override
public boolean executeCommand(BaseWebView webView, String command, String data) {
if (command.equalsIgnoreCase("login")) {
Session session = Session.getActiveSession();
if (session != null && session.isOpened()) {
loginWithFBToken(session.getAccessToken());
return;
}
Session.openActiveSession(getActivity(), true, callback);
}
return true;
}
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
}
};
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
// Facebook logged in...
} else if (state.isClosed()) {
//Facebook logged out...
}
}
}
但是,在 Session.openActiveSession()
调用之后,在 onSessionsStateChange()
函数中,我首先得到 state == CLOSED_LOGIN_FAILED
;之后第二次调用,状态为 == OPENING。因此它永远不会进入OPENED
状态。
这段代码有什么问题?我非常感谢您的帮助。
附注我已经注释掉了有关 uiHelper 的所有内容,并在我的主要 Activity 中提供了重写方法:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
现在,第一次调用 onSessionStateChange
时会出现 state == OPENING
和 exception == null
。第二次调用带有 state == CLOSED_LOGIN_FAILED
和 exception == Invalid access token
。这是什么意思?
最佳答案
我已经解决了这个问题。原因是我们的应用程序以沙盒模式在Facebook中注册,只有某些用户可以使用Facebook登录。当我用这些帐户之一登录时,它起作用了。
关于android - Facebook API : cannot login on Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699707/