2

Facebook API を使用して、Android に Facebook ログインを実装しようとしています。Facebook ログイン フローに記載されている方法ですべてを実行しました。コードは以下です。

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;を取得します。その後、 で 2 回目に呼び出されstate == OPENINGます。したがって、状態になることはありませんOPENED

このコードの何が問題になっていますか? よろしくお願いします。

PS 私は関連するすべてをコメントアウトしuiHelper、私の主な活動で、オーバーライドされたメソッドを提供しました:

    @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ます。2 番目の呼び出しには と が付いstate == CLOSED_LOGIN_FAILEDていexception == Invalid access tokenます。どういう意味ですか?

4

1 に答える 1

2

私は問題を解決しました。その理由は、私たちのアプリがサンドボックス モードで Facebook に登録されていて、特定のユーザーしか Facebook でログインできなかったためです。これらのアカウントのいずれかでログインすると、機能しました。

于 2013-09-13T08:37:47.757 に答える