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



我需要登录Facebook并获得相同的字段,如电子邮件等。我使用 Facebook SDK,并在 developers.facebook 中设置了我的 Android 密钥哈希,并设置了"为 Android SSO 配置"。在模拟器和某些设备中,应用程序工作正常。

但是,如果设备上安装了官方Facebook应用程序,则我的应用程序不起作用:我按下登录按钮,但没有看到带有Web视图的对话框,要求输入密码和登录名。看起来Stack Overflow问题中的问题使用facebook.authored与Android SDK不调用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();
}

脸书连接器代码

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");
        }
    }
}

请更新应用程序的以下代码。它将解决您的问题。

public void loginAndPostToWall() {
    facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH,
            new LoginDialogListener());
}

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

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

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);
    // }
}

这只是一个疯狂的猜测,但不是这个:

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

尝试:

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

由于您没有调用父方法,因此某些事情可能无法按预期工作...

private static Session openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback, List<String> permissions) {
    OpenRequest openRequest = new OpenRequest(activity).setPermissions(permissions).setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO).setCallback(callback);
    Session session = new Session.Builder(activity).build();
    if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) {
        Session.setActiveSession(session);
        session.openForRead(openRequest);
        return session;
    }
    return null;
}

像这样编辑你的 openactivesession 函数

最新更新