Как создать Android Facebook Key Hash?
Я не понимаю этот процесс. Я смог перейти к папке, содержащей keytool в Java SDK. Хотя я продолжаю получать ошибку openssl не распознается как внутренняя или внешняя команда. Проблема в том, что даже если я смогу заставить это работать, что я буду делать и с чем потом?
18 ответов:
вот что вам нужно сделать -
скачать openSSl из код Извлечь его. создайте папку-OpenSSL в C: / и скопируйте извлеченный код здесь.
обнаружить отладки.путь к файлу хранилища ключей. Если u не нашел, то выполните поиск в C:/ и используйте путь в команде на следующем шаге.
обнаружения ваших ключей.exe-путь и перейдите в эту командную строку dir/ in и запустите эту команду в 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он запросит пароль, поставит андроид вот и все. u получит ключ-хэш
для Linux и Mac
Открыть Терминал :
Для Построения Debug
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64вы найдете "отладка".хранилища ключей в ".папку Android". Скопируйте его и вставьте на рабочий стол и выполните приведенную выше команду.
для построения выпуска
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64Примечание : убедитесь, что в обоих случаях он запрашивает пароль. Если он не запрашивает пароль, это означает, что что-то не так в команде. Пароль для "отладка".хранилища ключей и "android" и для выхода вы должны ввести пароль, который вы установить во время создания хранилища ключей.
пожалуйста, попробуйте это:
public static void printHashKey(Context pContext) { try { PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String hashKey = new String(Base64.encode(md.digest(), 0)); Log.i(TAG, "printHashKey() Hash Key: " + hashKey); } } catch (NoSuchAlgorithmException e) { Log.e(TAG, "printHashKey()", e); } catch (Exception e) { Log.e(TAG, "printHashKey()", e); } }
OpenSSL: вы должны установить это, если он не поставляется с предустановленной операционной системой (например, Windows не имеет предустановленной). Как установить это зависит от вашей ОС (для Windows проверьте ссылке предоставлено coder_For_Life22).
самый простой способ без возни-это копирование этого openssl.exe двоичный файл для вашего пути keytool, если вы находитесь на Windows. Если вы не хотите этого делать, вы должны добавить его в свой
PATHокружающая среда переменная. Затем выполните команду, указанную в документах.keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64обратите внимание, что аргумент после
-keystoreуказывает на хранилище ключей отладки. Такое расположение зависит от вашей операционной системы. Должен быть в одном из следующих мест:
- Windows Vista или 7 - C:\Users\.android\debug.хранилища ключей
- Windows XP - C:\Documents и настройки\.android\debug.хранилища ключей
- OS X и Linux -~/.андроид/отладки.хранилища ключей
если вы все сделали правильно, вам будет предложено ввести пароль. То есть
androidдля сертификата. Если пароль правильный, консоль выводит хэш (несколько случайных символов и чисел).возьмите это и скопируйте в
android key hashполе внутри настроек вашего приложения на facebook. Чтобы попасть туда, зайдите вdevelopers.facebook.com/apps, выберите приложение, перейдите вEdit settingsи прокрутки вниз. После этого, подождите несколько минут, пока изменения вступят в силу.
чтобы создать свой хэш ключа на локальном компьютере, запустите утилиту keytool Java (которая должна быть на пути к вашей консоли) против хранилища ключей отладки Android. Это, по умолчанию, в вашем доме .каталог Android). В 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надеюсь, что это поможет вам
Ref-разработчик сайта facebook
Для Windows:
- открыть командную строку и вставьте следующую команду
keytool-exportcert-псевдоним androiddebugkey-keystore %HOMEPATH%.android\debug.keystore / openssl sha1-binary | openssl base64
введите пароль: android -- > нажмите Enter
скопируйте сгенерированный хэш-ключ -- > войдите в Facebook с помощью своей учетной записи разработчика
Go в вашем приложении Facebook -- > настройки-- > вставить хэш-ключ в опции "ключевые хэши" -->сохранить изменения.
теперь протестируйте свое приложение для android с помощью Facebook Log-in / Share и т. д.
есть и короткое решение. Просто запустите это в своем приложении:
FacebookSdk.sdkInitialize(getApplicationContext()); Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));более длинный, который не нуждается в FB SDK (на основе решения здесь):
public static void printHashKey(Context context) { try { final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES); for (android.content.pm.Signature signature : info.signatures) { final MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); final String hashKey = new String(Base64.encode(md.digest(), 0)); Log.i("AppLog", "key:" + hashKey + "="); } } catch (Exception e) { Log.e("AppLog", "error:", e); } }результат должен заканчиваться на"=".
вот как я получил мое:
private class SessionStatusCallback implements Session.StatusCallback { @Override public void call(Session session, SessionState state, Exception exception) { if (exception != null) { new AlertDialog.Builder(FriendActivity.this) .setTitle(R.string.login_failed_dialog_title) .setMessage(exception.getMessage()) .setPositiveButton(R.string.ok_button, null) .show(); }поэтому, когда вы пытаетесь войти без ключа, возникает исключение. Facebook поместил правильный ключ в это исключение. Все, что вам нужно сделать, это скопировать его.
для кого-то вроде меня вот подробная информация (Для Windows)
1. скачать OpenSSl либо 1-й или 2-й на основе вашей системы 32bit или 64bit .
2. извлеките загруженный zip внутри каталога C
3. откройте извлеченную папку до bin и скопируйте путь ,это должно быть что-то типа
C:\openssl-0.9.8k_X64\bin\openssl(добавить \openssl на конец)4. (получить путь к папке bin Jdk ,если вы знаете,как, игнорировать это ) .
откройте android studio ~file~структура проекта (ctrl+alt+shift+s), выберите расположение SDK в левой боковой панели, скопируйте расположение JDK и добавьте /bin к нему
таким образом, окончательное расположение JDK будет похоже
C:\Program Files\Android\Android Studio\jre\binмы следуем этому методу, чтобы получить расположение Jdk, потому что вы можете использовать встроенный jdk, как я
теперь у вас есть OpenSSl location & JDK location
5. теперь нам нужно отладить расположение хранилища ключей, для этого откройте C~>Users~>YourUserName~>.android должно быть имя файла debug.хранилище ,скопировать путь ,это должно быть что-то типа
C:\Users\Redman\.android\debug.keystore6. теперь откройте командную строку и введите команду
cd YourJDKLocationFromStep4в моем случае
cd C:\Program Files\Android\Android Studio\jre\bin7. теперь построим следующую команду
keytool -exportcert -alias androiddebugkey -keystore YOURKEYSTORELOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64в моем случае команда будет выглядеть так
keytool -exportcert -alias androiddebugkey -keystore C:\Users\Redman\.android\debug.keystore | C:\openssl-0.9.8k_X64\bin\openssl sha1 -binary | C:\openssl-0.9.8k_X64\bin\openssl base64теперь введите эту команду в командной строке , если вы когда-либо делали все правильно, вам будет предложено ввести пароль (пароль-android)
Enter keystore password: androidвот и все, вам будет дан хэш ключа, просто скопируйте его и используйте
затем добавьте openssl\bin к системным переменным пути:
Мой Компьютер - > Свойства - > расширенные конфигурации - > расширенные - > системные переменные - > в разделе системные переменные найдите путь и добавьте его в свои окончания: ;yourFullOpenSSLDir\bin
теперь откройте командную строку в папке jdk\bin C:\Program Files\Java\jdk1. 8. 0_40\bin (в windows удерживайте shift и щелкните правой кнопкой мыши -> открыть командную строку здесь) и использование:
keytool -exportcert -alias keystorealias -keystore C:\yourkeystore\folder\keystore.jks | openssl sha1 -binary | openssl base64и скопируйте номер длины 28, который он генерирует после ввода пароля.
начиная с API 26, Вы можете создать свой ХЭШ-КЛЮЧИ использовать следующий код Котлин без какой-либо необходимости Facebook SDK.
fun generateSSHKey(context: Context){ try { val info = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES) for (signature in info.signatures) { val md = MessageDigest.getInstance("SHA") md.update(signature.toByteArray()) val hashKey = String(Base64.getEncoder().encode(md.digest())) Log.i("AppLog", "key:$hashKey=") } } catch (e: Exception) { Log.e("AppLog", "error:", e) } }
вы можете получить все ваши отпечатки пальцев от https://console.developers.google.com/projectselector/apis/credentials
И используйте этот код Котлина, чтобы преобразовать его в keyhash:fun main(args: Array<String>) { listOf("<your_production_sha1_fingerprint>", "<your_debug1_sha1_fingerprint>", "<your_debug2_sha1_fingerprint>") .map { it.split(":") } .map { it.map { it.toInt(16).toByte() }.toByteArray() } .map { String(Base64.getEncoder().encode(it)) } .forEach { println(it) } }
Я нашел самый простой инструмент и использовать его много раз, он отлично работает. проверьте это, это поможет.
Регистрация этой ответьте для получения более подробной информации.
запустите либо это в вашем приложении:
FacebookSdk.sdkInitialize(getApplicationContext()); Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this)+"=");или такой:
public static void printHashKey(Context context) { try { final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES); for (android.content.pm.Signature signature : info.signatures) { final MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); final String hashKey = new String(Base64.encode(md.digest(), 0)); Log.i("AppLog", "key:" + hashKey + "="); } } catch (Exception e) { Log.e("AppLog", "error:", e); } }а затем посмотрите на журналы.
результат должен заканчиваться на"=".
У меня была та же самая проблема, меня не спрашивали пароль, и кажется, что у меня был неправильный путь для файла хранилища ключей.
на самом деле, если keytool не находит хранилище ключей, которое вы установили, он создаст его и даст вам неправильный ключ, так как он не использует правильный.
общее правило заключается в том, что если у вас не запрашивается пароль, то у вас создается неправильный ключ.
вы можете использовать этот apk
1.first install the app from the Google play store 2.install the above apk 3.launch the apk and input the package name of your app 4.then you will get the hash code you want
https://developers.facebook.com/docs/android/getting-started/
4.19.0-25 января 2017
Facebook SDK
изменен
Facebook SDK теперь автоматически инициализируется при запуске приложения. В большинстве случаев ручной вызов FacebookSDK.sdkInitialize () больше не требуется. Смотрите руководство по обновлению для более подробной информации.
Для Отладки
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 (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }


Comments