Android - Facebook SDK - Problema (solucionado) funciona en el emulador y no en tu device / celular / mobile

Escribo este post para tratar de ayudar a alguien que no pierda tanto tiempo como yo intentando utilizar la Facebook SDK 3.0 para Android.


INTRO (si tenés ganas de leer, más abajo está la solución)

No voy a ahondar demasiado, porque supongo que si estás leyendo esto, es porque ya sabés como darte de alta como developer en facebook, en android y tenés un conocimiento de desarrollo de aplicaciones.

A mi lo que me pasaba es que al intentar añadir el login de Facebook en una app nativa de Android, me funcionaba bien en el emulador, pero no debugeando en mi celu.

Busqué mucho tiempo en foros, stackoverflow y demás.
Lo que me parecía extraño es que en celus con Android 2.3.3 funcionaba, pero en el mio (4.2.2) no funcionaba.

Leí cosas locas:

  • Si tenés instalada la app oficial de facebook en el celu, el login falla. (Esto lo comprobé, y era así, pero obviamente no voy a obligar al usuario a desinstalar la app de fbk)
  • Problemas con la hash key (y éste era el verdadero problema).


SOLUCIÓN
La manera en que facebook dice que hay que armar la hash key con el keytool de java está MAL. O al menos no es exactamente así.

Facebook dice que la línea sería:

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
Pero es:
keytool -exportcert -alias android -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
De todas maneras no lo hice así.
Quería ver algún error por algún lado y lo que hice fue:


  1. Bajar OpenSSL para Win: https://code.google.com/p/openssl-for-windows/downloads/list
  2. Lo descomprimís en c:/openssl
  3. Copiás tu archivo "debug.keystore" en el recurso bin de tu jdk, (mio es: c:\Program Files (x86)\Java\jdk1.6.0_35\bin\ )
  4. Ejecutás ( con el cmd ) : keytool -exportcert -alias androiddebugkey -keystore debug.keystore > c:\openssl\bin\debug.txt
  5. El paso anterior genera el archivo "debug.txt" en la carpeta creada en el paso 2. Abrí este archivo y decía: "java.io.IOException: Keystore was tampered with, or password was incorrect", con lo que me di cuenta de que el password de la debug.keystore estaba mal. Resulta que la password por defecto es "android" (sin comillas).
  6. Entoncés, lo que hice fue hacer el paso 4 nuevamente, ahora reemplazando las palabras en rojo ("androiddebugkey" por "android"), y me generó el debug.txt con el formato correcto.
  7. Luego me fui con el cmd a c:/openssl/bin, y ahí ejecuté: openssl sha1 -binary debug.txt > debug_sha.txt
  8. Y luego: openssl base64 -in debug_sha.txt > debug_base64.txt
  9. Y listo! Si abrís el archivo "debug_base64.txt", vas a ver el hash correcto, y colocando esto en el panel de tu App en la consola de developers de facebook, sale con fritas!

Espero que les sirva, que aunque era una tontera, me llevó bastante tiempo.

Dudas, aclaraciones, o dejate un comment si puedo ayudar en algo más.

Saludos!
Saiyan




Comentarios

Entradas populares