Android - OAuthException - я продолжаю получать: «Активный токен доступа должен использоваться для запроса информации о текущем пользователе» - PullRequest
6 голосов
/ 11 февраля 2011

Я использовал этот точный код и другие, которые работают в определенной степени, но я продолжаю получать следующую ошибку:

{"error":{"type":"OAuthException","message":"An active access token must be used to query information about the current user."}}

Вот код: я использовал access_token, который я получил, и проверил его на предмет подключения к моему браузеру, и он отлично работает. Но этот код, похоже, либо не использует токен доступа, который я получаю, либо я его не устанавливаю. Я даже попробовал метод FB.setAccessToken (), а также params.putString ("access_token", MY_ACCESS_TOKEN).

Мне интересно, так как мне не нужно было менять токен доступа для работы URL-адреса веб-сайта, я бы не подумал, что мне не нужно делать ничего особенного для access_token, как, например, его кодирование в URL?

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

Bundle params = new Bundle();

params.putString("message", "Test");
params.putString("name", "American Virgin");
params.putString("link", "http://bit.ly/12345");
params.putString("description", "A Freshman College Girl on a scholarship from an ...");
params.putString("picture", "http://xxx/MOV1026.jpg");

mAsyncRunner.request("me/feed", params, "POST", new TestRequestListener());

Ответы [ 4 ]

4 голосов
/ 10 мая 2011

Вы пытались включить приведенный ниже код?

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        mFacebook.authorizeCallback(requestCode, resultCode, data);  
}  

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

2 голосов
/ 15 марта 2012

теперь работает нормально.я только что оставил код в комментарии.

 public void authorize(Activity activity, String[] permissions,
        int activityCode, final DialogListener listener) {

    boolean singleSignOnStarted = false;

    mAuthDialogListener = listener;

    // Prefer single sign-on, where available.
    //if (activityCode >= 0) {
    //      singleSignOnStarted = startSingleSignOn(activity, mAppId,
    //             permissions, activityCode);
    //  }
    // Otherwise fall back to traditional dialog.
    if (!singleSignOnStarted) {
        startDialogAuth(activity, permissions);
    }
} 
1 голос
/ 01 марта 2011

Маркер доступа, который вы получаете, должен быть декодирован URL.
Я использовал URLDecoder.decode() с MultiPartEntity(HttpMultipartMode.STRICT);

0 голосов
/ 04 августа 2012

Я только что столкнулся с этим сообщением об ошибке по другой причине.AsyncFacebookRunner, по-видимому, извлекает значения из объекта Facebook во время его передачи, а не хранит ссылку на него.Поэтому что-то вроде этого не будет работать:

    

    Facebook fb = new Facebook("appid");
    AsyncFacebookRunner runner = new AsyncFacebookRunner(fb);
    fb.setAccessToken(access_token);
    fb.setAccessExpires(expires);
    runner.request("me", new FbRequestListener());

Но как-то так будет работать:

    

    Facebook fb = new Facebook("appid");
    fb.setAccessToken(access_token);
    fb.setAccessExpires(expires);
    AsyncFacebookRunner runner = new AsyncFacebookRunner(fb);
    runner.request("me", new FbRequestListener());

...