android - Facebook API : cannot login on Android

标签 android api authentication facebook-login

我正在尝试使用 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 == OPENINGexception == null。第二次调用带有 state == CLOSED_LOGIN_FAILEDexception == Invalid access token。这是什么意思?

最佳答案

我已经解决了这个问题。原因是我们的应用程序以沙盒模式在Facebook中注册,只有某些用户可以使用Facebook登录。当我用这些帐户之一登录时,它起作用了。

关于android - Facebook API : cannot login on Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699707/

相关文章:

android - 使用邮件和密码通过 REST API [Firebase] 进行身份验证

java - Stripes 1.5 - 有什么方法可以向系统询问所有 ActionBean 的列表吗?

c# - 用于 HID (USB) 的 .NET API?

java - 如何为抢占式 HTTP 身份验证配置 CXF 生成的客户端?

php - 现有 CI 应用程序的 Ion Auth 表名称更改

java - 如何在 selenium 中处理 chrome 中的身份验证弹出窗口

android - gradle “universalApk true”并没有为我提供所有提到的ABI的apk

android - 翻译来自服务器的响应消息的最佳方式是什么?

android - 从相机捕获的图像未显示(OnActivityResult)

php - 如何使用 PHP 登录 Youtube?