Android Facebook SSO Не удалось войти в систему: invalid_key: несоответствие ключа Android - PullRequest
1 голос
/ 11 февраля 2012

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

02-10 19: 41: 04.802: авторизация D / Facebook (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's 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, почему она возникает? Любые идеи, указатели оценили.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2012

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

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

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

EDIT

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

1 голос
/ 17 августа 2012

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

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

...