Intereting Posts
Google Cloud Datastore / Mobile Backend Starter – разрешает сбой при обновлении / обновлении всех звонков Наземная ионная 2 геолокация не работает на устройстве Android Запретить Android-телефон подключаться к сети Wi-Fi, если мое приложение не одобрит его? Элементы ListView, которые нельзя кликать с помощью HorizontalScrollView внутри Класс Android LocationClient устарел, но используется в документации Является ли libgdx пригодным для игр 2d? Получите количество GPS-исправлений? Как транслировать через RTMP на Android? Proguard и Android :( Android: неожиданное поведение последних приложений UnknownError: ApiException: Key hash **** не соответствует … когда у меня установлено приложение FB Android-браузер Триггеры jQuery $ (окно) .resize () при прокрутке Android Nexus 7 Jelly Bean: startPreview / takePicture, вызывающий getCameraStereoMode регистрирует ошибку Как лучше всего в Android удалить все строки из таблицы Внешняя веб-камера для камеры для android с использованием usb

Keytool генерирует 32-символьный длинный хэш вместо 28

Я использую следующую команду для генерации ключевого хеша для Facebook app console для Android

.\keytool.exe -exportcert -alias app_android -keystore release.keystore | openssl sha1 -binary | openssl base64 

Как рассказали в Facebook разработчики SDK

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

Версия Java: jdk1.8.0_31 ОС: Windows 7

Генерация для Android.

РЕДАКТИРОВАТЬ

Согласно предложению от @ Shreyash-mashru, я использовал следующий код, чтобы получить keyhash

 try { PackageInfo info = getPackageManager().getPackageInfo( "my.package.name", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException e) { Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + e.toString()); } catch (NoSuchAlgorithmException e) { Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + e.toString()); } 

Однако, если кто-то еще может помочь мне понять, почему инструмент командной строки генерирует 32-х длинный ключевой хэш вместо 28 …

Для меня эта проблема тоже, для меня я использовал windows powershell и продолжал генерировать 32-символьный ключ. Когда я переключаюсь на простой старый cmd, он работал, как ожидалось.

 .\keytool.exe -exportcert -alias app_android -keystore release.keystore | openssl sha1 -binary | openssl base64 

Это отлично работает для меня. Попробуйте снова.

У меня была такая же проблема. Это как-то связано с использованием моей существующей версии openSSL (64 бит). Я загрузил 32-битную версию и установил ее в c: \ openSSL. Затем команда указывает на эту версию SSL, и я получил свой 28-символьный хэш.

Keytool -exportcert -alias androiddebugkey -keystore "C: \ Users \ USERNAME.android \ debug.keystore" | "C: \ OpenSSL \ bin \ openssl" sha1 -binary | "C: \ OpenSSL \ bin \ openssl" base64

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

Сгенерированный хеш – 32 символа, потому что есть возврат каретки и новая строка добавлена ​​в конец. Чтобы исправить это, вы можете:

Удалите последние 5 символов хэша и добавьте «=» в конец. Например: «1234567890abcdefghijklmnopqrstuv» (32 символа) -> «1234567890abcdefghijklmnopq =» (28 символов)

ИЛИ

Поп открыть консоль javascript и использовать:

 btoa(atob(hashString).slice(0, -2)) 

Где «hashString» – ваш 32-символьный хеш.