Estoy tratando de migrar el código de inicio de sesión de un viejo aplicación de SDK 3.0 SDK 4.0.
He implementado el inicio de Sesión mediante el LoginManager, como tengo costumbre de inicio de Sesión de botones.

El problema es que no tengo respuesta desde el Facebook de la API. Sin éxito, No hay error, no hay excepción alguna. El código es el siguiente:

    //global refs
//callbacks
private CallbackManager mCallbackManager;
private FacebookCallback<LoginResult> mFacebookCallback;
private List<String> mPermissions = Arrays.asList("email");
private LoginManager mLoginMgr;
private Activity mActivity;
//........
//code is inside method
FacebookSdk.sdkInitialize(getApplicationContext());
//perhaps a bit excessive
FacebookSdk.addLoggingBehavior(LoggingBehavior.GRAPH_API_DEBUG_INFO);
FacebookSdk.addLoggingBehavior(LoggingBehavior.DEVELOPER_ERRORS);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_RAW_RESPONSES);
FacebookSdk.setApplicationId(mActivity.getString(R.string.sample_fb_id));
//init callbacks
mFacebookCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.v("LoginActivity login", loginResult.toString());
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
//Application code
Log.v("LoginActivity", response.toString());
try {
String email = object.getString("email");
Log.v("LoginActivity", "obtained email: ", email);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
request.executeAsync();
}
@Override
public void onCancel() {
Log.e("LoginActivity", "facebook login canceled");
}
@Override
public void onError(FacebookException e) {
Log.e("LoginActivity", "facebook login failed error");
}
};
mCallbackManager = CallbackManager.Factory.create();
mLoginMgr = LoginManager.getInstance();
mLoginMgr.registerCallback(mCallbackManager, mFacebookCallback);
mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);

El uso de la Debugger, yo soy capaz de ver que esta línea:
mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);
ejecutado, pero ninguno de los callbacks son siempre activa. Yo también no tener errores en la consola, y la pantalla se queda en negro y no pasa nada.

Creo que no importa, pero el código es ejecutado en una clase de contenedor (fuera de Activity). He intentado dentro de la Activity, pero no hizo ninguna diferencia.

Alguna sugerencia?
Apreciada.

Edición:

Este se declara dentro de AndroidManifest.xml:

<activity android:name="com.facebook.FacebookActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
  • Has configurado AndroidManifest.xml por el guía de migración de?
  • Sí, como por la documentación. El app_id se proporciona a través de programación, debido a que la aplicación está localizada.
  • Eso es muy raro, tal vez pruebe su aplicación de ejemplo y al menos asegúrese de que su facebook app en dev sitio web está configurado correctamente. Me he encontrado con algunos problemas al migrar, pero no algo como esto.
InformationsquelleAutor nightfixed | 2015-04-29

3 Comentarios

  1. 11

    Si el código está en un fragmento, no utilice mActivity variable como la Actividad de contexto.

    Hacer:

    1. Agregar una línea:

       callbackManager.onActivityResult(requestCode, resultCode, data); in onActivityResult(, , , ) in fragment.
    2. Llamada:

       LoginManager.getInstance().logInWithReadPermissions(**this**, Arrays.asList("public_profile", "user_friends")); 

    Uso este, no uso este.getActivity()

    1. Seguro, De Hecho.
    • De hecho, el problema fue que se me olvidó añadir la llamada a callbackManager.onActivityResult(); por desgracia, no puedo aceptar que ambas respuestas.
    • 2. Llamada: Roles Loginmanager.getInstance().logInWithReadPermissions(esto, Matrices.asList(«public_profile», «user_friends»)); , Android Studio quejarse «no hay ningún método para resolver»
  2. 4

    He tenido este problema también. Resulta que se me olvidó añadir la llamada a callbackManager.onActivityResult() en Activity.onActivityResult() como por la parte inferior de la Registrar una devolución de llamada sección de la guía de inicio de sesión.

    Por lo que en la Actividad en la que usted está haciendo Facebook de inicio de sesión, usted debe tener algo como:

    @Override
    protected void onActivityResult(int request, int result, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    mCallbackManager.onActivityResult(request, result, data);
    }

    Es esto lo que te estaba faltando?

    • Esta respuesta guardado mi tiempo cuando se trabaja con Xamarin.Facebook SDK para Android. Gracias.
  3. -1
    /** login manager */
    public void initializeLoginManager(){
    callbackManager = CallbackManager.Factory.create();
    LoginManager.getInstance().registerCallback(callbackManager,
    new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
    //App code
    }
    @Override
    public void onCancel() {
    //App code
    }
    @Override
    public void onError(FacebookException exception) {
    //App code
    }
    });
    }
    public void onClick(View view) {
    switch(view.getId()){
    case R.id.button_login_login :
    firebaseloginEmail();
    break;
    case R.id.text_forget_password : break;//TODO: implement This with the layout
    case R.id.text_dont_account_login :
    startActivity(new Intent(this,SignupActivity.class));
    finish();
    break;
    case R.id.button_facebook_login :
    Log.e("facebook login","You have clicked");
    LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,Arrays.asList(EMAIL));
    break;
    }
    }
    • por favor explique cómo este responde a la pregunta, no acaba de publicar una pared de código

Dejar respuesta

Please enter your comment!
Please enter your name here