java авторизация - Как создать Android-хэши Facebook Facebook?




через ключ (14)

Для кого-то вроде меня здесь есть полная информация (для Windows)

1. Загрузите HERE либо 1-го, либо 2-го уровня на основе вашей 32- HERE или 64-битной системы.

2. Извлечь загруженный zip в каталог C

3. Откройте извлеченную папку до bin и скопируйте путь, это должно быть нечто вроде C:\openssl-0.9.8k_X64\bin\openssl (добавить \ openssl в конце)

4. (Получите путь к папке bin Jdk, если вы знаете, как это проигнорировать).

Open android studio ~ file ~ Структура проекта (ctrl + alt + shift + s), выберите местоположение SDK в левой боковой панели, скопируйте местоположение JDK и добавьте / bin к нему

Итак, окончательное местоположение JDK будет похоже на C:\Program Files\Android\Android Studio\jre\bin

мы следуем этому методу, чтобы получить местоположение Jdk, потому что вы можете использовать встроенный jdk, как я

теперь у вас есть местоположение OpenSSl и местоположение JDK

5. Теперь нам нужно отлаживать местоположение хранилища ключей, для этого открытого C ~> Users ~> YourUserName ~> .android должно быть имя файла debug.keystore, теперь скопируйте местоположение пути, это должно быть что-то вроде

C:\Users\Redman\.android\debug.keystore

6. Теперь откройте командную строку и введите команду

cd YourJDKLocationFromStep4  

в моем случае

 cd C:\Program Files\Android\Android Studio\jre\bin

7. Теперь создадим следующую команду

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

теперь введите эту команду в командной строке, если вы когда-либо делали правильно, вас попросят ввести пароль (пароль - андроид)

Enter keystore password:  android

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

Я вообще не понимаю этот процесс. Я смог перейти к папке, содержащей keytool в Java SDK. Хотя я продолжаю получать ошибку openssl не распознается как внутренняя или внешняя команда. Проблема даже в том, что я могу заставить это работать, что бы я сделал и с чем потом?


Запустите это в своем приложении:

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);
    }
}

А потом посмотрите на журналы.

Результат должен заканчиваться на «=».

Решение основано here и here .


Для Windows:

  1. откройте командную строку и вставьте команду ниже

keytool -exportcert -alias androiddebugkey -keystore% HOMEPATH% .android \ debug.keystore | openssl sha1 -binary | openssl base64

  1. Введите пароль: android -> Hit Enter

  2. Скопировать сгенерированный хэш-ключ -> Войти в Facebook с учетной записью разработчика

  3. Перейдите в свое приложение Facebook -> Настройки -> Вставить хэш-ключ в опции «хэши-ключи» -> сохранить изменения.

  4. Теперь протестируйте свое приложение для Android с помощью Facebook-входа / совместного использования и т. Д.


OpenSSL: вы должны установить это, если он не поставляется с предустановленной операционной системой (например, Windows не предустановлена) . Как установить это зависит от вашей ОС (для Windows проверьте Code предоставленную coder_For_Life22).

Самый простой способ без возиться - это копирование бинарного файла openssl.exe на ваш путь keytool, если вы находитесь в Windows. Если вы не хотите этого делать, вы должны добавить его в PATH среды PATH . Затем выполните команду, представленную в документах.

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

Обратите внимание, что аргумент after -keystore указывает на ваше хранилище отладки. Это местоположение также зависит от вашей операционной системы. Должно быть в одном из следующих мест:

  • Windows Vista или 7 - C: \ Users \ .android \ debug.keystore
  • Windows XP - C: \ Documents and Settings \ .android \ debug.keystore
  • OS X и Linux - ~ / .android / debug.keystore

Если вы все сделали правильно, вам будет предложено ввести пароль. Это android для сертификата отладки. Если пароль правильный, консоль печатает хеш (несколько случайных символов и цифр).

Возьмите это и скопируйте его в поле android key hash в настройках вашего приложения на facebook. Чтобы попасть туда, перейдите на страницу developers.facebook.com/apps , выберите свое приложение, перейдите в « Edit settings и прокрутите вниз. После этого подождите несколько минут, пока изменения не вступят в силу.


Для легкой ссылки vedio tutorial для генерации KeyHash Here

Скачать openssl из HERE


Вы можете получить все свои отпечатки пальцев с https://console.developers.google.com/projectselector/apis/credentials
И используйте этот код Kotlin, чтобы преобразовать его в 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) }
}

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

Проверьте this ответ для получения более подробной информации.


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

Фактически, если keytool не найдет хранилище ключей, которое вы установили, оно создаст одно и даст вам неправильный ключ, поскольку он не использует правильный.

Общее правило состоит в том, что если вас не просят ввести пароль, тогда вы создадите не тот ключ.


Скачать open ssl :

Затем добавьте 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-значный номер, который он генерирует после ввода пароля.


Существует также короткое решение. Просто запустите это в своем приложении:

FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));

Более длинный, который не нуждается в FB SDK (на основе решения here ):

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);
    }
}

Результат должен заканчиваться на «=».


Для 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

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


Вот как я получил свое:

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 помещает ключ RIGHT в это исключение. Все, что вам нужно сделать, это скопировать его.


Попробуйте следующее:

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);
        }
    }

поскольку все сказали, что это сделает это

 new ArrayList<>(Arrays.asList(array))

и общий новейший способ создания массива - наблюдаемые массивы

ObservableList: список, который позволяет слушателям отслеживать изменения, когда они происходят.

для Java SE вы можете попробовать

FXCollections.observableArrayList(new Element(1), new Element(2), new Element(3));

это согласно Oracle Docs

observableArrayList () Создает новый пустой наблюдаемый список, который поддерживается arraylist. observableArrayList (E ... items) Создает новый список наблюдаемых массивов с добавленными элементами.

Обновление Java 9

также в Java 9 это немного легко:

List<String> list = List.of("element 1", "element 2", "element 3");




java android facebook