Ключевой хэш для приложения Android-Facebook

Я работаю над приложением для Android, в которое хочу интегрировать функцию публикации в Facebook. Я скачал SDK Facebook-Android и получил там readme.md (текстовый файл), в котором упоминается, что он генерирует хэш ключа для Android. Как мне это сгенерировать?

40 ответов

Вот шаги

  1. Загрузите openssl из кода Google (если у вас 64-битная машина, вы должны загрузить openssl-0.9.8e X64 не последнюю версию)

  2. Извлеките это. создайте папку - OpenSSL в C:/ и скопируйте извлеченный код здесь.

  3. определить путь к файлу debug.keystore. Если вы не нашли, то выполните поиск в C:/ и используйте путь в команде на следующем шаге.

  4. определите путь к файлу keytool.exe и перейдите в командную строку этого каталога / dir и запустите эту команду в 1 строке

    $ keytool -exportcert -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator.android\debug.keystore" | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64

    • он попросит пароль, поставь андроид
    • это все. ты получишь ключик

Для получения дополнительной информации посетите здесь

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

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

Вы можете удалить код, узнав ключ;)

Я создал небольшой инструмент для Windows и Mac OS X. Просто добавьте файл хранилища ключей и получите ключ хеша.

Если вам нужен файл debug.keystore по умолчанию, используйте псевдоним и пароль по умолчанию. Иначе, используйте свой собственный файл хранилища ключей и значения.

Проверьте это, загрузите версию для Windows или загрузите версию для Mac OS X (Dev-Host иногда может быть недоступен... поэтому, если ссылка не работает, напишите мне в личку, и я исправлю это).

Я надеюсь, что это поможет вам, ребята...

31 декабря 2014 г. - РЕДАКТИРОВАТЬ: Изменен хост на AFH. Пожалуйста, дайте мне знать, если ссылки не работают

21 ноября 2013 г. - РЕДАКТИРОВАТЬ:

По просьбе пользователей я добавил расположение хранилища ключей по умолчанию и кнопку "ПОЖАЛУЙСТА". Не стесняйтесь использовать его, если я помог вам.:)

СкриншотСнимок экрана 2

Инструкции, которые в настоящее время содержатся в учебнике по Android для Facebook, плохо работают под Windows. Их пример показывает, как передать вывод keytool в openssl, но если вы попробуете это под Windows, то вывод по какой-то причине недопустим. Я обнаружил, что мне пришлось использовать промежуточные файлы, чтобы заставить его работать должным образом. Вот шаги, которые работали для меня:

Начните с загрузки openssl для Windows из Google.

C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin

C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin

C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt

После выполнения этих команд действительный хэш сохраняется в файле base64.txt. Скопируйте и вставьте это в настройки своего приложения на Facebook.

Вот что дано на официальной странице Facebook:

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

Позвольте мне разбить эту команду на фрагменты.

  1. Ищу "keytool.exe", Вы можете искать это на диске C:. Вы можете найти это в "java jdk" или же "java jre", Если вы установили несколько версий, выберите любую.

  2. Откройте приглашение CMD и перейдите в указанный выше каталог, где вы нашли "keytool.exe",

    Кликните "exe`" и вставьте указанную выше команду, представленную на странице Facebook.

  3. При вводе этого сообщения вы получите сообщение об ошибке, что OpenSSL не распознается как команда ввода-вывода. Решение: Загрузите Openssl из OpenSSL (если у вас 64-битная машина, вы должны загрузить openssl-0.9.8e X64). Распакуйте и сохраните в любом месте... Я сохранил его на диске C: в OpenSSl папка

  4. Замените openssl в приведенной выше команде, в которой вы получили ошибку OpenSSL, на "C:\OpenSSL\bin\openssl" в обоих местах после канала, "|".

  5. Если будет предложено ввести пароль, введите android,

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

Вы можете получить хэш ключа из ключа SHA-1. Это очень просто: вам нужно получить ключ SHA-1(подписанный APK) из Play Store, проверьте изображение ниже.

Теперь скопируйте этот ключ SHA-1 и вставьте его на этот сайт http://tomeko.net, также проверьте изображение ниже, чтобы получить свой хеш-ключ.

Добавить этот код в onCreate вашей деятельности, он напечатает хеш под тегом KeyHash в вашем logCat

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           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));
    }
}
catch (NameNotFoundException e) {

}
catch (NoSuchAlgorithmException e) {

}

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

Чтобы получить хэш-код ключа Android, выполните следующие действия:

  1. Загрузите OpenSSL для Windows здесь
  2. Теперь распакуйте на диск C
  3. Откройте приглашение CMD
  4. Тип cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. Затем введите только keytool -export -alias myAlias -keystore C:\Users\ваш логин\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Готово

Самое простое решение, которое я нашел, это:

  • Откройте Log Cat
  • Попробуйте получить доступ к Facebook с помощью Android SDK
  • Найдите в журнале строку, которая выглядит следующим образом:

    04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch. 
    Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your
    application settings. Check your application settings at 
    http://www.facebook.com/developers
    
  • Скопируйте "abcdefgHIJKLMN+OPqrstuvwzyz" и вставьте его в область "Хэш-ключ" Facebook Android.

Я сделал таким образом для ОС Linux и ОС Windows:

Linux:

  • Скачать Openssl
  • Открытый терминал
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

Пожалуйста, измените Alias ​​Name и Keystore, указав путь к нему в соответствии с вашими требованиями.

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

Итак, наконец, вы получите Release Hashkey.

Окна:

Шаги для выпуска Hashkey:

  • Скачать Openssl (скачать отсюда), я скачал для 64-битной ОС, вы можете найти больше здесь
  • Распакуйте загруженный zip-файл только на диск C:\
  • Открыть командную строку
  • keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64

Пожалуйста, измените Alias ​​Name и Keystore, указав путь к нему в соответствии с вашими требованиями.

Замечания:

Пожалуйста, укажите свои данные там, где я отметил ** **.

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

Итак, наконец, вы получите Release Hashkey.

Готово

  • скачать OpenSSL для Windows здесь вы можете найти 64-битные и 32-битные здесь

  • извлечь загруженный файл

  • создать имя папки openSSL на диске C
  • скопировать все извлеченные элементы в папку openSSL (bin,include,lib,openssl.cnf)
  • получить хранилище ключей отладки Android, расположение по умолчанию будет

C:\Users\ имя пользователя \.android\debug.keystore

  • Теперь получите командную строку и вставьте этот код

keytool -exportcert -alias androiddebugkey -keystore C:\Users\username.android\debug.keystore | "C:\openSSL\bin\openssl" sha1 -binary | "C:\openSSL\bin\openssl" base64

  • нажмите Enter, и вы получите 28-значный код

Вам необходимо создать хранилище ключей с помощью keytool для подписанных приложений для Android, как в процедуре, описанной на сайте Android, затем вам нужно установить cygwin, а затем вам нужно установить openssl из кода Google, а затем просто выполнить следующую команду, и вы получите хеш ключ для Android, а затем вставьте этот хэш-ключ в приложение Facebook, которое вы создали. И тогда вы можете получить доступ к приложению facebook через приложение Android для публикации стены (например, "publish_stream").

$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binary | openssl base64

Вам необходимо выполнить вышеуказанную команду из cygwin.

  1. Просто откройте ваш основной файл активности и создайте функцию, упомянутую ниже:

         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 (PackageManager.NameNotFoundException e) {
    
    } catch (NoSuchAlgorithmException e) {
     }
    

1.1 Запустите ваше приложение, это сгенерирует хэш-ключ для вашего приложения.

  1. Теперь откройте журнал cat и выполните поиск с помощью "KeyHash" и скопируйте ключ хеша.

  2. Сгенерировав ключ Hash, вы можете удалить эту функцию.

Загрузите openSSL -> Установите его -> обычно он устанавливается в C:\OpenSSL

затем откройте cmd и введите

cd../../Program Files (Enter)

java (Enter)

dir (Enter)

cd jdk1.6.0_17 (varies with jdk versions) (Enter)

чтобы проверить версию jdk, перейдите в C:/program files/java/jdk_version

cd bin (enter)

keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter)

Он попросит вас ввести пароль для Android.

Официальная документация на сайте разработчика Facebook:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                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) Создайте ключ для подписи приложения и запомните псевдоним.

2) Установите OpenSSL.

3) Поместите папку bin OpenSSL в ваш путь.

4) Выполните шаги, указанные в разделе "Настройка единого входа" на странице FB-Android-SDK, и сгенерируйте свой хэш-ключ. Убедитесь, что вы указали правильное имя файла псевдонима и хранилища ключей.

5) Создайте приложение в Facebok и на вкладке "Мобильные устройства" введите этот хэш-ключ.

Доступны два метода: сложный и простой.

Первый метод:(немного сложный)

сначала вам нужно скачать ssl 64bit или 32bit соответственно, не забудьте загрузить файл с именем, содержащим eпосле кода версии openssl-0.9.8e_X64.zip ИЛИ openssl-0.9.8e_WIN32.zip не сk после кода версии,

и поместите в каталог AndroidStudio/jre/bin, если вы не знаете, где разместить, вы можете найти этот каталог, щелкнув правой кнопкой мыши ярлык студии Android как:

теперь вы справились с двумя необходимыми вещами в одном месте, но все же вы должны найти путь для своего debug.keystore, который всегда можно найти в "C:\Users\yourusernamehere\.android\debug.keystore",

ПРИМЕЧАНИЕ. Если ваше приложение уже опубликовано или собирается опубликовать, используйте хранилище ключей подписи публикации, если и только если вы тестируете в режиме разработки, чем вы можете использовать отладку, keyotre

Поскольку все настроено, позвольте организовать команду, которую вы хотите выполнить для генерации хэш-ключа, в base64 format, и ваша команда будет выглядеть так

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64

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

Второй способ (соответственно простой)

Если вы не хотите выполнять все описанные выше действия, просто используйте следующий метод для регистрации ключа:

 private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("KeyHash:", e.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("KeyHash:", e.toString());
        }
    }

выход:

Для приложения Android

Этот код используется для получения хеш-ключа в вашем приложении Android для интеграции с Facebook. Я проверил все устройства, и это работает. Измените только имя пакета этого кода:

private void facebookHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashCode  = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            System.out.println("Print the hashKey for Facebook :"+hashCode);
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}

Для Linux

Открытый терминал:

Для отладки сборки

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

вы найдете debug.keystore из папки ".android", скопируйте его, вставьте на рабочий стол и выполните команду выше

Для выпуска Build

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

ПРИМЕЧАНИЕ. Убедитесь, что в обоих случаях требуется запрос пароля. Если он не запрашивает пароль, значит, что-то не так в команде.

В Android Studio просто нажмите на правой боковой панели "Gradle", чтобы отобразить панель Gardel, затем: -YOURAPPNAME --Task ---Android ----(двойной щелчок) signatureReport (для запуска Gradle Daemon)

то вы увидите результат:

Config: debug
Store: C:\Users\username\.android\debug.keystore
Alias: AndroidDebugKey
MD5: C8:46:01:EA:36:02:D1:21:1B:23:19:91:D4:32:CB:AC
SHA1: 38:AB:4C:01:01:D7:62:E0:61:D1:9F:52:04:0C:E5:07:4E:E4:9B:39
SHA-256: 1B:8C:DC:35:48:10:01:2C:1F:BD:01:64:F1:01:06:01:60:01:A6:8B:10:15:2E:BF:7B:C4:FD:38:4C:C1:74:01
Valid until: Saturday, February 12, 2050

скопировать SHA1:

38:AB:4C:01:01:D7:62:E0:68:D1:9F:52:04:0C:E5:07:4E:E4:9B:39

перейти на эту СТРАНИЦУ

Вставьте SHA1 и сгенерируйте хеш-код ключа Facebook.

В ответ на похожую проблему я обнаружил, что это работает для меня:

  • Скопируйте apkname.apk файл, который вы хотите знать хеш в папке 'Java \ jdk1.7.0_79 \ bin'
  • Запустите эту команду keytool -list -printcert -jarfile apkname.apk
  • Скопируйте SHA1 оценить и конвертировать его с помощью этого сайта
  • Используйте преобразованное значение Keyhash (например, zaHqo1xcaPv6CmvlWnJk3SaNRIQ =)
keytool -exportcert -alias androiddebugkey -keystore       C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64

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

шаги:

1) Open command line go to - > java Keytool..... for me C:\Program Files\Java\JDK1.7\bin
2) Download OpenSSL from google
3) paste this with changing your paths -
   keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 

    ....................   give proper debug.keystore path and openSSL path .. 

4) Finley it may be ask u password .. so give password -> android   ...
5) you will get 28 characters that will be your has key

Используйте это для печати ключа хэша в 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){

    }

Самое простое решение:

  1. Не добавляйте ключ хеша, реализуйте все остальное
  2. При нажатии входа в Facebook вы получите сообщение об ошибке "Недопустимый хэш ключа. Хэш ключа" xxx "не соответствует ни одной сохраненной клавише...."
  3. Откройте инструментальную панель приложения facebook и добавьте хэш "xxx=" (хэш "xxx" от знака ошибки + "=")

Решена моя тоже в Android Studio, но с немного другим подходом.

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

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

  1. Значение SHA-1 выглядит так: 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.

Часть этого ответа взята отсюда Github Link

Чтобы сгенерировать хэш ключа разблокировки, выполните следующую команду на Mac или Windows, заменив псевдоним ключа разблокировки и путь к хранилищу ключей.

В Windows используйте:

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

Эта команда должна генерировать строку из 28 символов. Помните, что КОПИРУЙТЕ и ВСТАВЛЯЙТЕ этот хэш ключа релиза в настройки Android вашего идентификатора приложения Facebook.

image: fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png

Ссылка: https://developers.facebook.com/docs/android/getting-started и http://note.taable.com/

Наилучший подход - использовать следующий код:

private void getHashKey(String pkgName)
{
    try
    {
        PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures)
        {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashKey = Base64.encodeBytes(md.digest());
            _hashKey_et.setText(hashKey);
            Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey);
        }
    }
    catch (NameNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
}

Но я был так расстроен тем фактом, что не существует простого инструмента для генерации HashKey для приложения Facebook. Каждый раз мне приходилось играть с Openssl и Keytool или использовать код, чтобы получить хэш из подписи...

Поэтому я написал простой KeyGenTool, который сделает эту работу за вас: -> KeyGenTool в Google Play <-

Наслаждаться:)

Вот версия Xamarin

      
private void printKeyHash()
{
    try
    {
        PackageInfo info = PackageManager.GetPackageInfo(PackageName, PackageInfoFlags.Signatures);
        foreach (var signature in info.Signatures)
        {
            MessageDigest md = MessageDigest.GetInstance("SHA1");
            md.Update(signature.ToByteArray());
            var hash = Base64.EncodeToString(md.Digest(), Base64Flags.Default);
            Log.Debug("KeyHash:", hash);
        }
    }
    catch (PackageManager.NameNotFoundException e)
    {

    }
    catch (NoSuchAlgorithmException e)
    {

    }
}

Я сделал небольшую ошибку, которую следует иметь в виду. Если вы используете хранилище ключей, то укажите псевдоним, а не androiddebugkey...

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

Пожалуйста, смотрите ниже.

C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name  -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64

Затем нажмите Enter - он попросит вас ввести пароль, а затем введите пароль хранилища ключей, а не Android.

Здорово.

Я только что сделал инструмент для этой цели, то есть https://keyhash.vaibhavpandey.com/. Это проще, чем что-либо еще, так как вам нужно просмотреть хранилище ключей на своем компьютере и ввести кодовую фразу для создания версий SHA-1 Hex и Base64 для Google и Facebook соответственно.

Не беспокойтесь о хранилище ключей или кодовой фразе, поскольку работа выполняется полностью в браузере, вы можете проверить вкладку сети, и инструмент также является открытым исходным кодом по адресу https://github.com/vaibhavpandeyvpz/keyhash.

Другие вопросы по тегам