Android Facebook授权 - 安装官方Facebook应用时无法登录

anb*_*ber 10 authentication android facebook login

我需要登录Facebook并获得相同的字段,如电子邮件等.我使用Facebook SDK,然后在developers.facebook中设置我的Android密钥Hash并设置"Configured for Android SSO".在模拟器和一些设备中,应用程序工作正常.

但是如果设备上安装了正式的Facebook应用程序,我的应用程序就无法运行:我按下登录按钮,但是我没有看到带有网络视图的对话框,我的密码和登录被要求.看起来Stack Overflow问题中的问题使用Android SDK的facebook.authorize不会调用onActivityResult或Stack Overflow问题Android Facebook API单点登录?,但我无法理解如何解决它.

我的代码

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}

public void getAccessToken() {
    SessionEvents.AuthListener listener = new SessionEvents.AuthListener() {
        @Override
        public void onAuthSucceed() {
            setupAccessToken(facebookConnector.getFacebook().getAccessToken());
        }

        @Override
        public void onAuthFail(String error) {
            Toast.makeText(getApplicationContext(), getString(R.string.error_login), Toast.LENGTH_SHORT).show();
        }
    };

    SessionEvents.addAuthListener(listener);
    facebookConnector.login();
}
Run Code Online (Sandbox Code Playgroud)

facebookConnector代码

public class FacebookConnector {
    public void login() {
        if (!facebook.isSessionValid()) {
            facebook.authorize(this.activity, this.permissions, new LoginDialogListener());
        }
    }

    private final class LoginDialogListener implements DialogListener {
        public void onComplete(Bundle values) {
            SessionEvents.onLoginSuccess();
        }

        public void onFacebookError(FacebookError error) {
            SessionEvents.onLoginError(error.getMessage());
        }

        public void onError(DialogError error) {
            SessionEvents.onLoginError(error.getMessage());
        }

        public void onCancel() {
            SessionEvents.onLoginError("Action Canceled");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Dip*_*iya 20

请更新以下应用程序代码.它会解决你的问题.

public void loginAndPostToWall() {
    facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH,
            new LoginDialogListener());
}
Run Code Online (Sandbox Code Playgroud)


Dhr*_*tel 5

我和你一样有同样的问题.最后,我用这个解决了:

打开Facebook SDK提供的Facebook.java,然后像这样更改:

public void authorize(Activity activity, String[] permissions,
                      int activityCode, final DialogListener listener) {
    boolean singleSignOnStarted = false;

    mAuthDialogListener = listener;

    /*
    // Prefer single sign-on, where available.
    if (activityCode >= 0) {
        singleSignOnStarted = startSingleSignOn(activity, mAppId,
                                                permissions, activityCode);
    }
    // Otherwise fall back to the traditional dialog.
    if (!singleSignOnStarted) {
    */

    startDialogAuth(activity, permissions);

    // }
}
Run Code Online (Sandbox Code Playgroud)