Search code examples
androidfacebook-loginfacebook-authentication

android login by facebook does not do anything


I am trying to use facebook login in my first android application. when I run application first time and click login by facebook, confirmation page comes and after i click confirmation, it does not call any of the overriden callback methods. (OnSuccess, onCancel, onError). It just return the first page where there is login by facebook button. And on second click and after restarting application and clicking that button, it does not do anything that time, even it does not open confirmation page. So what can be wrong with my code and what could be the reason of those two issues below.

1) Why after confirmation any of the callback method is not invoked? 2) Why after first time, clicking login button does not do anything?

Here is my MainActivity class

  public class MainActivity extends AppCompatActivity {

        public static CallbackManager callbackManager = CallbackManager.Factory.create();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            FacebookSdk.sdkInitialize(getApplicationContext());
            setContentView(R.layout.activity_main);

            final LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
            loginButton.setReadPermissions("email");

            // Callback registration
            loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code
                    System.out.println("On Success");
                }
                @Override
                public void onCancel() {
                    // App code
                    System.out.println("On Cancel");
                }

                @Override
                public void onError(FacebookException exception) {
                    // App code
                    System.out.println(exception.getStackTrace());
                }
            });
        }
}

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myevent">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET"/>

</manifest>

activity_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.myevent.MainActivity">

    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="30dp" />
</RelativeLayout>

Solution

  • Check this code

    public class MainActivity extends AppCompatActivity {
    
    
        private CallbackManager callbackManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            FacebookSdk.sdkInitialize(getApplicationContext());
            setContentView(R.layout.activity_main);
    
            LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
            loginButton.setReadPermissions(Arrays.asList("public_profile", "email",
                        "user_birthday"));
    
    
    
            callbackManager = CallbackManager.Factory.create();
            LoginManager.getInstance().registerCallback(callbackManager, callback);
        }
    
        FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
               // success
            }
    
            @Override
            public void onCancel() {
                // cancel
            }
    
            @Override
            public void onError(FacebookException error) {
                // error
            }
        };
    
    
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }
    }