2011-02-11 16 views
6

Utilicé este código exacto y otros que funcionan hasta cierto punto, pero sigo recibiendo el siguiente error :Android - OAuthException - Sigo recibiendo: "Se debe usar un token de acceso activo para consultar información sobre el usuario actual"

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

Aquí está el código: he utilizado el señal_acceso regrese y validado contra conectarlo a mi navegador y funciona muy bien. Pero este código parece no estar utilizando el token de acceso que recibo o no lo estoy configurando. Incluso he probado el método FB.setAccessToken() así como params.putString ("access_token", MY_ACCESS_TOKEN).

Me pregunto, dado que no era necesario cambiar el token de acceso para que funcione la url del sitio web, no creo que tenga que hacer nada especial para access_token como ecualizarlo como en una url ?

Gracias por su ayuda. Revisé la red en busca de respuestas durante horas y parece que no hay ninguna.

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()); 
+0

tengo el mismo problema, mientras que la aplicación de Facebook se instala en el dispositivo de lo contrario, funciona perfecto y obtener los datos usuario. ¿Encontró alguna solución para este error? si es así, por favor publique su ans. –

Respuesta

1

El token de acceso que recibe debe ser URL decodificado.
He utilizado URLDecoder.decode() con MultiPartEntity(HttpMultipartMode.STRICT);

+0

bien ... ¡la biblioteca de Facebook hace decodificación de URL! ¿Dónde más cambiaste? – Puran

+0

mFacebook = new Facebook (FBAPPID); SessionStore.restore (mFacebook, this); mFacebook.request ("me/feed", params, "POST"); – maxcanna

4

¿Intentaste incluir el código de abajo?

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

Según la documentación, esto se debe incluir o la autenticación no funcionará correctamente, lo que a su vez podría provocar el error que se está encontrando. Tuve el mismo problema pero luego me di cuenta de que me estaba perdiendo esto.

2

ahora funciona bien. acabo de poner el código en el comentario.

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); 
    } 
} 
0

Acabo de encontrar este mensaje de error por una causa diferente. El AsyncFacebookRunner parece extraer valores del objeto de Facebook en el momento en que se transfiere, en lugar de mantener una referencia a él. Por lo tanto, algo como esto no funcionará:

 

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

Pero algo como esto funcionará:

 

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

Cuestiones relacionadas