Estoy desarrollando una aplicación para Android. Con la inminente desaprobación del permiso offline_access de Facebook, estoy tratando de usar Graph API para extender el token de Facebook.¿Cuál es el código para obtener un token de Facebook actualizado en una aplicación de Android?
https://graph.facebook.com/oauth/access_token?
client_id=APP_ID&
client_secret=APP_SECRET&
grant_type=fb_exchange_token&
fb_exchange_token=EXISTING_ACCESS_TOKEN
¿Puede cualquier persona proporcionar código detallado que muestra cómo implementar el código anterior en una aplicación para Android y obtener el token de refrescado Facebook?
Gracias por su tiempo.
actualizar dos:
Progreso (creo)!
Utilizando la URL completa con la solicitud facebook método da como resultado la URL base que se añade al comienzo de la URL Así que en lugar de
String refreshUrl = "https://graph.facebook.com/oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken;
debe utilizar
String refreshUrl = "oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken;
Sin embargo, estoy ahora obteniendo la respuesta {"error": {"mensaje": "Error al validar la aplicación. ID de aplicación no válida.", "tipo": "OAuthException", "código": 190}}
Actualización Uno:
Esto es lo que he intentado. El código se completa, es decir, se llama a OnComplete en el listerner, PERO la respuesta no contiene un nuevo token de acceso o valor de caducidad.
void refreshWithGraph() {
AsyncFacebookRunner extendingAsyncRunner = new AsyncFacebookRunner(facebook);
Bundle parameters = new Bundle();
//the variable currentAccessToken is obtained after authorisation is complete using currentAccessToken = facebook.getAccessToken();
String refreshUrl = "https://graph.facebook.com/oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken;
extendingAsyncRunner.request(refreshUrl, parameters, new RefreshListener(), null);
}
aquí está mi versión de RefreshListener ...
//REFRESH LISTENER
public class RefreshListener extends BaseRequestListener {
public void onComplete(final String response, Object state) {
try {
final JSONObject json = Util.parseJson(response);
runOnUiThread(new Runnable() {
@Override
public void run() {
tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE\nResponse is " + response);
tvRefreshToken.setText("IN REFRESH LISTENER ONCOMPLETE\nToken is " + facebook.getAccessToken());
tvRefreshExpiry.setText("IN REFRESH LISTENER ONCOMPLETE\nFacebook expiry is " + millisecToDate(facebook.getAccessExpires()));
}
}); //end runOnUiThread
} catch (JSONException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE CAUGHT JSON EXCEPTION \nResponse is " + response);
}
}); //end runOnUiThread
} catch (FacebookError fe) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE CAUGHT FACEBOOK ERROR \nResponse is " + response);
}
}); //end runOnUiThread
} //end catch Facebook error
} //end onComplete
@Override
public void onIOException(IOException e, Object state) {
tvRefreshResponse.setText("IN REFRESH LISTENER IOEXCEPTION \nException is "+ e.getLocalizedMessage());
}
@Override
public void onFileNotFoundException(FileNotFoundException e, Object state) {
tvRefreshResponse.setText("IN REFRESH LISTENER FILE NOT FOUND EXCEPTION \nException is "+ e.getLocalizedMessage());
}
@Override
public void onMalformedURLException(MalformedURLException e, Object state) {
tvRefreshResponse.setText("IN REFRESH MALFORMED URL \nException is "+ e.getLocalizedMessage());
}
@Override
public void onFacebookError(FacebookError e, Object state) {
tvRefreshResponse.setText("IN REFRESH ONFACEBOOK ERROR \nException is "+ e.getLocalizedMessage());
}
} //end RefreshListener
El código completa, es decir OnComplete en el listerner se llama, pero la respuesta no contiene un nuevo acceso de valor simbólico o de caducidad. La respuesta es ...
{"id":"https:\/\/graph.facebook.com\/oauth\/access_token","shares":78,"comments":1}
Cuando pongo la misma URL (con un valor de token actual alfanumérico) en un navegador web la respuesta sí incluye un token de acceso.
Datos relativos a
permiso offline_access de Facebook dejará de estar disponible el 1 de de mayo de, 2012
Por favor, no sugieren el uso de la función extendAccessTokenIfNeeded en onResume() en su lugar.I am also having trouble con eso y que es la razón por la que estoy buscando en el :-) refrescante símbolo gráfico API
relacionada desbordamiento de pila Preguntas
Is it possible to extend Facebook tokens with extendAccessTokenIfNeeded in an Android app? (mi pregunta)
How would offline_access work after deprecation after May 1st?
Facebook access token can not be extended
Protecting app secret for extendAccessToken usage (Java/Android)
Relevante Facebook une
Facebook offline_access permission deprecation
Con todos los enlaces de arriba, ¿por qué necesita información más detallada? Parece que tienes suficiente documentación para implementar esto ... – Shreeni
Podrías pensar que podría solucionarlo, pero no. :-(Toda la pregunta fácil sobre Stack Overflow recibe una respuesta completa muy rápido, así que supongo que esto no es tan fácil como parece ... – Mel