2012-05-15 4 views
1

У меня возникает повторяющаяся проблема при использовании методов OAuth Facebook. Несмотря на попытку моей собственной реализации, все должно быть совместимым, а диалоги работают нормально, но я продолжаю получать ошибку 2500, когда я пытался делать запросы. Мой Войти код, называемый в OnCreate, заключается в следующем:Идентификатор OAuth недействителен: ошибка 2500

mPrefs = m_kActivity.getPreferences(m_kActivity.MODE_PRIVATE); 
    String access_token = mPrefs.getString("access_token", null); 
    long expires = mPrefs.getLong("access_expires", 0); 
    if(access_token != null) { 
     m_kFacebookClient.setAccessToken(access_token); 
    } 
    if(expires != 0) { 
     m_kFacebookClient.setAccessExpires(expires); 
    } 

    /* 
    * Only call authorize if the access_token has expired. 
    */ 
    if(!m_kFacebookClient.isSessionValid()) { 

    m_kFacebookClient.authorize(m_kActivity, new String[] { 
      "publish_stream", "read_stream" }, 
      new Facebook.DialogListener() { // OVERLOADS } 
    } 

и мой опубликовать метод, сделанный в OnCreate тоже

byte[] data = null; 
    String dataPath = "/mnt/sdcard/DCIM/100MEDIA/VIDEO0001.3gp"; 
    String dataMsg = "TestStuff"; 
    String dataName = "VIDEO0001.3gp"; 

    Bundle param; 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(m_kFacebookClient); 
    InputStream is = null; 
     is = new FileInputStream(dataPath); 
     data = readBytes(is); 
     param = new Bundle(); 
     param.putString("message", dataMsg); 
     param.putByteArray("video", data); 
     param.putString("filename", dataName); 
     mAsyncRunner.request("me", param, "POST", 
       new AsyncFacebookRunner.RequestListener() { // OVERLOAD } 

Я пытался получать токен информацию и правильно:

05-15 14:53:17.149: D/myapp(7964): access token = AAACmjJqKCmMBAFRMjn49t7DvXEPlRyKnbdghdthdth31654651oGGJnBpSxEiLb5R3ZAxEEoI0x4JAfCvnQWIyK08cmzUGqX1I2IeeyV 
05-15 14:53:17.149: D/myapp(7964): expiration = 1337090401151 
05-15 14:53:17.169: D/myapp(7964): expiration datetime = Tue May 15 16:00:01 CEST 2012 
05-15 14:53:17.169: D/myapp(7964): is session valid? true 
05-15 14:54:48.849: D/myapp(7964): {"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500}} 

EDIT: Если я добавлю разрешение «offline_access», токен станет ошибочным.

05-15 15:24:06.639: D/myapp(8180): expiration = 0 
05-15 15:24:06.669: D/myapp(8180): expiration datetime = Thu Jan 01 01:00:00 CET 1970 
05-15 15:24:06.679: D/myapp(8180): is session valid? true 

Что касается поведения, он никогда не просит меня войти в систему после того, как я зарегистрировался в первый раз. Если я удалю его из телефона, мне нужно снова войти в систему, и если я удалю приложение из своей учетной записи FB, он снова запросит все разрешения. Диалоги работают отлично.

+0

проверьте свой токен здесь: https://developers.facebook.com/tools/debug - он недействителен. Наверное, персонаж отрезан? – avs099

+0

Выпущено: \t 1337088246 (4 минуты назад) Expires: Никогда не Действительно: \t Правда Происхождение: \t Mobile Web Faceweb Области применения: \t create_note offline_access photo_upload publish_actions publish_stream read_stream share_item status_update video_upload –

+0

маркер из вашего поста делает не работа. У вас есть еще один? Также - это токен приложения или токен пользователя? – avs099

ответ

5

похоже, что вы не устанавливаете токен доступа вообще. Попробуйте это пожалуйста:

params.putString(Facebook.TOKEN, m_kFacebookClient.getAccessToken()); 
+0

Он работает, но появились новые ошибки lol –

+0

, какие ошибки вы получили? – avs099

+0

100: «Можете только вызывать этот метод для действительных тестовых пользователей для вашего приложения». у меня есть доступ к конфигурации приложения :( –