unico tutorial texto studio sesion modo inicio iniciar gratis español con como añadir autenticacion android facebook facebook-sdk-4.0

tutorial - Botón de inicio de sesión personalizado de Facebook-Android



iniciar sesion con facebook api (7)

Estoy siguiendo este Tutorial pero hasta ahora no puedo hacer que funcione, aunque esto es de hace un año más o menos ...

Estoy usando androidStudo 1.2.2 y FacebookSDK 4.

Quiero un inicio de sesión simple en Facebook con un botón personalizado, como el que se muestra en esta imagen:

Ahora, en el ejemplo del tutorial, tengo problemas con la variable Session , dice que no puede resolverla, ni getActivity()

¿Nadie ha intentado esto en FacebookSDK4.0?

¿Es un enfoque correcto o tal vez hay algo más actualizado?

¡Gracias por adelantado!


La respuesta simple es agregar facebookButton.performClick() dentro de cutomBtn.setOnClickListener

<!-- connect with Facebook --> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <com.facebook.login.widget.LoginButton android:id="@+id/fb_connect" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:textSize="@dimen/login_fb_font_size" android:visibility="invisible" /> <LinearLayout android:id="@+id/mfb_connect" style="@style/facebook_button"> <ImageView style="@style/login_connect_icon" android:src="@drawable/ic_facebook" /> <TextView style="@style/login_connect_text" android:text="@string/login_connect_facebook" /> </LinearLayout> </RelativeLayout>

...

private LoginButton fb_connect; private LinearLayout mfb_connect;

...

// the button from facebook sdk fb_connect = (LoginButton) findViewById(R.id.fb_connect); // handle the click from my custom button to perfrom action click on facebook sdk button mfb_connect = (LinearLayout) findViewById(R.id.mfb_connect); mfb_connect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { fb_connect.performClick(); } });

Eso logrará esto:


(no tengo suficiente reputación para agregar un comentario ...)

Intenté la respuesta de @ Shehabix, no puedo recibir la devolución de llamada hasta que agregue esto

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

entonces funciona bien.


Complementando las respuestas de Harvi y Shehabix, sugeriría agregar este método ya que esto registra la autenticación en Firebase Auth.

Este método debe llamarse dentro de "En caso de éxito" de LoginManager .

private void handleFacebookAccessToken(AccessToken token) { AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken()); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { //Toast.makeText(MainActivity.this, "Autenticando",Toast.LENGTH_SHORT).show(); } else { // If sign in fails, display a message to the user. Toast.makeText(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); //updateUI(null); } } }); }


Esto es muy simple. Agregue un botón en el archivo de diseño como

<Button android:layout_width="200dp" android:layout_height="wrap_content" android:text="Login with facebook" android:textColor="#ffff" android:layout_gravity="center" android:textStyle="bold" android:onClick="fbLogin" android:background="@color/colorPrimary"/>

Y en el lugar onClick, el método registercallback () de LoginManager se debe a que este método se ejecuta automáticamente.

me gusta:

public void fbLogin(View view) { // Before Edit: // LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("user_photos", "email", "public_profile", "user_posts" , "AccessToken")); LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("user_photos", "email", "public_profile", "user_posts")); LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions")); 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 } }); }

Que te diviertas


La parte IMO de la respuesta seleccionada es una solución alternativa, no es la solución adecuada. Entonces, lo que debe cambiarse para que sea adecuado es lo siguiente:

  1. Deshágase de "com.facebook.login.widget.LoginButton" de su XML

    <com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" />

  2. Deshágase de todas las referencias al "LoginButton" en su código Java

  3. Use la clase "LoginManager" de Facebook que está ahí para ese propósito de la siguiente manera:

    @Override protected void onCreate(Bundle savedInstanceState) { // Some code callbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback( callbackManager, new FacebookCallback < LoginResult > () { @Override public void onSuccess(LoginResult loginResult) { // Handle success } @Override public void onCancel() { } @Override public void onError(FacebookException exception) { } } ); } public void onClick(View v) { if (v == fb) { LoginManager.getInstance().logInWithReadPermissions( this, Arrays.asList("user_photos", "email", "user_birthday", "public_profile") ); } } // this part was missing thanks to wesely @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); }


Paso 1: Primero agregue FrameLayout y haga que el botón de Facebook sea visibilidad = "desaparecido" y agregue su botón personalizado. No olvide poner xmlns:facebook="http://schemas.android.com/apk/res-auto" en su diseño principal.

<FrameLayout android:id="@+id/FrameLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" > <com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" /> <Button android:id="@+id/fb" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#416BC1" android:onClick="onClick" android:text="FaceBook" android:textColor="#ffffff" android:textStyle="bold" /> </FrameLayout>

Paso 2: Inicialice FacebookSdk en onCreate antes de onCreate diseño.

FacebookSdk.sdkInitialize (this.getApplicationContext ());

Paso 3: agregue esto a su archivo java.

callbackManager = CallbackManager.Factory.create(); fb = (Button) findViewById(R.id.fb); loginButton = (LoginButton) findViewById(R.id.login_button); List < String > permissionNeeds = Arrays.asList("user_photos", "email", "user_birthday", "public_profile", "AccessToken"); loginButton.registerCallback(callbackManager, new FacebookCallback < LoginResult > () {@Override public void onSuccess(LoginResult loginResult) { System.out.println("onSuccess"); String accessToken = loginResult.getAccessToken() .getToken(); Log.i("accessToken", accessToken); GraphRequest request = GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {@Override public void onCompleted(JSONObject object, GraphResponse response) { Log.i("LoginActivity", response.toString()); try { id = object.getString("id"); try { URL profile_pic = new URL( "http://graph.facebook.com/" + id + "/picture?type=large"); Log.i("profile_pic", profile_pic + ""); } catch (MalformedURLException e) { e.printStackTrace(); } name = object.getString("name"); email = object.getString("email"); gender = object.getString("gender"); birthday = object.getString("birthday"); } catch (JSONException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,email,gender, birthday"); request.setParameters(parameters); request.executeAsync(); } @Override public void onCancel() { System.out.println("onCancel"); } @Override public void onError(FacebookException exception) { System.out.println("onError"); Log.v("LoginActivity", exception.getCause().toString()); } });

Paso 4: No olvides agregar el siguiente código.

@Override protected void onActivityResult(int requestCode, int responseCode, Intent data) { super.onActivityResult(requestCode, responseCode, data); callbackManager.onActivityResult(requestCode, responseCode, data); }

Paso 5: Configure su clic de botón personalizado en Facebook Haga clic en el botón Iniciar sesión.

public void onClick(View v) { if (v == fb) { loginButton.performClick(); } }

Paso 6: para cerrar sesión mediante programación, use esto.

LoginManager.getInstance (). LogOut ();

Paso 7: puede encontrar usuarios conectados o no por perfil.

profile = Profile.getCurrentProfile().getCurrentProfile(); if (profile != null) { // user has logged in } else { // user has not logged in }


try this // Facebook Button LoginButton loginButton = findViewById(R.id.loginbtn); // Your Custom Button binding.fbBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { loginButton.callOnClick(); } });