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

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

проверили это на: Гэлакси Эйс 2.3.6 HTC Desire 4.1.2 Galaxy Note 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");
            }
        }
    });

6 ответов


проверьте нижнюю часть шага 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

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


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

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

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

  2. если вы не установили Facebook App в вашем Android устройстве, то это хорошо использовать WebView

так что для этого Facebook предоставить 3 Constants

  1. NATIVE_ONLY(используется, когда вы хотите открыть только в Facebook приложение)
  2. WEB_ONLY(используется, когда вы хотите открыть в WebView только)
  3. 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);

получите хэш-ключ, используя эту функцию для обоих (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();
    }
}

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


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

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

openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);

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

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

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


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

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

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

я столкнулся с той же проблемой и решил ее, получив хэш-ключ с помощью этого кода. Хэш-ключ отличался от ключа, созданного с помощью 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());
        }

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


enter image description here

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