Android-интеграция Facebook неверный ключ хеш

В одном из моих приложений мне нужно получить данные Facebook... Я делаю это:

Я создал идентификатор приложения. Он успешно входит в систему, но после выхода из системы я вхожу в систему, а затем выдает:

Screenshot of invalid key hash error Facebook

Что не так я делаю? Пожалуйста, предложите, чтобы я использовал Facebook SDK... Я установил Facebook в своем телефоне... Это работает хорошо в эмуляторе, в котором не установлено встроенное приложение Facebook.

Это мой код:

if (FB_APP_ID == null) {
    Builder alertBuilder = new Builder(this);
    alertBuilder.setTitle("Warning");
    alertBuilder.setMessage("A Facebook Applicaton ID must be " +
                            "specified before running this example: see App.java");
    alertBuilder.create().show();
}

// Initialize the dispatcher
Dispatcher dispatcher = new Dispatcher(this);
dispatcher.addHandler("login", LoginHandler.class);
dispatcher.addHandler("stream", StreamHandler.class);
dispatcher.addHandler("logout", LogoutHandler.class);

// If a session already exists, render the stream page
// immediately. Otherwise, render the login page.
Session session = Session.restore(this);
if (session != null) {
    dispatcher.runHandler("stream");
}
else {
    dispatcher.runHandler("login");
}

Ответ 1

Неверная генерация хэш-ключа. Вы можете получить хэш-ключ, используя два шага. Один из них - в командной строке. Другой - через кодирование. Хэш-ключ через командную строку работает только в первый раз. Я не знаю причины. У меня тоже такая же проблема. Поэтому я пробовал это с помощью программно.

Выполните следующие действия:

Вставьте следующий код в oncreate().

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                "com.example.packagename", 
                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) {

} catch (NoSuchAlgorithmException e) {

}

Измените "com.example.packagename" с вашим именем пакета в вышеуказанной кодировке без сбоев (вы можете найти свое имя пакета в файле манифеста Android).

Запустите приложение. Перейдите к действию, в котором вы вставили вышеуказанный код. В logcat найдите "KeyHash". Вы можете найти ключевой хеш. Скопируйте хэш ключа и перейдите на страницу панели приложений Facebook. Перейдите к настройкам и введите данные, как показано на следующем рисунке.

enter image description here

Как только вы закончите вышеуказанный шаг. Перезагрузите приложение, и теперь вы можете войти в фейсбук. Для получения дополнительной информации о ключевом хеше проверьте ссылку

Если вы добавили неверную информацию на страницу настроек, это приведет к некоторой ошибке. поэтому используйте там правильную информацию. А также, если публичная (кроме вас) необходимость использования вашего приложения означает, что вам нужно включить разрешение (change "yes" in the "Status & Review" next to setting).

Ответ 2

Если вы используете приложение Google Play для подписи:

Откройте раздел подписи приложения в консоли Google Play и получите SHA1 из сертификата подписи приложения, а затем преобразуйте его в base64, например, с помощью этот инструмент: http://tomeko.net/online_tools/hex_to_base64.php?lang=en

console screenshot

convert to base64 screenshot

Ответ 3

Если вы столкнулись с этой проблемой, поместите этот ключ в свой developer.facebook.com

введите описание изображения здесь

Затем убедитесь, что ваше приложение в прямом эфире на

developer.facebook.com

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

введите описание изображения здесь

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

Шаг 1 Перейдите в свое приложение → = > и добавить контактную электронную почту и примените сохранение изменений

Setp 2 Затем перейдите в Обзор приложения и убедитесь, что этот переключатель включен. Я добавил снимок экрана

введите описание изображения здесь

Примечание. Если вы хотите скопировать хеш-ключ, проверьте BlueServiceQueue в Logcat.

Ответ 4

Я получил ту же проблему. Я был уверен, что это было из-за очень маленькой ошибки, и да, это было !!!! Я нашел решение.

При создании отладочного хеш-ключа на моем компьютере я ввел пароль своей системы. Но пароль должен быть следующим:
Введите пароль хранилища ключей: "Android"
Это была единственная проблема в моем случае.

----- Для генерации хеш-ключа Debug используйте эту команду -

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Введите пароль хранилища ключей: "Android"

----- для генерации ключа Release хэша, используйте эту команду -

keytool -exportcert -alias "псевдоним хранилища ключей" -keystore "Ваш путь к хранилищу ключей при подписании приложения" | openssl sha1 -binary | openssl base64

Введите пароль хранилища ключей после выполнения этой команды.

Ответ 5

У меня возникла такая же проблема. Я коротко исследовал возможные причины этого странного поведения, и нашел следующее:

  • Во время первого выполнения нового приложения Facebook это позволит подключиться/войти , даже если вы не укажете хэшей ключей.

  • Для меня учебник, который предоставил Facebook, не вызвал правильного ключевого хэша, поскольку он предоставлял неправильную конфигурацию. При выполнении:

    keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
    base64
    

убедитесь, что вы проверяете все свойства - HOMEPATH, существование хранилища ключей и т.д. Возможно, вам также необходимо предоставить пароль.

  • Что создало правильную конфигурацию, было решение , предложенное @Mahendran.

  • Кроме того, если вы видите первоначально опубликованную ошибку (http://i.stack.imgur.com/58q3v.png), скорее всего, хэш-код , который вы видите на экране, является вашим Настоящий. Если ничего не работает, попробуйте ввести его в Facebook.

Я получил все эти результаты с помощью 64-разрядной версии Windows 7, Android Studio 1.2.2, JDK 7.

Ответ 6

В соответствии с Facebook для входа в Android, вы должны указать значение ключевого хеша. Чтобы получить его, вам понадобится ключ, используемый для подписания вашего приложения.

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64

Ответ 7

Я пробовал все вышеперечисленное, и ничто не помогло моему делу с моими клиентами! Чем мой клиент помнил, что у него установлено приложение Facebook на его устройстве. После его удаления логин работал отлично. Хэш-ключ был изменен, и я заменил старые хэш-ключи в консоли разработчиков Facebook с ключом от ошибки (как было сказано выше), и он работает! Само приложение Facebook может быть проблемой, поэтому вам лучше понять это на устройстве с установленным приложением Facebook и на устройстве с установленным приложением Facebook и обрабатывать оба случая.

Ответ 8

Вы должны создать два ключевых хэша, один для отладки и один для выпуска.

Для отладки ключа хеша:

На OS X запустите:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

В Windows запустите:

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

Отладка источника хэшей

Для хэша ключа выпуска:

На OS X запустите: (замените то, что между <> вашими значениями)

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

В Windows используйте: (Замените то, что между <> вашими значениями)

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

Разблокировать источник хэшей

Ответ 9

У меня была такая же проблема. Первый логин, только тонкий, но затем недействительный хэш ключа.

Хотя это не нить Единства, я нашел здесь свой ответ. Поэтому я оставлю свой ответ, на всякий случай кто-то другой (бродящий, как я) натыкается на него.

Facebook SDK для Unity получает неправильный хэш. Он получает ключ от пользователя "C:\Users" вашего пользователя ".android\debug.keystore", и в идеальном мире он должен получить его из хранилища ключей, которое вы создали в своем проекте. Вот почему он говорит вам, что ключевой хэш не зарегистрирован.

Как было предложено Madi, вы можете выполнить шаги этой , чтобы найти правильные ключ. Просто сделайте shure указывать их на хранилище ключей внутри вашего проекта, иначе вы не получите правильную клавишу.

Ответ 10

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

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                "com.example.packagename", 
                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) {

} catch (NoSuchAlgorithmException e) {

}
  1. сгенерировать подписанный apk.
  2. подключите телефон к ноутбуку и убедитесь, что он подключен.
  3. установите и запустите apk в телефоне, вручную переместив apk release на свой телефон.

  4. Теперь посмотрим на android logcat (используйте фильтр KeyHash:), вы должны увидеть свой хэш-ключ релиза для facebook. просто скопируйте и вставьте его в https://developers.facebook.com/apps в настройках.

  5. теперь вы можете протестировать приложение, которое должно работать отлично.

    Удачи.

Ответ 11

После долгого исследования мы нашли решение.

Мы установили разрешения как:

loginButton.setReadPermissions(public_profile email);

Это сработало впервые, но когда мы снова вошли в FB, он дал неверную ошибку Hash.

Простым решением было изменить приведенную выше строку на:

    loginButton.setReadPermissions(Arrays.asList(
            "public_profile", "email"));

И это сработало, как блаженство!

Надеюсь, это поможет кому-то.

Facebook должен вернуть правильное исключение вместо ошибочной ошибочной ошибки хеша.

Ответ 12

После стольких испытаний я наткнулся на решение этой проблемы. Я сгенерировал и добавил ключи отладки и выпуска в консоль разработчика Facebook и все еще получаю сообщение об ошибке.

Единственное решение, которое сработало для меня, - это удалить программу OpenSSL из Google и загрузить с http://slproweb.com/products/Win32OpenSSL.html.

Это действительно работает как магия

Ответ 13

Вот как я решил эту проблему

Сначала вы должны получить значение SHA-1. Для этого есть два пути.

-> Чтобы получить значение SHA-1 в Android Studio.

  1. Нажмите Gradle
  2. Нажмите Отчет о подписи
  3. Скопируйте значение SHA-1

    ИЛИ

-> Чтобы получить значение SHA-1 из файла хранилища ключей.

keytool -list -v -keystore keystore_file_name.jks -alias key0

Скопируйте значение SHA1 в буфер обмена следующим образом

CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84

и откройте http://tomeko.net/online_tools/hex_to_base64.php, чтобы преобразовать значение SHA1 в base64.

Это то, что требует Facebook

Получите сгенерированный хеш "******************** =" и скопируйте ключевой хеш в приложение facebook.

Ответ 14

вставьте следующий код в свой метод OnCreate

try {
    PackageInfo info = getPackageManager().getPackageInfo(
            "com.example.packagename", 
            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();
}

Просто измените имя пакета. Затем перейдите в свой лог-журнал и выберите "Отладочный поиск" здесь, после чего вы найдете хэш-ключ. Теперь скопируйте этот хеш-ключ, а затем перейдите на сайт developer.facebook.app_id, затем отредактируйте свой хэш-ключ, затем нажмите "Сохранить". Теперь запустите проект Android. Я думаю, проблема будет решена.

Ответ 15

Это может помочь кому-то с той же проблемой

  • Сгенерировать хэш ключа, используя код ниже

keytool -exportcert -alias <your_keystore> alias -keystore <your_keystore_file> | openssl sha1 -binary | openssl base64

как использовать keytool

2. Вставьте его в нужное поле в facebook developer

3. В Android-студии File- > Структура проекта введите описание изображения здесь

добавить параметры подписи

4.Выберите ароматы введите описание изображения здесь

выберите подписанную конфигурацию, которую мы создали

5.Выберите тип сборки введите описание изображения здесь

6.select построить varient и построить его

введите описание изображения здесь

Ответ 16

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

Это решение больше похоже на легкую работу, чем на правильное решение.

Ответ 17

Если вы вводите хеш вручную (например, с мобильного телефона на панель инструментов Facebook), не забудьте различить маленькую букву L и заглавную I.

Ответ 18

Какая используемая facebook не является паролем по умолчанию и псевдонимом для отладки. Вам нужно изменить его, и он будет работать.

/usr/lib/jvm/jdk1.8.0_66/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Если вы ничего не изменили с помощью пароля по умолчанию, он должен быть андроидом. Вы также можете настроить его в файле build.gradle. Но для генерации хэша должен использоваться один и тот же пароль.

android{
    signingConfigs {
        release {
            storeFile file("~/.android/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
}

Ответ 19

Ребята здесь много правильных ответов. Только одно. Вставить полученный хэш в Приложение → Настройки → Главная не через быстрый старт.

Ответ 20

Была такая же проблема. Убедитесь, что вы создали APK с тем же устройством, на котором был создан хеш-ключ, который хранится в разделе разработчиков Facebook.

Ответ 21

Я исправил это, добавив следующее в MainApplication.onCreate:

      try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.genolingo.genolingo",
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String hash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
                KeyHash.addKeyHash(hash);
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("PackageInfoError:", "NameNotFoundException");
        } catch (NoSuchAlgorithmException e) {
            Log.e("PackageInfoError:", "NoSuchAlgorithmException");
        }

Затем я загрузил это в консоль разработчика Google, а затем скачал производный APK, который по какой-то причине имеет совершенно другой ключевой хэш.

Затем я использовал logcat для определения нового ключевого хэша и добавил его в Facebook, как обрисовали другие пользователи.

Ответ 22

Это сработало для меня.

Скопируйте APK на свой компьютер в папке Program Files\java\jdkX.X.X_XXX\bin

В моем случае это C:\Program Files\Java\jdk1.8.0_191\bin

Откройте CMD в этом каталоге и введите следующее

keytool -list -printcert -jarfile YOUR_APK_NAME.apk

Скопируйте значение SHA1 в буфер обмена. Это будет примерно так: 79:D0:E6:80:4E:28:1E:D1:88:28:CB:D7:E6:BE:2E:0C:FB:24:98:52

Затем перейдите на http://tomeko.net/online_tools/hex_to_base64.php, чтобы преобразовать значение SHA1 в base64.

Это то, что Facebook требует, чтобы получить сгенерированный хеш "******************** =" и скопировать ключевой хеш в настройки приложения для разработчиков Facebook.

Ответ 23

try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "www.icognix.infomedia",
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("YourKeyHash :", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }

Ответ 24

Если вы генерируете хэши ключей разблокировки, убедитесь, что вы вводите реальный пароль вашего хранилища ключей, а НЕ "android". Это была моя проблема. Отладочный релиз работал, релиза apk не было.

Ответ 25

Использовать ниже код в методе onCreate() вашей деятельности

try {
    PackageInfo info = getPackageManager().getPackageInfo(
            "your application package name",
            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) {

} catch (NoSuchAlgorithmException e) {

}

Запустите этот код, это приведет к созданию ключа Hash. скопируйте эту настройку KeyHash в приложение Facebook → Сохраните изменения. затем войдите в свое приложение. это будет отлично работать и в будущем.