Facebook Android SDK V4 登录取消

5
我需要在我的应用程序中实现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" />

我的班级:
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);
}

}

当用户登录时,我需要检查发布动态权限以进行点赞操作。
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"));

但是,它总是被取消:
DebugLog.d("login fb cancel");

我缺少什么,请帮帮我,我已经研究了很长时间。非常感谢你。
编辑: 当它发生时,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)

            


你有一些结果吗? - Volodymyr Kulyk
此问题在Facebook上存在一个错误(目前由于不活跃已关闭),请留言和订阅以便他们重新打开并解决它。developers.facebook.com/bugs/1621984714705591 - Talihawk
3个回答

0
如果您想避免调用Facebook应用程序,请使用此选项将Facebook登录行为设置为仅使用授权对话框:
LoginManager.getInstance().setLoginBehavior( LoginBehavior.SUPPRESS_SSO );

或者,如果您使用LoginButton对象进行登录:

loginButton.setLoginBehavior( LoginBehavior.SUPPRESS_SSO );

0

我认为这个问题是由于设备安装了原生的Facebook应用程序所引起的。尝试在没有安装Facebook应用程序的设备上运行代码。

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

在此处查看类似的问题

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

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

更新 - 重要提示

您需要在FacebookContentProvider的末尾添加应用程序ID,例如FacebookContentProvider1234,如果1234是您的应用程序ID。例如:

<provider android:authorities="com.facebook.app.FacebookContentProvider1234"
          android:name="com.facebook.FacebookContentProvider"
          android:exported="true" />

如果我从设备中卸载Facebook应用程序,那就没事了。但用户不会这样做,你认为这是Facebook SDK的错误吗? - tgioihan
我不认为这是我的问题,这应该是 Facebook 端的错误。我已经将 FB SDK 集成到我的应用程序中,并且在本地应用程序的情况下进行了测试,一切都正常运行。 - user4774371
1
我认为我需要登录审核,然而在这种情况下,FB SDK 应该返回明确的错误信息。 - tgioihan

0

我使用Facebook SDK 4.6.0时遇到了完全相同的问题,当我禁用已安装的Facebook应用程序时。需要一些时间才能弄清楚没有安装Facebook应用程序或启用已安装的Facebook应用程序时,一切都正常工作。

由于这是一个非常特殊的情况,即Facebook应用程序已安装但被禁用,并且因为我也提供Google登录。我不会在这个问题上花更多时间进行调查。

祝有美好的一天


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接