Интеграция Android Facebook с неверным хешем ключа

194

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

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

Снимок экрана: недопустимый хеш ключа 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");
}
Android
источник
12
но он работает нормально в первый раз ligin не работает, если я вхожу в систему после выхода из системы
Android
1
да, я .. создал с помощью try {PackageInfo info = getPackageManager (). getPackageInfo ("com.facebook.samples.hellofacebook", PackageManager.GET_SIGNATURES); for (Подпись подписи: info.signatures) {MessageDigest md = MessageDigest.getInstance ("SHA"); md.update (signature.toByteArray ()); Log.d ("KeyHash:", Base64.encodeToString (md.digest (), Base64.DEFAULT)); }
Android
1
Я решил эту проблему здесь! Здесь отлично поняли! [ Stackoverflow.com/questions/5306009/… ] [1]
Мади
3
@ Android Хотя это и старо, но я должен упомянуть об этом. Это не происходит, когда пользователь выходит из системы, а затем входит в систему. Это происходит при второй отладке, т.е. при переустановке приложения. Таким образом, хэш меняется. Это не происходит в случае подписанного приложения (производство готово)
Nilay Vishwakarma
1
Вы получаете ту же ошибку, если вы удалите приложение Facebook? Я тестировал с двух телефонов, и эта ошибка возникает только при установленном приложении Facebook.
Хайме Монтойя

Ответы:

274

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

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

Следуй этим шагам:

Вставьте следующий код в 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. Зайдите в настройки и введите детали, как на картинке ниже.

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

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

Если вы добавили неверную информацию на странице настроек, это означает, что она выдаст ошибку. Так что используйте правильную информацию там. А также, если общественности (кроме вас) необходимо использовать ваше приложение, вам необходимо активировать разрешение (измените «да» в «Статус и проверка» рядом с настройкой) .

Махендран Саккарай
источник
20
Таким образом, скорее всего, вы получили хэш ключа для хранилища ключей отладки. Это работает для вас в режиме разработки, не обязательно работает для вашего производственного режима. По крайней мере, это не работает для моего производственного приложения.
Лянцзюнь
3
спасибо, что вы сэкономили мне много времени ... Официальный документ на Facebook не должен читать это
ерунда
Спасибо большое, чувак!
KinGPinG
Привет этим кодом PackageInfo info = getPackageManager (). GetPackageInfo ("com.example.packagename", PackageManager.GET_SIGNATURES); for (Подпись подписи: info.signatures) {MessageDigest md = MessageDigest.getInstance ("SHA"); md.update (signature.toByteArray ()); Log.d ("KeyHash:", Base64.encodeToString (md.digest (), Base64.DEFAULT)); другой ключ хеша отправляется, когда я запускаю команду в cmd на окнах, мой ключ хеша был другим, и я добавил его в FB, но все равно в журнале отображается хэш программного кода
Сагар Деванга,
1
Сэкономил мне много времени. Все еще лучший. Проверьте подробное описание ключевого хэша, скопируйте и вставьте его на странице разработчиков Facebook. Не делайте ошибку, печатая его вручную! Кроме того, следует понимать, что keyhash меняется каждый раз, когда вы удаляете и устанавливаете приложение.
Санджив
190

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

Откройте раздел подписи приложения в консоли Google Play и получите хэш SHA-1 в разделе сертификата подписи приложения . Затем преобразуйте его в Base64 , например, с помощью этого инструмента: Hexadecimal -> base64 string decoder

Скриншот консоли

Конвертировать в Base64 скриншот

Рафаль Малек
источник
14
Сэр! Вы спасатель! С любовью. Я использовал подпись Play Store, когда помещал хэши из своих локальных ключей в консоли Facebook.
Таха Рушайн
4
Вы спасаете мою жизнь, я использую реагирование, никто не упомянул о подписи приложения Play Store
TomSawyer
7
Спасибо! Оно работает! Вы также можете использовать терминальную команду для этого: echo YOUR_SHA1_CERTIFICATE_COPIED_FROM_GOOGLE_PLAY | sed s/\://g | xxd -r -p | base64
Юрий Середюк
4
Это то, что нужно сделать для производственной среды !!! Недурно!
Бики
Именно то, что я хотел знать. Изменения Hashkey в отладке каждый раз, когда вы удаляете и устанавливаете приложение. Для подписанных apk это будет лучшим решением! Вы делаете жизнь проще, спасибо!
Санджив
124

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

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

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

Этот зеленый кружок указывает на то, что приложение работает:

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

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

Шаг 1 Перейдите в свое приложение → настройкидобавить контактный адрес электронной почты и примените Сохранить изменения.

Шаг 2 Перейдите к опции « Просмотр приложения» и убедитесь, что для этого переключателя установлено значение « Да» . Я добавил скриншот:

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

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

Арпит Патель
источник
5
Есть ли простой способ скопировать этот хэш с телефона?
Даниэль Шац
4
@DanielShatz появляется в logcat. Я узнал об этом только после того, как скопировал его по буквам.
Алаа М.
4
@DanielShatz Поиск тегов BlueServiceQueueв logcat
Алаа М.
4
Этот ответ работал для меня. После нескольких попыток ввода хеша вручную, я получил ту же ошибку, проблема была в том, что я набрал заглавную букву i "I" вместо строчной буквы L "l". Мне понадобилось время, чтобы понять это.
Маркус
1
Это работает, но мне интересно, откуда FB взял этот хэш-ключ? Никто не задается вопросом? Ошибка отображала работающий хэш-ключ, но даже со всеми командами, или получение sha1 в base64 от подписи приложения Google дало мне ключ, который FB показал в ошибке ... В любом случае, спасибо за хитрость
Umar3x
82

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

Я нашел решение:

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

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

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

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

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

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

keytool -exportcert -alias "alias of keystore" -keystore "Your path to the keystore when signing app" | openssl sha1 -binary | openssl base64

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

Акаш Бисария
источник
5
использование «андроида» в качестве пароля работает для меня. это озадачивает
Adbie
3
используйте этот «андроид» в качестве пароля при генерации хеш-ключа.
Акаш Бисария
2
на компьютере с Windows убедитесь, что переменная path правильно установлена ​​для папок openssl \ bin и java .. \ bin. Также установите переменную HOMEPATH, чтобы иметь возможность использовать команды из Facebook.
KawaiKx
1
По крайней мере, на Mac мне пришлось установить Java JDK, чтобы заставить это работать. В противном случае приведенная выше команда отладки все еще генерирует хеш, но хеш не работает, и вам не будет предложено ввести пароль. С установленным JDK это работало как шарм.
lejonl
1
этот ответ должен быть ПРАВИЛЬНЫЙ ОТВЕТ
Эван Нго
20

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

  • Во время первого запуска нового приложения 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.

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

Мартин Дойчев
источник
2
версия для Linux: `keytool -exportcert -alias androiddebugkey -keystore $ HOME / .android / debug.keystore | openssl sha1 -binary | openssl base64`
ruX
1
Просто введите то, что показано в Facebook на экране устройства, это должно работать. Спасибо за примечание @Martin
ralphgabb
14

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

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64
JP Ventura
источник
1
просто хотите добавить комментарий, используйте свой производственный склад ключей.
Лянцзюнь
2
@Liangjun На самом деле вы должны использовать все свои ключи, потому что в противном случае вы не сможете проверить Facbeook Login в среде отладки.
Pijusn
2
@Pius, да, я использую обе клавиши. Я должен был это четко заявить.
Лянцзюнь
Я получаю сообщение об ошибке для этой команды (отсутствует среда выполнения Java, запрашивающая установку.), Но ключ все еще получается, однако он недействителен, и я просто копирую и вставляю один из logcat, который говорит, что он не распознан
Cristi Băluță
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

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

Для хэша ключа Release :

На 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

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

МБХ
источник
Я получаю сообщение об ошибке для этой команды (отсутствует среда выполнения Java, запрашивающая установку.), Но ключ по-прежнему тоже есть, но он недействителен, и чтобы заставить его работать, я просто копирую и вставляю его из logcat
Cristi Băluță
Может быть, вы не установили PATH вашего java и keytool в командной строке? @ CristiBăluță
MBH
7

Я перепробовал все предыдущие ответы, и ничто не помогло моему делу с моими клиентами!

Затем мой клиент вспомнил, что на его устройстве установлено приложение Facebook. После того, как он удалил это. логин работал отлично.

Хеш-ключ был изменен, и я заменил старые хеш-ключи в Консоли разработчиков Facebook на ключ от ошибки (как предложено выше), и он работает!

Само приложение Facebook может быть проблемой, так что вам лучше разобраться с этим на устройстве с установленным приложением Facebook и на устройстве с не установленным приложением Facebook и обрабатывать оба случая ...

Матан Даан
источник
Да, вот и я получил эту ошибку после установки приложения Facebook на устройстве. Так что в настоящее время я поставил 2 хэш-ключа в настройках разработчика Facebook.
stuckedoverflow
3
У меня очень похожая ситуация с вашей. То, что мне помогло, это перейти на свою страницу FB - Настройки - Приложения - Удалить приложение из списка. Измените хэш-ключ и переустановите приложение fb и ваше приложение. И теперь это работает ...
anna_manzhula
4

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

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

Получить значение SHA-1 в Android Studio.

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

ИЛИ

Получить значение SHA-1 из файла хранилища ключей .

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

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

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

И откройте шестнадцатеричный -> Base64 строковый декодер, чтобы преобразовать значение SHA-1 в Base64.

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

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

Саджид Зеб
источник
3

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

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

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

Джефферсон Сузуки Битенкур
источник
3

Следующий код даст вам ваш хеш для 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) {
    }
  2. Создайте подписанный файл APK .

  3. Подключите телефон к ноутбуку и убедитесь, что он остается подключенным.
  4. Установите и запустите файл APK в своем телефоне, вручную переместив релиз APK на свой телефон.
  5. Теперь посмотрите на Android LogCat (используйте фильтр KeyHash:) . Вы должны увидеть ваш ключ к выпуску для Facebook. Просто скопируйте и вставьте его в свой https://developers.facebook.com/apps. Это в настройках.
  6. Теперь вы можете протестировать приложение, оно должно работать на отлично.
Абдул Джалил
источник
обратите внимание, что код работает только если вы генерируете подписанный apk. в противном случае он даст только отладочный хэш apk, который бесполезен для выпущенного apk
abdul jalil
Привет, когда я дал сгенерированный хэш-ключ приложению Facebook, оно работает нормально, но при попытке запустить на другом устройстве снова показывается «НЕВЕРНЫЙ КЛЮЧ ХЕША», как я могу установить ключ хэша для содержимого фейсбука для работы на всех устройствах.
Дипак
2

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

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

loginButton.setReadPermissions(public_profile email);

Это сработало в первый раз, но когда мы снова вошли в Facebook, это дало Invalid Hash Error .

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

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

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

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

user3663906
источник
У меня та же проблема. Я попробовал ваше решение, но все еще не могу решить мою проблему @ user3663906
BekaKK
2

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

Единственное решение, которое мне помогло, - это удалить программу OpenSSL из Google и загрузить из Win32 / Win64 установщик OpenSSL для Windows

Это действительно работает как волшебство.

Ученна Ннодим
источник
2

Несмотря на то, что на этот вопрос было дано множество полезных способов, я просто хотел добавить, что когда я следовал за ответом Рафаля Малекса (используя хеш-ключи на консоли Google Play), я НЕ смог использовать ключ подписи приложения SHA1, но все равно получил общий ошибка из фейсбука. Вместо этого мне нужно было использовать отпечаток сертификата SHA-1 из части « Загрузить сертификат» (чуть ниже части «Подписание приложения» в консоли Google Play). Тот же процесс в противном случае;

  1. Скопируйте отпечаток сертификата SHA-1 из раздела « Загрузка сертификата » в консоли Google Play.

  2. Преобразуйте SHA-1, используя: http://tomeko.net/online_tools/hex_to_base64.php и скопируйте вывод (base64)

  3. Вставьте его во ввод ключевых хэшей на developer.facebook.com и сохраните изменения.

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

Теперь вход в Facebook работает в моем приложении как в режиме отладки, так и в режиме выпуска.

Ferenziz
источник
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) {
    e.printStackTrace();
}
catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}

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

pavel_coder
источник
7
повторяя другого парня
Бето Калдас
1

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

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

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

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

  2. Вставьте его в обязательное поле в Facebook разработчике

  3. В Android Studio, меню ФайлСтруктура проекта

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

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

  4. Выберите вкус

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

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

  5. Выберите тип сборки

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

  6. Выберите вариант сборки и постройте его

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

Клиффорд Пи
источник
1

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

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

Петр Сагалара
источник
1

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

Кашиф Назар
источник
1
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) {
}
ZafarHussain
источник
0

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

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

Если вы ничего не меняли с паролем по умолчанию, это должен быть «android» .

Вы также можете настроить его в файле build.gradle. Но тот же пароль псевдонима должен использоваться для генерации хеша:

android {
    signingConfigs {
        release {
            storeFile file("~/.android/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
}
абхи шукла
источник
0

Здесь много правильных ответов. Всего лишь одно:

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

цыпленок
источник
0

У меня такая же проблема.

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

genericname
источник
0

Я исправил это, добавив следующее в 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, как обрисовали другие пользователи.

Майкл
источник
0

Если вы генерируете хэши ключей разблокировки, убедитесь, что вы вводите реальный пароль вашего хранилища ключей, а не «android».

Это была моя проблема. Отладочный релиз работал, но релиз APK не был.

Sermilion
источник
-1

Используйте приведенный ниже код в методе 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) {
}

Запустите этот код. Это сгенерирует хеш-ключ. Скопируйте этот ключ в настройках приложения Facebook и сохраните изменения. Затем войдите в свое приложение. Это будет прекрасно работать и в будущем.

Ashutoshg
источник
3
повторяя другого парня
Бето Калдас