Приложение неправильно настроено для входа в Facebook: проблема интеграции Android с Facebook

Я интегрировал свое приложение с Facebook, и для этого я использую Graph API Facebook. Я ищу профиль и информацию о друзьях. Он отлично работает на моем устройстве с Android 2.3 (Gingerbread), но недавно у моего клиента возникла проблема, когда он пытался подключиться к Facebook через мое приложение. На его устройстве установлен Android 4.0 (Ice Cream Sandwich). Когда он нажимает кнопку в приложении, которое выводит его на экран входа в Facebook, после входа он получает сообщение:

Мое приложение неправильно настроено для входа в Facebook. Нажмите Okay, чтобы вернуться в приложение без подключения к Facebook.

Сообщение об ошибке Facebook

Я не понимаю, в чем проблема, связана ли она с версией Android или чем.

Как я могу исправить эту проблему?

18 ответов

Решение

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

Хак запускает диалоговое окно WebView для Facebook без единого входа, и пользователь должен ввести свои учетные данные для входа в это диалоговое окно. Вредоносные программы могут легко украсть эту информацию. Всегда рекомендуется правильно использовать единый вход Facebook, чтобы обеспечить безопасность вашего приложения и защитить конфиденциальные данные вашего пользователя.

Перед добавлением этого сообщения об ошибке диалоговое окно будет автоматически закрыто без предупреждения и завершится с ошибкой. Мы добавили это сообщение об ошибке, чтобы визуально показать, что есть проблема с конфигурацией вашего приложения на панели инструментов вашего приложения Facebook. Для Android, если вы проверите LogCat, вы увидите, что после нажатия "ОК", должно появиться сообщение об ошибке, которое будет отображать более техническое описание того, что вызывает сбой аутентификации.

Например, если вы используете наш пример Hackbook и не указали свой собственный APP_ID в источнике и не добавили свой хэш-ключ на панель инструментов, вы увидите эту ошибку в LogCat после нажатия "Okay" в собственном диалоге SSO (если Util.ENABLE_LOG имеет значение true):

D / Facebook-authorize (24739): Ошибка входа в систему: invalid_key: Несоответствие ключа Android. Ваш ключ "uk3udeH7vrOGNFH2FJjdJbdWJWI" не соответствует разрешенным ключам, указанным в настройках вашего приложения. Проверьте настройки приложения по адресу http://www.facebook.com/developers

Мы добавили визуальное сообщение об ошибке, чтобы помочь вам. Это, теоретически, не нарушает предыдущие реализации, если оно было реализовано правильно с самого начала. Если вы видите это сообщение об ошибке, это означает, что вы неправильно настроили параметры приложения на своей панели инструментов.
Дважды проверьте свой класс Android / имя пакета, Android-хэш-ключи и т. Д. Вы не увидите это сообщение, если все сделали правильно.

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

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

Попробуйте установить это так:

Сначала загрузите OpenSSL (если у вас 64-битная машина, вы должны загрузить openssl-0.9.8e X64, а не последнюю версию, openssl-0.9.8k X64, поскольку выходные данные будут недействительными). Распакуйте ваши файлы, создайте папку opensslнапример в C:/ и скопировать туда файлы.

Найдите свой путь к keytoo. У меня есть C:\Program Files\Java\jdk1.7.0_05\bin.

Найдите свой путь к debug.keystore, Если вы откроете в Eclipse меню " Окно" -> " Настройки" -> " Android" -> " Сборка", вы увидите, что такое путь, и увидите хранилище ключей отладки по умолчанию:- и путь.

Найдите свой путь к openssl, Мой - C:\openssl8e\bin/.

Откройте cmd и введите:

"C: \ Program Files \ Java \ jdk1.7.0_05 \ bin \ keytool" -exportcert -alias androiddebugkey -keystore "C: \ Users \ User.android \ debug.keystore" | "C: \ openssl8e \ bin \ openssl" sha1 -binary | "C: \ openssl8e \ bin \ openssl" base64

А затем нажмите Enter.

Введите пароль: android

Вы получите свой хэш-ключ для debug.keystore,

Когда вы экспортируете подписанный APK и создаете хранилище ключей для приложения, просто замените в псевдониме cmd debugkeystore свой псевдоним для приложения, путь хранилища ключей на путь к только что созданному хранилищу ключей для приложения и введите пароль для своего приложения. app.keystore, и вы получите новый хэш-ключ для подписанного приложения.

Ответ от Джесси Чена в порядке. SDK Facebook работает нормально, не ломайте его.

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

Ниже моя старая история. Отсутствует возможность установить два хеш-ключа, один для отладки и один для подписанного выпущенного приложения для старого Play Store.


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

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

Это прекрасно работает, когда вы перезаписываете или запускаете приложение из Eclipse.

Но если вы публикуете свое приложение в Andoid Play, вы должны использовать свой собственный ключ издателя для экспорта подписанного файла.apk. С этим.apk хэш в консоли приложения Facebook больше не действителен! Вы должны получить хеш для ключа разработчика, например так:

keytool -exportcert -alias <developer alias> -keystore ~/.android/<developer keystore> | openssl sha1 -binary | openssl base64

И поместите его в ключ хэша Android в консоли приложения Facebook для вашего опубликованного приложения. После этого SSO снова работает нормально для вашего подписанного файла.apk.

Из того, что я мог собрать, это проблема Facebook, и о ней сообщили. Но проблема сохраняется.

Обойти это (протестировано на 2.3.3) - взломать Facebook SDK, найти 2 метода авторизации и изменить DEFAULT_AUTH_ACTIVITY_CODE на FORCE_DIALOG_AUTH. Это отключит функцию единого входа.

Если вы предпочитаете

public void authorize(Activity activity, String[] permissions,
            int activityCode, final DialogListener listener) 

и отключите часть startSingle Sign On. Лучше не делать этого, потому что в конце концов Facebook решит проблему, и вам нужно только вернуть старую константу обратно.

РЕДАКТИРОВАТЬ

Это решение поднимает проблемы безопасности. Проверьте ответ Джесси Чен.

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

  1. Проверьте идентификатор текущего пакета вашего проекта XCode, например: com.yourcompanyname.yourappname

  2. используйте тот же идентификатор пакета com.yourcompanyname.yourappname для создания приложения в Facebook, см. вложение.

Хотя и поздно, но все же полезно: *Вот основной способ сделать это (для ключа отладки измените соответственно для выпуска):*

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\<User>\.android\debug.keystore" > <Drive letter>:\debug.txt
openssl sha1 -binary "<Drive letter>:\debug.txt" > "<Drive letter>:\debug_sha.txt"
openssl base64 -in "<Drive letter>:\debug_sha.txt" > "<Drive letter>:\debug_base64.txt"

Хеш находится в последнем сгенерированном файле: debug_base64.txt.... откройте его и скопируйте хеш.

Не забудьте заменить "" и на ваше имя пользователя и букву диска по вашему выбору

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

Когда вы создаете ключевой хеш, вы можете получить что-то со знаком равенства "=" в конце, например, ga0RGNYHvNM5d0SLGQfpQWAPGJ8 =. Хотя Facebook с радостью принимает знак равенства как часть ключевого хэша, вы должны удалить его, чтобы он работал.

Кроме того, проверьте принятый ответ на Android Facebook SDK 3.0, который выдает "remote_app_id не совпадает с сохраненным идентификатором" при входе в систему: при получении хэша ключа для отладочного хранилища ключей используйте пароль "android". В противном случае ключевой хеш будет неверным, и вы получите ошибку, указанную в вопросе (будьте добры и проголосуйте там, если она вам помогла).

Обычно эту проблему можно решить с помощью двух проверок:

  • флаг в консоли Facebook, чтобы опубликовать конфигурацию Facebook в прямом эфире
  • API-ключи не совпадают

Что касается приложений, подписанных с помощью СОБСТВЕННОГО хранилища ключей: потратив несколько часов на решение этой проблемы, я наконец-то получил ее и хочу дать ответ тем, кто все еще страдает:

Мои шаги: я подписал свое приложение через eclipse своим собственным файлом хранилища ключей (НЕ debug.keystore). Через командную строку и известные команды (keytool -exportcert -alias -keystore ~ ​​/.android/ | openssl sha1 -binary | openssl base64) я успешно получил хэш ключа. Вставил ключевой хэш в приборную панель разработчика, подождал несколько минут -> Все та же ОШИБКА (как указано в вопросе выше). я пробовал несколько разных keytools, на нескольких jdks, и т.д... ничего не изменилось.

Решение: Я включил отладку в манифесте, включил отладку в Facebook SDK. Затем я подписал apk со своим собственным хранилищем ключей и загрузил его на реальное устройство. Я подключил устройство через USB и открыл перспективу DDMS, чтобы увидеть logcat на устройстве.
Я запустил свое приложение и позволил появиться сообщению об ошибке. Он выводит ключ, совершенно отличный от ключа, сгенерированного keytool. Я взял этот ключ из logcat, вставил его в приборную панель и вуаля -> ВСЕ РАБОТАЕТ

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

В системе Debian, такой как Ubuntu, используйте keytool из java находится в каталоге /usr/lib/jvm/jdk*.*.*/bin/keytool и генерировать так

/usr/lib/jvm/jdk1.7.0/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

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

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

Чтобы получить хеш-ключ версии выпуска, найдите ключ, который вы использовали для подписи приложения, и сделайте следующее, вставьте псевдоним хранилища ключей (без скобок). Если вы не знаете свой псевдоним, это можно найти, экспортировав ваше приложение как подписанное приложение, и этот псевдоним находится на второй странице мастера. Также введите путь к вашему хранилищу ключей (без скобок).

keytool -exportcert -alias [Alias of your keystore] -keystore [Path to keystore] | openssl sha1 -binary | openssl base64

Я сделал Toast для исключений и обнаружил, что выбрасывает ключевое исключение несоответствия сегодня добавил ключ в FB страница приложения, и она отлично работает

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

Если у вас есть приложение в Play Store, вы будете использовать производственный ключ для подписи приложения. Это также означает, что вы должны получить ключевой хеш производственного ключа, как для ключа отладки, и добавить его в качестве второго хеша в список собственных хешей приложения.

просто чтобы вспомнить, как работает хэш ключа: keytool -exportcert -alias -keystore ~ ​​/keys/android_keystore | openssl sha1 -binary | openssl base64

Надеюсь, это поможет!

Также столкнулся с этой проблемой.

Просто зайдите на стартовую страницу разработчиков Facebook

и выполните шаг 4 - вещь с командной строкой.

Работал на меня.

Наслаждаться.

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

Откройте Util.java в Facebook SDK, установите private static boolean ENABLE_LOG = true;, Теперь запустите приложение и введите свой адрес электронной почты и пароль. Facebook отправляет обратно подпись в случае несоответствия ключей. Вы найдете этот ключ (подпись) в LogCat. Просто скопируйте этот ключ и вставьте его в панель инструментов приложения. Это должно решить проблему. Не забудьте установить private static boolean ENABLE_LOG = true; обратно в ложь.

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

У меня была похожая проблема, но для iOS.

Решение заключается в настройке приложения Facebook на панели разработчика Facebook.

Для iOS нужно сделать 2 вещи:

  1. Включено Facebook Войти

  2. Идентификатор пакета должен совпадать с приложением

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