Twitter en tu App Android… cambios para que funcione con la nueva API 1.1

Hola!

Varias personas me avisaron de que no podían ejecutar el código que había subido a otras entradas al respecto:

Twitter en Android

No os preocupéis, ya me di cuenta por mi mismo porque me dejó de funcionar el PFC…. y además la solución es muy sencilla (como todo, a toro pasado).

El problema radica en dos cosas:

  • La API ha cambiado: Esto nos debería de dar igual, pues usamos una librería, luego con reemplazarlo por una versión más moderna de la librería, debería valernos…
  • La librería tiene cambios en su propia API: El tío cutre de Twitter4j ha actualizado la librería apra que funcione con el API nuevo pero ha incluido cambios innecesarios como eliminar clases (como la clase Tweet que ahora es Status…).

Por tanto, deberemos hacer dos cositas (no me extiendo porque puedes ver el código y salvo esto que marco, es igual que el anterior):

Cambiar la librería por la versión 3.0.3 (la más actual mientras escribo esto).

En el código, cuando hacíamos

Twitter twitter = TwitterFactory.getInstance();

Ahora deberemos utilizar el ConfigurationBuilder de Twitter4j. Yo lo que he hecho es crearme una funcioncilla que me de la instancia de twitter, que antes obtenía como está escrito en la linea anterior, de manera que me ahorro escribirlo todas las veces (para una linea no me complicaba, pero ahora son más lineas) y también me ayudará si el código vuelve a cambiar.

La función es como sigue

public static Twitter getTwitterInstance( SharedPreferences prefs ){

	String token = prefs.getString(OAuth.OAUTH_TOKEN, "");
	String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true);
        cb.setOAuthConsumerKey(TwitterData.CONSUMER_KEY);
        cb.setOAuthConsumerSecret(TwitterData.CONSUMER_SECRET);
        cb.setOAuthAccessToken(token);
        cb.setOAuthAccessTokenSecret(secret);

	Twitter twitter = new TwitterFactory( cb.build() ).getInstance();

    	return twitter;

}

Aqui solamente le damos los datos para Twitter de otra manera.

El código final y que me ha funcionado ahora mismo está disponible en BitBucket

puedes hacer un pull de esto

https://mamoreno@bitbucket.org/mamoreno/twittertest-para-api-1.1.git

 

Ciau!

 

Anuncios

8 pensamientos en “Twitter en tu App Android… cambios para que funcione con la nueva API 1.1

  1. daosgc 16/11/2013 en 22:52 Reply

    que tal amigo una pregunta trate de correrlo en una galaxy fame q tiene version de android 4.1.2 y se me ejecuta me da un error:
    Error during OAUth retrieve request token
    oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: Received authentication challenge is null

  2. daosgc 17/11/2013 en 00:02 Reply

    Ya encontre el errore jejeje.. tiene que estar en configuracion del telefono la fecha y zona horaria correcta sino sale ese error. Ir a Ajustes del teléfono y luego haga clic en “Fecha y Hora” y seleccione “Automático” (Por favor, asegúrese de que su dispositivo de zona horaria y la hora, la fecha todos son correctos).

    • miguelbucarest 18/11/2013 en 13:31 Reply

      Hola!

      Sí, ese es el problema. Ten cuidado porque cuando usamos un emulador pasa mucho… o bien al guardar la imagen congela la fecha y hora o bien ni nos fijamos y no la tenemos bien puesta.
      Supongo que twitter utiliza la fecha y hora a hacer el hash de comprobación y por eso no le cuadra. El error podría ser más explicativo, eso sí…

      Saludos y gracias por leer!

  3. ph0eps 20/08/2014 en 18:23 Reply

    Buenas tardes! buscando por internet como integrar twitter en mi app he llegado a tu blog, he estado siguiendo tu tutorial pero me da el siguiente fallo y esperaba que me echaras una manita porque no se por donde meterle mano.

    oauth.signpost.exception.OAuthNotAuthorizedException: Authorization failed (server replied with a 401). This can happen if the consumer key was not correct or the signatures did not match.

    Pensando que a lo mejor era algo que hice mal me descargue tu codigo y puse mis keys para ir descartando cosas, pero al ejecutarlo me da el mismo fallo. Utilizo un nexus 4 y la configuración horaria esta en automatico.

    Muchas gracias por adelantado!

    • miguelbucarest 20/08/2014 en 19:07 Reply

      Hola Phoeps

      no sé muy bien qué puede estar pasando. A mí solía darme ese error el 99% de las veces por la hora del dispositivo. Comprueba que por mucho que esté en automático, que tenga la hora y la fecha bien puestas, pues al crear el token creo que usa un timestamp.

      • ph0eps 21/08/2014 en 15:14

        Buenas tardes de nuevo Miguel.
        Muchas gracias por tu rápida respuesta, he estado mirando sobre lo que me dijiste y el fallo ocurre cuando intenta hacer esta linea de codigo:
        final String url = provider.retrieveRequestToken(consumer, TwitterData.CALLBACK_URL);
        si sustituyo el CALLBACK_URL por oob llega hasta twitter para pedir la autorización, pero al ser un método diferente el resto de código es inútil(ya que ese método es por pin).

        He verificado la fecha y la hora y es la correcta( a no ser de que sea por algún segundo o algo así) pero tengo la hora correcta con la zona horaria que corresponde. La verdad es que no se que diferencia existe entre un método u otro para twitter ya que uno si me lo acepta y el otro no. Sabes si existe alguna manera de solucionar ese fallo con la hora?

        Muchas gracias por adelantado!

      • miguelbucarest 24/08/2014 en 02:57

        “UFF” Hace mucho que no he vuelto a trastear con esto, así que ahora mismo no consigo visualizar qué puede ser.
        Recuerda que el CALLBACK_URL lo defines tu en twitter, entonces cuando creas tu aplicación para que te de el CONSUMER_KEY y el CONSUMER_SECRET, tienes que poner el CALLBACK_URL, prueba con eso.
        Recuerdo que tuve algún problema por ahí también, pero no sabría precisarte más ahora, sorry 😦

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: