Android facebook login не работает с установленным приложением Facebook - программирование
Подтвердить что ты не робот

Android facebook login не работает с установленным приложением Facebook

Я установил простой интерфейс для входа в facebook. Для Android 2.3.6 все работает так, как должно, пользователь получает приглашение для входа в систему, вводит данные и приложение. Я думал, что это была ошибка версии для Android, но он убеждает, что логин не работает, когда на телефоне установлено приложение facebook!

Протестировано: Galaxy Ace 2.3.6 HTC Desire 4.1.2 Примечание Galaxy 4.1.2 Android-эмулятор 4.1.2

Даже образцы facebook не работают!

Каждый раз, когда приложение выполняется - else { Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); }

Кажется, сессия не открывается, но почему? Следующее руководство - https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

код:

Session.openActiveSession(this, true, new Session.StatusCallback() {

        @Override
        public void call(final Session session, SessionState state, Exception exception) {

            if (session.isOpened()) {

                Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (user != null) {
                            Log.d("Access_token", session.getAccessToken());
                        }
                    }
                });
            } else {
                Log.d("SESSION NOT OPENED", "SESSION NOT OPENED");
            }
        }
    });
4b9b3361

Ответ 1

Проверьте нижнюю часть шага 4: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Если вы не ввели свой хэш-код приложения должным образом, вход в Facebook через всплывающее окно WebView (если приложение не установлено) все равно будет работать, но войти через собственное приложение Facebook не будет.

Вы должны увидеть это исключение в LogCat:

com.facebook.http.protocol.ApiException: remote_app_id does not match stored id

SDK для печати исключает исключения, поэтому проверьте, есть ли другие проблемы.

Ответ 2

Я пишу этот ответ тем, кто использует Facebook SDK 4.X

вы можете открыть портал входа в facebook одним из двух способов:

  • Если у вас есть устройство Android с Android 1.9.X и Facebook App установлено на устройстве с именем Native Login Method здесь, вам не нужно использовать facebook WebView

  • если вы не установили Facebook App в Android-устройство, тогда полезно использовать WebView

поэтому для этого Facebook предоставит 3 Constants

  • NATIVE_ONLY (используется, когда вы хотите открыть только приложение Facebook)
  • WEB_ONLY (используется, если вы хотите открыть только WebView)
  • NATIVE_WITH_FALLBACK (Рекомендуемое обнаружение Facebook и opne WebView, если приложение не установлено)

Проверьте ссылку ниже для подробной информации https://developers.facebook.com/docs/reference/android/current/class/LoginButton/ https://developers.facebook.com/docs/facebook-login/android/v2.2#troubleshooting

     LoginButton.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK);
     LoginButton.setLoginBehavior(LoginBehavior.NATIVE_ONLY);
     LoginButton.setLoginBehavior(LoginBehavior.WEB_ONLY);

Ответ 3

Получите хеш-ключ, используя эту функцию для обоих (debug и release apk) и поместите его в свое приложение в developer.facebook.com/apps

private void calculateHashKey(String yourPackageName) {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                yourPackageName,
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:",
                    Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
}

это мне очень помогает.. Надеюсь, это тоже поможет.

Ответ 4

Похоже, я не смог получить данные, если бы у меня был активный сеанс facebook (из приложения facebook).

Итак, прежде чем открывать сеанс, я прошу ввести авторизацию, даже если у пользователя есть открытый сеанс facebook из приложения facebook.

openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);

Итак, теперь все работает, но пользователь должен вводить данные вручную. Это не идеально, но оно работает.

Даже образцы facebook не работали для меня при открытии приложения facebook.

Если у кого-то есть лучшее решение, не стесняйтесь предлагать.

Ответ 5

Если хеш-ключ не создан должным образом, вы можете столкнуться с такими проблемами, как

Появится диалоговое окно родного входа, но после принятия всплывающих окон разрешений и ничего не происходит в log cat

Но вход и совместная работа будут работать нормально, если родное приложение на устройстве отключено (в этом случае откроется диалоговое окно входа в веб-представление, и для этого не нужен правильный хеш-ключ)

Я столкнулся с той же проблемой и решил это, получив хэш-ключ, используя этот код. Хэш-ключ был отличным от того, сгенерированного с помощью openSSl и keytool

и после обновления этого хэш-ключа в приложении Facebook все работает отлично

//================================== To Get Facebook Hash key Programmatically =========================//
    PackageInfo info;

     try {
            info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md;
                md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String something = new String(Base64.encode(md.digest(), 0));
                //String something = new String(Base64.encodeBytes(md.digest()));
                Log.e("hash key", something);
            }
        } catch (NameNotFoundException e1) {
            Log.e("name not found", e1.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("no such an algorithm", e.toString());
        } catch (Exception e) {
            Log.e("exception", e.toString());
        }

Просто измените имя своего пакета и получите правильный хеш-ключ

Ответ 6

enter image description here

Отключить режим SAndbox... Это позволит вашему приложению работать на всех устройствах. Попробуйте это решение