Facebook android sdk v4登录取消

tgi*_*han 5 android facebook facebook-android-sdk

我需要在我的app中实现facebook登录.这是我的班级:

表现:

<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" />
Run Code Online (Sandbox Code Playgroud)

而我的班级:

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);
}
Run Code Online (Sandbox Code Playgroud)

}

当用户登录时,我需要检查publish_actions以执行类似的操作:

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"));
Run Code Online (Sandbox Code Playgroud)

但是,它总是取消:

DebugLog.d("login fb cancel");
Run Code Online (Sandbox Code Playgroud)

我缺少什么,请帮助我,我已经研究了很长时间.非常感谢.

编辑: 当它发生时,logcat(没有过滤器)显示:

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)
Run Code Online (Sandbox Code Playgroud)

            

小智 0

我认为如果设备安装了本机 Facebook 应用程序,就会出现此问题。尝试在未安装 Facebook 应用的设备上运行代码。

另外,尝试从 Facebook 开发者页面中删除该应用程序,然后重新添加。

在这里查看类似的问题

如果安装了 Facebook 应用程序,则无法登录 Facebook

Android 类未找到:未在路径上找到类...:DexPathList:类链接失败: **

更新 - 重要

您需要在 的末尾添加App IdFacebookContentProvider,例如FacebookContentProvider12341234 是您的 App Id。例如

<provider android:authorities="com.facebook.app.FacebookContentProvider1234"
          android:name="com.facebook.FacebookContentProvider"
          android:exported="true" />
Run Code Online (Sandbox Code Playgroud)