Ошибка входа в систему с ошибкой с помощью Facebook SDK

Я получаю «Ошибка входа в систему» ​​с помощью Android Android SDK во время работы на устройстве. Я сделал все, что они указали, например, создание хеша и все.

Ошибка:

Facebook-authorize (5539): Ошибка входа: invalid_key facebook error: com.facebook.android.FacebookError: invalid_key

Solutions Collecting From Web of "Ошибка входа в систему с ошибкой с помощью Facebook SDK"

Обновление: я написал более подробное сообщение в блоге об этой проблеме и объяснил, как это делает SSO: http://sean.lyn.ch/2011/07/android-the-facebook-sdk-sso-and-you/


Этот вопрос уже давно дан здесь (и в Android Android SDK ), но я собираюсь попробовать полное решение для всех, кто заканчивает эту тему.

Я развивался с помощью Android Android SDK в сочетании с PhoneGap и подключался к Phonegap Facebook. Шаг аутентификации работал нормально, пока я не перешел от развертывания на эмуляторе к реальному устройству. Сбой, который я видел при запуске adb logcat был следующим.

 D/Facebook-authorize( 2194): Login failed: invalid_key W/System.err( 2194): com.facebook.android.FacebookError: invalid_key 

Я понятия не имею, почему это сработало на эмуляторе, но не удалось на устройстве. Я подозреваю, что у Facebook есть сводная политика, позволяющая использовать неподписанные приложения .apk, потому что они не могут быть распределены.

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

Чтобы предоставить Facebook информацию о подписи, вам нужно запустить команду Jay, приведенную выше (здесь повторяется):

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

Это генерирует короткую строку символов (которая может включать символы, такие как '=' или '/'), которые идентифицируют подпись, называемую сертификатом. Как только у вас есть это, вы должны отдать его Facebook.

Найдите свое приложение на странице разработчика Facebook (или создайте новую, если вы еще не установили ее). После того, как вы на странице сводки приложений, выберите «Редактировать настройки», а затем выберите « Мобильные устройства» и « Устройства» с левой стороны. В разделе Android вы увидите окно для «Хэш Хэша». Вставьте строку сертификата из приведенной выше команды в это поле и нажмите «Сохранить».

Дайте ему несколько минут для распространения, и вы должны быть настроены!

Просто потратил пару часов на ту же проблему.

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

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

Если вы не используете ключ отладки для подписи APK, убедитесь, что keytool ссылается на хранилище ключей экспорта и что он использует указанный псевдоним. Вы увидите хранилище ключей и псевдоним, которые будут использоваться в экранах выбора «хранилища ключей» и «выбора ключевых псевдонимов» на экране мастера приложений Android Eclipse.

Кроме того, в разделе «Мобильные устройства и устройства» в настройках приложения я установил приложение «Родное приложение», а не «HTML 5 / Mobile web», так как я работаю с Android-приложением (и iOS one также).

Если приложение Facebook установлено на устройство, описанная ошибка будет поднята.

Удалите существующее приложение Facebook и запустите приложение; Он работает хорошо. Это проблема SDK.

Вы можете использовать этот код Java для генерации ключа:

 try { PackageInfo info = getPackageManager().getPackageInfo("**YOURPACKAGENAME**", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.i("PXR", Base64.encodeBytes(md.digest())); } } catch (NameNotFoundException e) {} catch (NoSuchAlgorithmException e) {} 

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

Keytool -exportcert -alias androiddebugkey -keystore ~ ​​/ .android / debug.keystore | Openssl sha1 -binary | Openssl base64

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

Работа с промежуточными файлами позволяет избежать этого. Использование рабочего стола Linux также может.

Я исправил ошибку:

Если вы добавите Facebook.FORCE_DIALOG_AUTH в строку авторизации:

 mFacebook.authorize( MundialRugby2011Activity.this, new String[] {"publish_stream", "read_stream", "offline_access"}, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener() ); 

У меня была аналогичная проблема (invalid_key), и для меня было решение установить Cygwin (я использую Windows 7 64-bit) и регенерировать ключ оттуда. У меня есть совершенно другой ключ (чем у PowerShell), и теперь мое приложение очень хорошо вписывается в систему.

Возможно, я решил проблему с неправильным ключом в Windows 7. См. Мой отчет в разделе « Неверная ключевая проблема» для приложения Android для вызова API Facebook .

Эта проблема, похоже, срабатывает, когда приложение Facebook установлено, поэтому SDK пытается использовать приложение для аутентификации. И эта часть, кажется, всегда терпит неудачу в моем случае.

Мое текущее решение проблемы заключается в том, чтобы убедиться, что вместо этого запускается диалоговое окно входа в систему. Способ сделать это – вмешаться в FB_APP_SIGNATURE в Facebook.java (последняя версия SDK от Line 763 от GitHub), в моем случае я просто заменил последнюю часть «928a2» пустой строкой.

Делая это, кажется, что SDK возвращается к веб-диалогу, и все работает.

Обратите внимание, что это не идеальный способ обхода, но он действительно решает проблему с помощью SDK для Facebook, а приложение Facebook несовместимо на данный момент на Android.

Я потратил около четырех часов на решение этой проблемы (Windows 7, Eclipse). Утилита keytool действительно хитра. У меня уже установлен Eclipse.

  1. Установите Cygwin.
  2. Загрузите OpenSSL для Windows. Поместите его в любую папку и добавьте путь к подпапкам «lib» и «bin» в переменной Windows PATH.
  3. Теперь вы можете открыть оболочку Cygwin Bash (из меню «Пуск») и успешно запустить OpenSSL.

Некоторые трюки для клавишных:

  1. НЕ ИСПОЛЬЗУЙТЕ оболочку Windows (CMD) – всегда используйте Cygwin. Запуск keytool от CMD просто молчал, создавая неправильный хеш!

  2. Помните, что правильный разделитель путей Unix, который вы должны использовать, это «/», а не «\»!

  3. Если keytool не может найти файл хранилища ключей, он просто генерирует ключ WRONG! Если вы установили правильный путь к файлу, он попросит ввести «Введите пароль хранилища ключей:». Поэтому, если вы не спрашиваете об этом, убедитесь, что вы прошли неправильный путь (см. Также №2).
  4. Если вы введете правильный пароль хранилища ключей, хэш будет таким же, как если бы вы не передали пароль хранилища ключей. Если вы вводите неверный пароль хранилища ключей, он автоматически генерирует неправильный хеш.

Благодаря Facebook, теперь он предоставляет ключ и исключение invalid_key. Используйте это значение и обновите его в настройках приложения. Я использую 64-разрядную машину Windows 7, и для меня ключ не имеет = (равно) в конце, но он работал чисто.

Я использую Phonegap, а FB SDK -> не получил правильный ключ, возможно, мне нужно использовать хэш-ключ службы сборки? Тем не менее, я просто положил в хэш-библиотеку кордовы, что это не совпадает с тем, что было в facebook.

Я использовал Cygwin для Windows и iOS Bash, но оба дали мне неправильные ключи! Наконец, я нашел решение в реализации Facebook в вашем приложении недопустимым ключом с keytool .

ProgrammerXR написали действительно полезный метод, который извлекает ключевой хэш прямо из подписанного приложения, установленного на устройстве – блестяще!

отредактирован:

Вышеупомянутая ссылка больше не работает, но вы можете получить более подробную информацию в документах Facebook (см. Параграф «Устранение неполадок» в разделе «Запустить образцы») https://developers.facebook.com/docs/android/getting -started / образцы #