3

I am using latest Facebook SDK 4.0.1 and following code to make facebook login:

private class FacebookLoginCallback implements FacebookCallback<LoginResult> {
    @Override
    public void onSuccess(LoginResult loginResult) {
        AccessToken facebookToken = loginResult.getAccessToken();
        loginOnServerWithFacebookToken(facebookToken);
    }

    @Override
    public void onCancel() {
        Log.d("facebook", "login canceled");
    }

    @Override
    public void onError(FacebookException exception) {
        Log.d("facebook", exception.toString());
    }
}

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

    // facebook action result
    facebookLoginCallbackManager.onActivityResult(requestCode, resultCode, data);
}

private void loginToFacebook() {
    // initializing facebook
    facebookLoginCallbackManager = CallbackManager.Factory.create();
    LoginManager.getInstance().registerCallback(facebookLoginCallbackManager, new FacebookLoginCallback());

    ArrayList<String> permissions = new ArrayList<>();
    permissions.add("public_profile");
    permissions.add("email");
    LoginManager.getInstance().logInWithReadPermissions(this, permissions);
}

When native facebook app is NOT installed on the device everything works as expected. But if I install facebook app login process doesn't work. All that happens is circle progress bar in center of the screen, than facebook app is blinking for a moment and nothing happens - I see my app at the same state as before clicking login button. In logcat I found one interesting message:

E/Parcel﹕ Class not found when unmarshalling: com.facebook.login.LoginClient$Request
    java.lang.ClassNotFoundException: com.facebook.login.LoginClient$Request
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:251)
    at java.lang.Class.forName(Class.java:216)
    at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
    at android.os.Parcel.readParcelable(Parcel.java:2097)
    at android.os.Parcel.readValue(Parcel.java:2013)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
    at android.os.Bundle.unparcel(Bundle.java:249)
    at android.os.Bundle.getString(Bundle.java:1118)
    at android.content.Intent.getStringExtra(Intent.java:4991)
    at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1392)
    at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1016)
    at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:3980)
    at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:3883)
    at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:159)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2583)
    at android.os.Binder.execTransact(Binder.java:404)
    at dalvik.system.NativeStart.run(Native Method)
Caused by: java.lang.NoClassDefFoundError: com/facebook/login/LoginClient$Request
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:251)
    at java.lang.Class.forName(Class.java:216)
    at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
    at android.os.Parcel.readParcelable(Parcel.java:2097)
    at android.os.Parcel.readValue(Parcel.java:2013)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
    at android.os.Bundle.unparcel(Bundle.java:249)
    at android.os.Bundle.getString(Bundle.java:1118)
    at android.content.Intent.getStringExtra(Intent.java:4991)
    at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1392)
    at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1016)
    at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:3980)
    at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:3883)
    at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:159)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2583)
    at android.os.Binder.execTransact(Binder.java:404)
    at dalvik.system.NativeStart.run(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.login.LoginClient$Request" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:251)
    at java.lang.Class.forName(Class.java:216)
    at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
    at android.os.Parcel.readParcelable(Parcel.java:2097)
    at android.os.Parcel.readValue(Parcel.java:2013)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
    at android.os.Bundle.unparcel(Bundle.java:249)
    at android.os.Bundle.getString(Bundle.java:1118)
    at android.content.Intent.getStringExtra(Intent.java:4991)
    at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1392)
    at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1016)
    at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:3980)
    at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:3883)
    at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:159)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2583)
    at android.os.Binder.execTransact(Binder.java:404)
    at dalvik.system.NativeStart.run(Native Method)

I am using multi-dex.

Facebook SDK is included in gradle:

compile 'com.facebook.android:facebook-android-sdk:4.0.1'   // facebook

How to make login via the native facebook app working?

Edit: This question is NOT a duplicate of Android Class not found. Neither of given there answers solves the problem.

Community
  • 1
  • 1
lobzik
  • 10,974
  • 1
  • 27
  • 32

0 Answers0