Identificar el botón de inicio de sesión de Facebook SDK 3 en el clic

Estoy utilizando el componente com.facebook.widget.LoginButton para iniciar sesión en Facebook:

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.splash, container, false); LoginButton authButton = (LoginButton) view.findViewById(R.id.login_button); stat = (TextView) view.findViewById(R.id.profile_name); //authButton.setFragment(this); authButton.setReadPermissions(Arrays.asList("user_likes", "user_status", "user_status", "user_events", "friends_events")); return view; } 

Quiero pedirle al usuario su estado de inicio de sesión, así que necesito cambiar una vista de texto cuando el botón de Facebook fue presionado.

Pero no puedo encontrar una manera de identificar el clic del usuario, sin cambiar la lib de Facebook, ni sobreescribir el LoginButton nativo de LoginButton .

Me he encontrado con el mismo problema al intentar implementar una lib de inicio de sesión para mi aplicación. Hasta ahora la solución que encontré, aún no estoy seguro de si es mejor o no, estaba cambiando la clase LoginClickListener dentro de facebook-sdk de privado a público , así que podría anular el método onClick en mi Actividad. Aquí está la línea que he cambiado.

De:

 private class LoginClickListener implements OnClickListener { @Override public void onClick(View v) { ... 

A:

 public class LoginClickListener implements OnClickListener { @Override public void onClick(View v) { ... 

Entonces en mi actividad soy capaz de sobrescribir método onClick.

 LoginButton facebookButton = (LoginButton) findViewById(R.id.authButton); facebookButton.setOnClickListener( facebookButton.new LoginClickListener(){ @Override public void onClick(View v) { //Do whatever u want super.onClick(v); } }); 

Buena suerte.

En lugar de intentar anular el método onclick o cambiar la lib de Facebook. puede utilizar SessionState para detectar si se ha hecho clic en el botón de loginButton . Cuando el SessionState es OPENING, significa que se ha hecho clic en el botón

 private Session.StatusCallback fBcallback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { Session fbSession = session; Log.e(this.getClass().getName(), "fbSession isNULL " + (fbSession == null)); Log.e(this.getClass().getName(), "fbSession state:" + fbSession.getState() + ""); switch (fbSession.getState()) { case CLOSED: Log.e(this.getClass().getName(), "CLOSED"); break; case CLOSED_LOGIN_FAILED: Log.e(this.getClass().getName(), "CLOSED LOGIN FAILED"); authButton.setVisibility(View.VISIBLE); rl.setVisibility(View.GONE); break; case CREATED: Log.e(this.getClass().getName(), "CREATED"); break; case CREATED_TOKEN_LOADED: Log.e(this.getClass().getName(), "CREATED TOKEN LOADED"); break; case OPENED: Log.e(this.getClass().getName(), "OPENED"); break; case OPENED_TOKEN_UPDATED: Log.e(this.getClass().getName(), "OPENED TOKEN UPDATED"); break; case OPENING: Log.e(this.getClass().getName(), "OPENING"); authButton.setVisibility(View.GONE); rl.setVisibility(View.VISIBLE); break; } if (fbSession.isOpened()) { Log.e(this.getClass().getName(), "fbSession is opened"); getFBUserData(); } if (fbSession.isClosed()) { Log.e(this.getClass().getName(), "fbSession is closed, logout"); Token.removeToken(mActivity); } } }; 

Mira en el HelloFacebookSample . Están haciendo algo como esto allí.

 loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() { @Override public void onUserInfoFetched(GraphUser user) { updateUI(user); } }); 

entonces en el método updateUI()

 private void updateUI(GraphUser user) { Session session = Session.getActiveSession(); if (session != null && session.isOpened() && user != null) { mTextView.setText(user.getFirstName()); } } 

Si está cuidando la sesión de conexión (consulte la muestra para obtener detalles), el estado de inicio de sesión del usuario se mantendrá incluso cuando salga de la aplicación.

En lugar de sobrecargar el LoginButton, acabo de utilizar el fondo de la imagen. Si bien el texto no se alinea perfectamente de forma predeterminada, jugar con los márgenes puede ayudar.

 Button fbBtn = (Button)findViewById(R.id.fbLogin) ; if( fbBtn != null ) { fbBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.com_facebook_loginbutton_blue) ) ; fbBtn.setText( R.string.prompt_login_yes ) ; fbBtn.setTextColor( getResources().getColor(R.color.com_facebook_loginview_text_color) ) ; fbBtn.setTextSize( 16 ) ; fbBtn.setVisibility(View.VISIBLE) ; } 
  • Autenticación de Facebook en mi servidor con Android
  • Utilizando facebook sdk en android studio
  • Error de Facebook: permitir clave: configurar los hashes de su clave de aplicación en dev.facebook android
  • Android Studio - Error en el botón de inicio de sesión de Facebook
  • Android Facebook SDK 3.0 proporciona "remote_app_id no coincide con el ID almacenado" al iniciar sesión
  • Android Studio Gradle error "Múltiples archivos dex definir ..."
  • La aplicación de Android tiene una marca de exclamación roja en Eclipse después de importar la biblioteca de Facebook
  • Facebook anuncios nativos en reciclar view android
  • Uso del API de logro de Facebook en Android
  • Android Facebook SDK 3.0 Estado de sesión "Apertura"
  • Cómo salir de sesión de forma programática de Facebook SDK 3.0 sin utilizar el botón de inicio de sesión / cierre de sesión de Facebook?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.