Итак, в моем приложении для 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, почему она возникает? Любые идеи, указатели оценили.