2012-02-11 1 views
1

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

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'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 означает, почему это происходит? Все идеи, указатели оцениваются.

ответ

3

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

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

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

EDIT

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

+0

Спасибо за ссылку, которую я проверю. Когда вы говорите «проверьте, что ваш ключ,« pwrvr9ALAVF7yAL5pKmGWRwR8i0 »на самом деле указан как один из ключей вашего приложения на странице разработчика« что именно вы имеете в виду ... этот ключ нигде не указан, это хеш, который указан там, а не сам ключ.вот в чем мой вопрос: почему он забрасывает этот ключ в ошибке – fissk

+0

И почему он работает на моем телефоне, пока он не работает на других – fissk

+0

Что я имею в виду, проверяя, чтобы ваш ключ был одним из ключи для вашего приложения, я имею в виду, когда вы переходите на https://developers.facebook.com/apps и нажмите «Изменить настройки», в котором содержится ваш ключ Android Key: «pwrvr9ALAVF7yAL5pKmGWRwR8i0» Риска этого экрана: http: /i44.tinypic.com/2d96waw.jpg – TomJ

1

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

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