Facebook Android генерирует хэш ключей
Пытаясь создать приложение для Android с интеграцией с Facebook, я попал в ту часть документов, где вам нужно сгенерировать ключевой хеш-файл, в котором указано, что нужно выполнить следующий код
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore
| openssl sha1 -binary
| openssl base64
Когда я запускаю это в своем терминале, я получаю ошибку для Keystore, подделанную, или пароль был неправильным,
Я просто хочу создать мой ключ хэш
Может кто-то указать мне верное направление?
20 ответов
Удалите сертификат отладки в ~/.android/debug.keystore (в Linux и Mac OS X); этот каталог похож на%USERHOME%/.android в Windows.
Плагин Eclipse должен генерировать новый сертификат при следующей попытке создать пакет отладки.
Дай мне знать, если это работает.
Для генерации ключевого хэша вам необходимо выполнить несколько простых шагов.
1) Загрузите Openssl из: здесь.
2) Создайте папку openssl на диске C
3) Извлеките файлы Zip в эту папку openssl, созданную на диске C.
4) Скопируйте файл debug.keystore из папки .android в моем случае (C:\Users\SYSTEM.android) и вставьте в папку JDK bin в моем случае (C: \ Program Files \ Java \ jdk1.6.0_05 \ bin)
5) Откройте командную строку и укажите путь к папке JDK Bin в моем случае (C: \ Program Files \ Java \ jdk1.6.0_05 \ bin).
6) Скопируйте следующий код и нажмите Enter
keytool -exportcert -alias androiddebugkey -keystore debug.keystore> c: \ openssl \ bin \ debug.txt
7) Теперь вам нужно ввести пароль, пароль = Android.
8) Если вы видите в папке openssl Bin, вы получите файл с именем debug.txt
9) Теперь вы можете перезапустить командную строку или работать с существующей командной строкой.
10) Вернитесь на диск C и укажите путь к папке openssl Bin.
11) скопируйте следующий код и вставьте
openssl sha1 -binary debug.txt> debug_sha.txt
12) вы получите debug_sha.txt в папке openssl bin
13) Снова скопируйте следующий код и вставьте
openssl base64 -in debug_sha.txt> debug_base64.txt
14) вы получите debug_base64.txt в папке openssl bin
15) Откройте файл debug_base64.txt. Вот ваш хэш ключа.
ОБНОВЛЕННЫЙ ОТВЕТ (Генерация с помощью кода) Более простой метод:
По моему опыту, openssl всегда был проблематичным, я попробовал второй метод, предложенный Facebook. И это прекрасно. Это лучший способ получить хеш-ключ.
Второй вариант - распечатать ключевой хеш, отправленный в Facebook, и использовать это значение. Внесите следующие изменения в метод onCreate() в своей основной деятельности:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.facebook.samples.loginhowto",
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) {
}
...other operations
}//end of onCreate
Замените com.facebook.samples.loginhowto на собственное имя пакета (имя пакета в Manifest.xml).
Официальная ссылка - https://developers.facebook.com/docs/android/login-with-facebook/ (см. Внизу страницы)
СТАРЫЙ ОТВЕТ (Генерация Keyhash с использованием openssl)
- для генерации подписи вам нужно установить openssl на ваш компьютер. Если у вас нет одной загрузки openssl отсюда
- В C: создать
openssl
папка - распаковать содержимое загруженного zip-файла openssl в
openssl
папка вC:
привод - открыть командную строку
- перейти к
bin
изopenssl
т.е.C:\openssl\bin
в командной строке выполните следующую команду, чтобы сгенерировать ваш хеш-ключ. При создании hashkey он должен спрашивать у вас пароль.
keytool -exportcert -alias androiddebugkey -keystore "C: \ Users \ Anhsirk.android \ debug.keystore" | openssl sha1 -binary | openssl base64
ПРИМЕЧАНИЕ: в приведенном выше коде обратите внимание, что вам нужно указать свой путь для пользователя (т.е. в моем случае это C:\Users\Anhsirk, вам просто нужно изменить его для своей учетной записи пользователя).
Дай пароль как андроид
, Если он не запрашивает пароль, ваш путь к хранилищу ключей неверен.
Если все работает нормально, вы должны получить хэш-ключ ниже.
Самый простой способ генерировать хеш-ключ.
Требование: ключ SHA1
Вы можете найти ключ SHA1, запустив signatureReport
Смотрите изображение ниже.
после запуска файла будет сгенерирован ваш вывод, содержащий требуемый ключ sha1.
Затем перейдите на http://tomeko.net/online_tools/hex_to_base64.php
и вставьте свой ключ sha1
и, наконец, вы получите Обязательный HashKey.
Правильный ключ можно получить из самого приложения, добавив следующий код для добавления правильного ключевого хеша (в случае Facebook SDK 3.0 и более поздних версий это работает)
try {
PackageInfo info = getPackageManager().getPackageInfo("com.package.mypackage", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("MY KEY HASH:", sign);
Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
Замените com.package.mypackage на имя вашего пакета
I. Создать ключ хэш отладки для Facebook
Добавьте код, чтобы распечатать ключ хеш для Facebook
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.google.shoppingvn", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.i("KeyHash:",
Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
II. Создать ключевой релиз хеш для Facebook
- Загрузить openssl-0.9.8e_X64
- Создайте папку openssl на диске C
- Распакуйте Zip файлы в папку openssl
- Пуск -> Выполнить: cmd (нажмите ввод)
- (нажмите) cd C:\Program Files\Java\jdk1.6.0_45\bin. Примечание. C:\Program Files\Java\jdk1.6.0_45\bin: путь к папке jdk на вашем компьютере.
(нажмите) keytool -exportcert -alias gci -keystore D:\folder\keystorerelease | C:\openssl\bin\openssl sha1 -binary | C:\openssl\bin\openssl base64. Примечание: D:\folder\keystorerelease: путь к вашему хранилищу ключей
Введите пароль хранилища ключей: это пароль, когда вы регистрируете хранилище ключей.
Тогда у вас будет ключевой хеш: jDehABCDIQEDWAYz5Ow4sjsxLSw=
Войти facebook. Доступ к управлению приложениями. Вставьте ключевой хеш в свое приложение на developers.facebook.com
ПРОСТОЕ РЕШЕНИЕ ДЛЯ ЭТОЙ ПРОБЛЕМЫ:
У меня была эта проблема в течение двух месяцев. Мои ключевые хэши были набраны до 9. Сегодня я наконец нашел простое решение:
ШАГ 1:
Установите на свой телефон Facebook SDK, который вы скачали со страницы разработчика Facebook. Не устанавливайте обычное приложение на Facebook. Убедитесь, что вы можете войти в Facebook. Тогда выйдите.
ШАГ 2:
Экспортируйте свое приложение с окончательным ключом релиза в виде apk, как вы делали это при загрузке в PlayStore.
ШАГ 3:
Поместите файл Apk на свой телефон через USB-кабель или USB-флешку.
ШАГ 4:
Установите приложение, используя файловый менеджер: Пример
ШАГ 5:
Запустите ваше приложение и попробуйте войти через Facebook. Откроется диалоговое окно с сообщением: "Ключ YOURHASHKEY не найден в консоли разработчика facebook"
ШАГ 6:
Запишите ключ.
ШАГ 7:
Поместите это в свою консоль разработчика Facebook и сохраните. Теперь вы сделали. Любой, кто загружает ваше приложение, опубликованное с ранее использованным хранилищем ключей, может войти в Facebook.
наслаждаться
Если вы выпускаете версию, используйте хранилище ключей, с которым вы экспортировали свое приложение, а не debug.keystore.
Наконец:)
Вот моя история:
Добавьте этот код к своему основному виду деятельности после настройки макета.
try { PackageInfo info = getPackageManager().getPackageInfo("PROJECTNAME", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT); Log.e("MY KEY HASH:", sign); //textInstructionsOrLink = (TextView)findViewById(R.id.textstring); //textInstructionsOrLink.setText(sign); Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show(); } } catch (NameNotFoundException e) { Log.d("nope","nope"); } catch (NoSuchAlgorithmException e) { }
Измените имя проекта на имя вашего пакета!
- Подпишите свое приложение (Инструменты Android-> Экспорт подписанного приложения)
- В вашей основной деятельности, где вы вставляете код из 2 опций, в макете создайте TextView с идентификатором текстовой строки
- раскомментируйте две строки, чтобы ваш код подписи был установлен на TextView 6 Wuolia, у вас есть HASH, установите приложение на свой телефон!!! и проверьте свой ключ хеша!
- Теперь, когда оно видно, перейдите в созданное вами приложение на Facebook и добавьте его в [Ключевые хэши]
- Обратите внимание, что имя вашего пакета должно быть таким же, как на Facebook [Имя пакета] в разделе [Ключевые хэши]
- Хорошего дня:)
Одноканальное решение для создания в Facebook
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Чтобы сгенерировать хэш ключа разблокировки, вам нужно выполнить несколько простых шагов.
1) Скачать Openssl
2) Создайте папку openssl на диске C
3) Извлеките файлы Zip в эту папку openssl, созданную на диске C.
4) Скопируйте файл debug.keystore из папки.android в моем случае (C:\Users\SYSTEM.android) и вставьте в папку JDK bin в моем случае (C: \ Program Files \ Java \ jdk1.6.0_05 \ bin)
5) Откройте командную строку и укажите путь к папке JDK Bin в моем случае (C: \ Program Files \ Java \ jdk1.7.0_40 \ bin).
6) Скопируйте следующий код и нажмите Enter
keytool -exportcert -alias abcd-keystore D: \ Projects \ MyAppFolder \ keystore.txt | C: \ openssl \ bin \ openssl sha1 - двоичный файл | C:\openssl\bin\openssl base64 ex - keytool -exportcert -alias (ваше имя псевдонима apk введите здесь, как мой знак apk alian name is abcd)-keystore "подписанный apk сгенерированный склад ключей apth enter here" | "путь к папке openssl bin введите здесь" sha1 - двоичный файл | "путь к папке openssl bin введите здесь" base64
7) Теперь вам нужно ввести пароль, Пароль = (введите здесь свой пароль для хранения пароля)
8) у вас есть хранилище ключей, которое используется для освобождения ключа хэша приложения
Несмотря на то, что эта ветка старая, я хотел бы поделиться своим опытом (недавно начал работать с Facebook), который мне кажется прямым:
- Загрузите openssl по ссылке ниже: https://code.google.com/p/openssl-for-windows/downloads/list
- Разархивируйте его на локальный диск (например, C:\openssl)
Чтобы получить ключ разработки для интеграции с Facebook, используйте следующую команду из командной строки в Windows:
keytool -exportcert -alias androiddebugkey -keystore% HOMEPATH%.android \ debug.keystore | "C: \ openssl \ bin \ openssl.exe" sha1 -binary | "C: \ openssl \ bin \ openssl.exe" base64
ПРИМЕЧАНИЕ!: замените путь к openssl.exe (в данном примере это "C:\openssl\bin\openssl.exe") вашим собственным путем установки.
- Он запросит пароль, например,
Введите пароль хранилища ключей: Android
Введите Android в качестве пароля, как показано выше.
Это оно! Вам будет дан ключ длиной 28 символов. Ура!
Используйте ту же процедуру, чтобы получить ключ разблокировки. Просто замените команду на следующую и используйте псевдоним ключа разблокировки.
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | "ПУТЬ ДЛЯ openssl.exe" sha1 -binary | openssl base64
Сгенерировать отладочный хэш-ключ
public String hashkey(Context context) {
String keyhash = "";
try {
PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 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));
keyhash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
}
} catch (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
return keyhash;
}
Генерировать деблокированный ключ
keytool -exportcert -alias specialbridge -keystore /home/shilpi/newproject/specialBridge/SpecialBridgeAndroid/keystore/specialbridge.jks | openssl sha1 -binary | openssl base64
Отличный пост в блоге на эту тему
Извлечение ключевого хэша из ключа.p12
- Откройте Терминал или Командную строку и перейдите туда, где находится ваш ключ.p12.
- Введите: "keytool -v -list -keystore mycert.p12 -storetype pkcs12″, где mycert.p12 - имя файла вашего ключа.p12.
- Введите пароль хранилища ключей (тот, который вы использовали при экспорте ключа.p12). 4 Скопируйте текст байта подписи отпечатка пальца sha1.
- Байты в сигнатуре отпечатка пальца sha1 необходимы для записи файла "sha1.bin". Вы можете использовать шестнадцатеричный редактор, чтобы вставить скопированные вами байты. После этого сохраните файл как "sha1.bin".
- Снова откройте терминал и введите: "openssl base64 -in sha1.bin -out base64.txt".
- Результирующий файл "base64.txt" будет содержать хэш-ключ, необходимый для Facebook.
Отличный и простой шестнадцатеричный редактор для Mac: HexFiend
OpenSSL должен быть предварительно установлен на Mac, и вот ссылка на версию для Windows.
Попробуйте передать пароль для ключа и сохранить как часть команды
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -keypass android -storepass android \
| openssl sha1 -binary \
| openssl base64
Если ваш пароль =android неправильный, тогда поставьте пароль вашего ПК, чтобы он работал для меня.
А для генерации keyHash попробуй вот эту ссылку
Привет всем, моя история, как я подписан, имеет ключ для Facebook
Прежде всего, вы просто скопировать эти 2 метода в вашем первом классе
private void getAppKeyHash() {
try {
PackageInfo info = getPackageManager().getPackageInfo(
getPackageName(), 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));
System.out.println("HASH " + something);
showSignedHashKey(something);
}
} catch (NameNotFoundException e1) {
// TODO Auto-generated catch block
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());
}
}
public void showSignedHashKey(String hashKey) {
AlertDialog.Builder adb = new AlertDialog.Builder(this);
adb.setTitle("Note Signed Hash Key");
adb.setMessage(hashKey);
adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
adb.show();
}
** Вызовите функцию getAppKeyHash() из вашего метода oncreate, если вы хотите подписанный хеш, затем сделайте подписанную сборку, установите подписанную сборку и запустите, вы получите хеш-ключ в диалоговом окне, просто отметьте его и обновите в учетной записи разработчика Facebook, прокомментируйте эту функцию и сделайте другую подписанный APK **
Я был в состоянии выполнить запрошенную задачу с некоторыми из решений здесь, но подумал про себя, парень, что глупо... почему бы не написать небольшой Java-код, который делает это, и упаковать его в Jar, так я и сделал...
Работает на Windows 8... не пробовал другие ОС.
Используйте это в kotlin для печати ключа хэша в журнале
try {
val info = context.getPackageManager().getPackageInfo(context.packageName,
PackageManager.GET_SIGNATURES);
for (signature in info.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("Key hash ", android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT))
}
}catch (e:Exception){
}
Единственное, что работает для меня, это использование пароля android
, Почему это не упоминается ни в одном руководстве?