Авторизация Android Facebook – невозможно войти в систему, когда установлено официальное приложение Facebook

Мне нужно войти в Facebook и получить такие же поля, как электронная почта и т. Д. Я использую SDK для Facebook, и я установил свой Android-ключ Hash в developers.facebook и установил «Настроен для Android SSO». В симуляторе и некоторых устройствах приложение работает нормально.

Но если официальное приложение Facebook установлено на устройстве, мое приложение не работает: я нажимаю кнопку входа в систему, но я не вижу диалога с веб-представлением, так как меня спрашивают пароль и логин. Похоже, проблема в вопросе переполнения стека. Использование facebook.authorize с 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(); } 

facebookConnector code

 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, предоставленный SDK для Facebook, а затем измените его следующим образом:

 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 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, как это

Давайте будем гением компьютера.