Обновление: Я написал более подробный пост в блоге об этой проблеме и объяснил, как SSO вызывает ее: http://sean.lyn.ch/2011/07/android-the-facebook-sdk-sso-and-you/
На этот вопрос уже давно дан ответ (и в Android Android SDK ), но я собираюсь попытаться найти полное решение для любого, кто в итоге наткнется на эту тему.
Я разрабатывал, используя Facebook 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 (или создайте новое, если вы его еще не настроили). Как только вы окажетесь на странице сводной информации о приложении, выберите «Изменить настройки», а затем выберите Mobile и Устройства в левой части. В разделе Android вы увидите поле для Key Hash. Вставьте строку сертификата из приведенной выше команды в это поле и нажмите «Сохранить».
Дайте ему несколько минут для распространения, и вы должны быть готовы!