5

i need implement facebook login in my app.Here is my class :

Manifest:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    <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.FacebookContentProvider"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />

And my class :

public abstract class FaceBookActivityImpl extends BaseActivity {
private CallbackManager callbackManager;
private ShareDialog shareDialog;

@Override
protected void initView() {
    FacebookSdk.sdkInitialize(getApplicationContext());
    callbackManager = CallbackManager.Factory.create();
    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {

        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException e) {

        }
    });
    FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);
}

public CallbackManager getCalbackManager(){
    return callbackManager;
}

public ShareDialog getShareDialog(){
    if(shareDialog==null){
        shareDialog = new ShareDialog(this);
        // this part is optional
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
            @Override
            public void onSuccess(Sharer.Result result) {
                DebugLog.d("share success " + result.getPostId());
            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException e) {

            }
        });
    }
    return shareDialog;
}

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

}

When user login , i need check publish_actions for like action:

LoginManager.getInstance().registerCallback(((MainActivity) getContext()).getCalbackManager(), new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        DebugLog.d("login fb success "+loginResult.getRecentlyGrantedPermissions());
                        likeTopic();
                    }

                    @Override
                    public void onCancel() {
                        DebugLog.d("login fb cancel");
                    }

                    @Override
                    public void onError(FacebookException e) {
                        DebugLog.d("login fb error "+e.getMessage());
                    }
                });
                LoginManager.getInstance().logInWithPublishPermissions(((MainActivity) getContext()), Arrays.asList("publish_actions"));

But , it's alway cancel :

DebugLog.d("login fb cancel");

What i'm missing , please help me , i've research for long time . Thanks you so much.

Edit : when it happened , the logcat(with no filter ) show:

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)

            

tgioihan
  • 103
  • 2
  • 7

3 Answers3

0

I think this issue arises if device have a native Facebook app installed. Try running code on a device which doesn't have Facebook app installed.

Also, try removing the app from Facebook developer's page and add it again.

See similar questions here

Can't login to Facebook if Facebook app is installed

Android Class not found : Didn't find class ... on path: DexPathList : link of class failed :**

Update - Important

You need to add App Id at the end of FacebookContentProvider, like FacebookContentProvider1234, if 1234 is your App Id. For Example

<provider android:authorities="com.facebook.app.FacebookContentProvider1234"
          android:name="com.facebook.FacebookContentProvider"
          android:exported="true" />
Community
  • 1
  • 1
  • If i uninstall facebook app from my device ,it's ok .but user wont do it , do you think it is facebook sdk error? – tgioihan May 01 '15 at 17:44
  • I don't think so, it is a error on Facebook side,. I integrated FB sdk with my app and I tested it with and without native app, it was working fine –  May 02 '15 at 04:23
  • 1
    i think i need review for login,however, in this case , fb sdk should return clear error – tgioihan May 04 '15 at 15:42
0

I you want to avoid call of Facebook app use this to set Facebook login behavior to use auth dialog only:

LoginManager.getInstance().setLoginBehavior( LoginBehavior.SUPPRESS_SSO );

or, if you uses LoginButton object for login:

loginButton.setLoginBehavior( LoginBehavior.SUPPRESS_SSO );
0

I have exactly the same issue using facebook sdk 4.6.0 when I disable my installed facebook app. It needed some time to figure out that everything works fine without installed facebook app or installed facebook app enabled.

Due to it's a very special case that the facebbook app is installed and disabled, and because I also provide a google login. I don't investigate more time in this issue.

Happy Day

flosk8
  • 465
  • 1
  • 6
  • 17