porque - Autorización de Android en Android: no se puede iniciar sesión cuando se instala la aplicación oficial de Facebook
no puedo entrar a facebook desde mi celular (4)
Esto es solo una suposición descabellada, pero en lugar de esto:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}
Tratar:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}
Como no está llamando al método principal, algunas cosas podrían no funcionar como se esperaba ...
Necesito iniciar sesión en Facebook y obtener los mismos campos como el correo electrónico, etc. Uso el SDK de Facebook, y configuré mi clave de Android Hash en developers.facebook y configuré "Configurado para SSO de Android". En el simulador y algunos dispositivos, la aplicación funciona bien.
Pero si la aplicación oficial de Facebook está instalada en el dispositivo, mi aplicación no funciona: presiono el botón de inicio de sesión, pero no veo un cuadro de diálogo con una vista web en la que me piden mi contraseña y mi inicio de sesión. Parece que el problema en Stack Overflow pregunta Usar Facebook.authorize con el SDK de Android no llama onActivityResult o Stack Overflow pregunta Android API única de inicio de sesión de API? , pero no puedo entender cómo resolverlo.
Mi código
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}
public void getAccessToken() {
SessionEvents.AuthListener listener = new SessionEvents.AuthListener() {
@Override
public void onAuthSucceed() {
setupAccessToken(facebookConnector.getFacebook().getAccessToken());
}
@Override
public void onAuthFail(String error) {
Toast.makeText(getApplicationContext(), getString(R.string.error_login), Toast.LENGTH_SHORT).show();
}
};
SessionEvents.addAuthListener(listener);
facebookConnector.login();
}
código de facebookConnector
public class FacebookConnector {
public void login() {
if (!facebook.isSessionValid()) {
facebook.authorize(this.activity, this.permissions, new LoginDialogListener());
}
}
private final class LoginDialogListener implements DialogListener {
public void onComplete(Bundle values) {
SessionEvents.onLoginSuccess();
}
public void onFacebookError(FacebookError error) {
SessionEvents.onLoginError(error.getMessage());
}
public void onError(DialogError error) {
SessionEvents.onLoginError(error.getMessage());
}
public void onCancel() {
SessionEvents.onLoginError("Action Canceled");
}
}
}
Por favor, actualice el siguiente código de su aplicación. Solucionará tu problema.
public void loginAndPostToWall() {
facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH,
new LoginDialogListener());
}
Tuve el mismo problema que tú. Finalmente, resolví usar esto:
Abra Facebook.java proporcionado por Facebook SDK y luego cámbielo así:
public void authorize(Activity activity, String[] permissions,
int activityCode, final DialogListener listener) {
boolean singleSignOnStarted = false;
mAuthDialogListener = listener;
/*
// Prefer single sign-on, where available.
if (activityCode >= 0) {
singleSignOnStarted = startSingleSignOn(activity, mAppId,
permissions, activityCode);
}
// Otherwise fall back to the traditional dialog.
if (!singleSignOnStarted) {
*/
startDialogAuth(activity, permissions);
// }
}
private static Session openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback, List<String> permissions) {
OpenRequest openRequest = new OpenRequest(activity).setPermissions(permissions).setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO).setCallback(callback);
Session session = new Session.Builder(activity).build();
if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) {
Session.setActiveSession(session);
session.openForRead(openRequest);
return session;
}
return null;
}
Edite su función de sesión abierta como esta