Android Facebook SSO Не удалось войти в систему: invalid_key: несоответствие ключа Android

1

Итак, у меня есть приложение facebook SSO, реализованное в приложении для Android, и отправляю сообщение на стену FB. Все время в разработке, как в эмуляторе, так и на моем телефоне, все работало нормально. Я поставил хэш из моего файла debyg.keystore в приложение FB, все в порядке. Теперь, когда я экспортировал свое готовое приложение и подписал его, я выпустил новый хэш для ключа выпуска и поместил его в настройки приложений. Когда он установлен, он по-прежнему отлично работает на моем телефоне, но не на чужом. Поэтому я подключил другой телефон и проверил журналы, пытаясь отправить сообщение на стену. Каждый раз, когда вы получаете ответ:

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

Я снова и снова устанавливал свой телефон на других телефонах, но все тот же. Здесь фрагмент кода, который ведет либо к авторизации, либо затем отправляется на стену или отправляется прямо к стене:

 // Check if connected to the internet first
    if (connected())
    {


        //Get existing access_token if any

        mPrefs = getPreferences(MODE_PRIVATE);
        String access_token = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);

        if(access_token != null) 
        {
            facebook.setAccessToken(access_token);
        }

        if(expires != 0) 
        {
            facebook.setAccessExpires(expires);
        }


        // Only call authorize if the access_token has expired.

        if(!facebook.isSessionValid()) 
        {
            facebookAuthorizeAndPost(msg);
        }
        else
        {
            posToFBWall(msg);
        }           

    }
    else
    {
        Toast.makeText(getBaseContext(), "There been a problem connecting to Facebook. Please make sure you're connected to the internet and try again", Toast.LENGTH_SHORT).show();
    }   

И вот фрагмент, который делает фактическую авторизацию и делегирует метод postToFBWall() в случае успеха:

private void facebookAuthorizeAndPost(final String msg)
{
    facebook.authorize(this, new String[] {}, new DialogListener() {
        @Override
        public void onComplete(Bundle values) {
            SharedPreferences.Editor editor = mPrefs.edit();
            editor.putString("access_token", facebook.getAccessToken());
            editor.putLong("access_expires", facebook.getAccessExpires());
            editor.commit();

            if (values.containsKey("access_token"))
            {
                posToFBWall(msg);
            }

        }

        @Override
        public void onFacebookError(FacebookError error) {}

        @Override
        public void onError(DialogError e) {}

        @Override
        public void onCancel() {}
    });

}  

Что-то здесь не так? Более того, то, что ошибка несоответствия ключа Android означает, почему это происходит? Все идеи, указатели были оценены.

Теги:
facebook
single-sign-on
facebook-wall

2 ответа

3

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

Тем не менее, и чтобы быть уверенным, что у вас есть правильный ключ, я рекомендую использовать программу Android, которая сообщит вам правильную клавиатуру, например: http://www.easyfacebookandroidsdk.com/download/keyhash.zip

Все, что вам нужно сделать, это импортировать проект и подписать его с тем же хранилищем ключей, с которым вы подпишете свое приложение facebook. Затем просто установите и запустите его, и он отобразит keyhash.

ИЗМЕНИТЬ

Вы также можете дважды проверить, что ваш ключ "pwrvr9ALAVF7yAL5pKmGWRwR8i0" фактически указан как один из ключей вашего приложения на странице разработчика.

  • 0
    Спасибо за ссылку, проверю. Когда вы говорите «проверьте, что ваш ключ», pwrvr9ALAVF7yAL5pKmGWRwR8i0 «фактически указан как один из ключей для вашего приложения на странице разработчика», что именно вы имеете в виду ... этот ключ нигде не указан, там указан хеш, не сам ключ .. это то, что мой вопрос был .. почему он выбрасывает этот ключ в ошибке
  • 0
    И почему он работает на моем телефоне, а на других
Показать ещё 1 комментарий
1

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

У вас есть две среды для разработки: debug и подписанное приложение, когда вы используете эти команды для получения вашего ключа (keytool -exportcert -alias androiddebugkey -keystore ~ ​​/.android/debug.keystore | openssl sha1 -binary | openssl base64), вы получаете ключ для debug.keystore, но когда вы подписываете приложение, вы получаете новый ключ, потому что ваше приложение использует новое хранилище ключей (хранилище ключей, созданное для вас). Вы можете получить свой "знак приложения" с помощью программы, которую TomJ рекомендовал http://www.easyfacebookandroidsdk.com/download/keyhash.zip, но вы должны подписать с тем же хранилищем ключей, которое вы используете в вашем приложении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню