2010-12-12 18 views
5

Okey, he hecho todo el negocio, seguí todos los pasos, pero sigo sin poder hacerlo funcionar. La sencilla aplicación de ejemplo que viene con el SDK de Facebook, está trabajando en el emulador y en dispositivos con Android 1.5. Así que mi suposición es la única cosa de inicio de sesión.Facebook SDK para Android - La aplicación de ejemplo no funcionará

Si estoy bien entonces yo debería generar una clave hash y me han dicho que el almacén de claves de depuración derecha se coloca bajo

C: \ Users \ xxx.android \ debug.keystore

así que seguí el tutorial.

descargado desde OpenSSL google.code y en la terminal que escribir algo como:

"C: \ Archivos de programa \ Java \ jdk1.6.0_22 \ bin \ keytool.exe" -exportcert -alias androiddebugkey -keystore "C: \ Users \ JoeZ.android \ debug.keystore" | "C: \ Users \ xxx \ Downloads \ openssl-0.9.8k_X64 \ bin \ openssl.exe" sha1 -binary | "C: \ Users \ xxx \ Downloads \ openssl-0.9.8k_X64 \ bin \ openssl.exe "base64

y obtengo una buena clave que inserto introducido en el cuadro de Android Key Hash en Facebook, lo intenté con o sin el signo = después de la salida, pero parece que nada funciona.

Acabo de obtener invalid_key cuando trato de iniciar sesión en la aplicación de ejemplo. Incluso probé una solicitud firmada pero no funcionó. Y si no me equivoco, lo único que debe escribir en la aplicación de ejemplo es mi APP_ID, ¿verdad?

Tengo exactamente el mismo problema con mi propia aplicación que estoy desarrollando. Entonces, ¿alguien puede ayudarme?

Respuesta

15

Si el comando keytool no funciona para usted, encontré una forma de evitarlo: puede realizar una ingeniería inversa de la clave que debe colocar como Key Hash en la sección de Facebook Developer. Dentro de su actividad solo imprima la clave Hash haciendo:

try { 
    PackageInfo info = getPackageManager().getPackageInfo("[your package name, e.g. com.yourcompany.yourapp]", PackageManager.GET_SIGNATURES); 
    for (Signature signature : info.signatures) { 
     MessageDigest md = MessageDigest.getInstance("SHA"); 
     md.update(signature.toByteArray()); 
     Log.d("Hash Key:", Base64.encode(md.digest())); 
    } 
} catch (NameNotFoundException e) { 

} catch (NoSuchAlgorithmException e) { 

} 

Esto funcionó para mí. La clase MessageDigest está incluida en el JDK. La clase Base64 no. Puede usar this one por ejemplo.

+0

Funciona como un encanto en mi aplicación :-) +1 –

+1

Esto no funciona para mí. Me sale el error "El método de codificación (ByteBuffer, ByteBuffer) en el tipo Base64 no es aplicable para los argumentos (byte [])" sobre Base64.encode (md.digest())); Lo descubrí, tuve que cambiar a encodeBytes – easycheese

+0

¡Esto funcionó muy bien para mí! ¡Gracias! – Mutmatt

5

Tuve un problema similar. Para mí, se resolvió cuando desinstalé la última actualización de la aplicación de Facebook y ahora solo tengo la aplicación nativa de Facebook v1.2. (Significa que cuando entro al mercado y busco Facebook, el "Facebook para Android" se mostraría como "no instalado" en mi dispositivo).

En mi Nexus One (Android 2.2.1), cuando tenía instalada la última aplicación de Facebook, no había una 'aplicación de desinstalación', solo un 'Desinstalar las últimas actualizaciones', que es lo que hice. De hecho, ni siquiera puedo desinstalar toda la aplicación de Facebook (ahora v1.2) por el motivo que sea, el botón de desinstalación está desactivado/atenuado. Pero en este estado, las muestras parecen funcionar.

Al menos, podría hacer que la aplicación simple y de transmisión funcione de esta manera.

Editar/Solución:

Ok, lo tengo trabajo ahora. Descubrí que copié/pegué el hash de clave incorrecto, debido a un comportamiento extraño de keytool en Windows y una sintaxis de comando incorrecta en el archivo ReadMe del SDK de Facebook.

El parámetro que debe utilizarse debe ser "keytool -export ..." y no "keytool -exportcert ..."; si utiliza el segundo/parámetro incorrecto, keytool todavía imprimiría una clave hash (sin pedir ninguna clave de contraseña), pero el hash es incorrecto.

Ahora también tengo SSO funcionando.

Este es mi llamamiento a las ventanas:

keytool -export -alias androiddebugkey -keystore "C:\Documents and Settings\myuser\.android\debug.keystore" | openssl sha1 -binary | openssl enc -a -e 
+0

Esto funciona, pero desafortunadamente no es una solución. Si lo entiendo correctamente, el inicio de sesión único significa que debería funcionar sin iniciar sesión y solo pedir permiso. Si el inicio de sesión único no existe en el dispositivo, se recurrirá a la vista web simple. Supongo que si desinstalo las actualizaciones el único inicio de sesión se desactiva y tengo que iniciar sesión. Lo que significa que la aplicación de ejemplo funcionará. Entonces, si estoy en lo cierto, debo hacer algo más mal. –

+0

Lo entiendo como usted, pero tampoco lo hice funcionar. Por favor, actualice si recibe alguna noticia, hará lo mismo. –

+0

He resuelto un problema, simplemente comenté líneas en el método que busca el inicio de sesión único en la clase de Facebook. El método es posterior a: public void authorize (Actividad actividad, String [] permisos, int activityCode, detector final DialogListener) { mAuthDialogListener = listener; startDialogAuth (actividad, permisos); } –

0

me trataron en las ventanas como por su solución utilizando tanto la exportación como exportcert pero genera mismo hash. La aplicación ahora funciona como antes y no usa la nueva forma SSO.

Depure Android FB SDK, encontré la causa pero no la solución exacta. No sé por qué los chicos de Facebook implementaron SSO de esta manera.

  1. SSO no funciona, si no tiene instalada la nueva actualización de la aplicación FB en su teléfono Android.

  2. En este caso, se dirige a la interfaz de diálogo normal con nombre de usuario y contraseña.

3.In detalles, FB Android SDK para manejar SSO, está llamando a un com.facebook.katana.ProxyAuth intención es devolver true si la actualización está disponible.

  1. Si el usuario tiene nueva actualización y ya está conectado, entonces valida al usuario.

Espero que esto ayude.

Cuestiones relacionadas