简体   繁体   English

Facebook android sdk v4登录取消

[英]Facebook android sdk v4 login cancel

i need implement facebook login in my app.Here is my class : 我需要在我的app中实现facebook登录。这是我的班级:

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: 当用户登录时,我需要检查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"));

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: 编辑:当它发生时,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)

I think this issue arises if device have a native Facebook app installed. 我认为如果设备安装了原生Facebook应用程序,则会出现此问题。 Try running code on a device which doesn't have Facebook app installed. 尝试在未安装Facebook应用的设备上运行代码。

Also , try removing the app from Facebook developer's page and add it again. 此外 ,尝试从Facebook开发人员的页面中删除该应用程序并再次添加。

See similar questions here 在这里查看类似问题

Can't login to Facebook if Facebook app is installed 如果安装了Facebook应用程序,则无法登录Facebook

Android Class not found : Didn't find class ... on path: DexPathList : link of class failed : ** 未找到Android类:未在路径上找到类...:DexPathList:类的链接失败: **

Update - Important 更新 - 重要

You need to add App Id at the end of FacebookContentProvider , like FacebookContentProvider1234 , if 1234 is your App Id. 如果1234是您的应用ID,则需要在FacebookContentProvider的末尾添加App Id ,如FacebookContentProvider1234 For Example 例如

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

I you want to avoid call of Facebook app use this to set Facebook login behavior to use auth dialog only: 我想避免调用Facebook应用程序使用此设置Facebook登录行为仅使用auth对话框:

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

or, if you uses LoginButton object for login: 或者,如果您使用LoginButton对象进行登录:

loginButton.setLoginBehavior( LoginBehavior.SUPPRESS_SSO );

I have exactly the same issue using facebook sdk 4.6.0 when I disable my installed facebook app. 当我禁用我安装的Facebook应用程序时,我使用facebook sdk 4.6.0完全相同的问题。 It needed some time to figure out that everything works fine without installed facebook app or installed facebook app enabled. 它需要一些时间来确定一切正常,没有安装Facebook应用程序或安装了Facebook应用程序启用。

Due to it's a very special case that the facebbook app is installed and disabled, and because I also provide a google login. 由于这是一个非常特殊的情况,facebbook应用程序安装和禁用,因为我还提供谷歌登录。 I don't investigate more time in this issue. 我没有在这个问题上调查更多时间。

Happy Day 愉快的一天

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM