Problemas con la función Request.executeMeRequestAsync (session, Request.GraphUserCallback ())
Estoy siguiendo el tutorial para iniciar sesión en una aplicación de Android con Facebook.
He tenido muchos problemas con las claves hash y todo y creo que los he resuelto todos, porque mi sesión ya tiene el estado OPENED
.
- "FirebaseError: Se proporcionan credenciales de autenticación no válidas" al configurar el inicio de sesión de Google en Android
- Compilación de error en SDK "Utilizar Facebook Login"
- Cómo iniciar sesión en facebook en WebView si ya tiene acceso token de FB SDK en Android
- Android: Inicia sesión con Twitter usando Twitter4J
- Aplicación desordenada en el teclado emergente
El problema que tengo ahora es que después de iniciar sesión en facebook, cuando la sesión ya está abierta, el código ejecuta el Request.executeMeRquestAsync()
y nunca entra en la parte onComplete()
… alguna idea?
Aquí está el código …
package com.example.firstandroidapp; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; import android.os.Bundle; import android.util.Base64; import android.util.Log; import android.widget.TextView; import com.facebook.Request; import com.facebook.Response; import com.facebook.Session; import com.facebook.SessionState; import com.facebook.model.GraphUser; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // start Facebook Login Session.openActiveSession(this, true, new Session.StatusCallback() { // callback when session changes state @Override public void call(Session session, SessionState state, Exception exception) { try { PackageInfo info = getPackageManager().getPackageInfo("com.example.firstandroidapp", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.i("Digest: ", Base64.encodeToString(md.digest(), 0)); } } catch (NameNotFoundException e) { Log.e("Test", e.getMessage()); } catch (NoSuchAlgorithmException e) { Log.e("Test", e.getMessage()); } if (session.isOpened()) { // make request to the /me API Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { // callback after Graph API response with user object @Override public void onCompleted(GraphUser user, Response response) { // it never gets here... if (user != null) { TextView welcome = (TextView) findViewById(R.id.welcome); welcome.setText("Hello " + user.getName() + "!"); } } }); } } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } }
Gracias mucho de antemano. David.
- ¿Cómo comprobar WiFi es pasar a través de inicio de sesión de página web?
- Cómo validar las credenciales introducidas por los usuarios con la de la base de datos SQLite
- Android Studio no puede iniciar sesión en GitHub
- Clave única de acceso a Facebook de Facebook
- La aplicación de ejemplo de Android Facebook no inicia sesión cuando se instala la aplicación FB
- Obtener el número de teléfono de Facebook Account Kit
- Respuesta nula de HTTP Post Request Android
- GCM, ID de registro y manejo de inicio de sesión / cierre de sesión de usuario
Yo tuve el mismo problema.
El tutorial nos dice que debemos modificar AndroidManifest.xml. En la modificación puse las etiquetas abajo en lugares incorrectos (no utilicé Eclipse para modificar el archivo de manifiesto) y eso evitó la devolución de llamada.
<manifest ...> ... <application ...> ... <activity android:name="com.facebook.LoginActivity"/> ... <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> ... </application> ... <uses-permission android:name="android.permission.INTERNET"/> ... </manifest>
Prueba a revisar tu AndroidManifest.xml. El documento oficial será útil.
Session.openActiveSession
devuelve la sesión directamente si ya está abierta. Este podría ser su problema. Es posible que la llamada de llamada no se llame en ese caso. (Todavía en el proceso de implementar esto yo mismo.)
Cree una instancia de SessionCallback antes de llamarla y, si la sesión se devuelve directamente, llámela:
StatusCallback cb = new StatusCallback() {/* implement */}; Session fbSession = Session.openActiveSession(this, true, cb); if (fbSession != null) { cb.call(fbSession, fbSession.getState(), null); }
Compruebe el estado de la sesión dentro de la devolución de llamada para que no tenga que manejar los diferentes estados dos veces.
- Enviar streaming de video en vivo al motor de streaming wowza con dispositivos Android
- Configuración de la conexión TimeOut en la solicitud de RoboSpice android