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.