Search code examples
androidfacebook-android-sdk

FACEBOOK Login with Custom Button


I have implemented custom button for Facebook Login, Everything is happening but I am not getting call backs onSuccess or onCancel or onError so that I can get the returned results.

I am using face book SDK version com.facebook.android:facebook-android-sdk:4.1.0

Below is the code for reference

public class OnBoardingActivity extends AppCompatActivity {

    private final String TAG = OnBoardingActivity.class.getSimpleName();

    private final int TIME_DELAY = 2000;
    private CallbackManager mCallBackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_onboarding);
        FacebookSdk.sdkInitialize(getApplicationContext());
        mCallBackManager = CallbackManager.Factory.create();

 final RelativeLayout facebookSignUp = (RelativeLayout)findViewById(R.id.facebook_signupButton);
        LoginManager.getInstance().registerCallback(mCallBackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.d(TAG, " Login successfull +++  ");
            }

            @Override
            public void onCancel() {
                Log.d(TAG, " Login got canceled ");
            }

            @Override
            public void onError(FacebookException e) {
                Log.d(TAG, " Error in the login with exception is =  " + e);
            }
        });

           facebookSignUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LoginManager.getInstance().logInWithReadPermissions(OnBoardingActivity.this, Arrays.asList("public_profile", "user_friends", "email"));
            }
        });

}

Below is the snippet of Facebook Login

<application>
  <!-- To use Facebook Login or Share below activity is declared -->
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:label="@string/app_name" />

        <provider android:authorities="com.facebook.app.FacebookContentProvider1234"
            android:name="com.facebook.FacebookContentProvider"
            android:exported="true" />


        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />

    </application>

Added XML Layout snipet

<RelativeLayout
            android:id="@+id/facebook_signupButton"
            android:layout_width="match_parent"
            android:layout_height="43dp"
            android:layout_marginTop="10dp"
            android:background="#3a569d">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginRight="15dip"
                android:layout_toLeftOf="@+id/login_with_facebook"
                android:scaleType="fitXY"
                android:src="@drawable/icon_facbook_small" />

            <TextView
                android:id="@+id/login_with_facebook"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:gravity="center"
                android:text="Login with facebook"
                android:textColor="@android:color/white" />

        </RelativeLayout>

Solution

  • to make you code look more smart you have first Initialize Facebook SDK before set your layout

        FacebookSdk.sdkInitialize(getApplicationContext());
    

    when use click on button or in your case layout call method do whole function

    facebookSignUp.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Fblogin();
                }
            });
    

    here private method handle Facebook login and callback

    private void Fblogin()
    {
        callbackmanager = CallbackManager.Factory.create();
    
        // Set permissions 
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email","user_photos","public_profile"));
    
        LoginManager.getInstance().registerCallback(callbackmanager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
    
                        System.out.println("Success");
                        GraphRequest.newMeRequest(
                                loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                                    @Override
                                    public void onCompleted(JSONObject json, GraphResponse response) {
                                        if (response.getError() != null) {
                                            // handle error
                                            System.out.println("ERROR");
                                        } else {
                                            System.out.println("Success");
                                            try {
    
                                                String jsonresult = String.valueOf(json);
                                                System.out.println("JSON Result"+jsonresult);
    
                                                String str_email = json.getString("email");
                                                String str_id = json.getString("id");
                                                String str_firstname = json.getString("first_name");
                                                String str_lastname = json.getString("last_name");
    
                                            } catch (JSONException e) {
                                                e.printStackTrace();
                                            }
                                        }
                                    }
    
                                }).executeAsync();
    
                    }
    
                    @Override
                    public void onCancel() {
                        Log.d(TAG_CANCEL,"On cancel");
                    }
    
                    @Override
                    public void onError(FacebookException error) { 
                        Log.d(TAG_ERROR,error.toString());
                    }
        });
    }
    
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        callbackmanager.onActivityResult(requestCode, resultCode, data);
    }
    

    I provide you whole code to parse your json file