在Android中使用对话框登录Facebook

7
如何使用Facebook登录? 我已经按照这个教程https://www.androidlearning.in/facebook-login-for-android-app/ 进行了操作,但它会抛出一个完整的活动页面(传统方式)。
我已安装 Facebook 应用程序。
在像 Memrise、Bandlab 等应用程序中,这个对话框会显示出来,但是在我的应用程序中没有显示。
我也尝试过使用

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList([...]);

但是不起作用...

我想要的是:

图片

我的应用程序却显示:

图片


你的问题是什么?请明确一下。 - Ricky Patel
@RickyPatel 请使用新的图片编辑我的问题。 - HerberthObregon
尝试使用此链接:https://developers.facebook.com/docs/sharing/reference/share-dialog - Ricky Patel
你有没有找到解决方法? - Pratik Kate
1
@PratikKate 不...我还是继续使用旧的身份验证 :/ - HerberthObregon
嗯,我也在寻找解决方案。 - Alexandre Prazeres
4个回答

2

我30分钟前也遇到了和你一样的问题,但是我使用了自定义按钮来实现Facebook登录,并在onCreate中使用了以下代码:

loginButton = (CircularProgressButton) findViewById(R.id.btn_fb);

        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
                LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "user_friends"));
            }
        });

        //Register a callback
        callbackManager = CallbackManager.Factory.create();

        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(final LoginResult loginResult) {
                        GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
                                new GraphRequest.GraphJSONObjectCallback() {
                                    @Override
                                    public void onCompleted(JSONObject object,GraphResponse response) {
                                        try {
                                            nome = object.getString("name");
                                            email = object.getString("email");
                                            String idfb  = loginResult.getAccessToken().getUserId();
                                            logarFb(idfb, nome, email);

                                        } catch(JSONException ex) {
                                            ex.printStackTrace();
                                        }
                                    }
                                });
                        Bundle parameters = new Bundle();
                        parameters.putString("fields", "id,name,email,gender, birthday");
                        request.setParameters(parameters);
                        request.executeAsync();
                    }

                    @Override
                    public void onCancel() {
                        //cancelled
                    }

                    @Override
                    public void onError(FacebookException exception) {
                     //error
                    }
                });

我把它改成了Facebook登录按钮:

<com.facebook.login.widget.LoginButton
    android:id="@+id/btn_fb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" /> 

现在这是我的代码,看起来干净多了:
private LoginButton loginButton;
private CallbackManager callbackManager;

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    callbackManager = CallbackManager.Factory.create();

        loginButton = findViewById(R.id.btn_fb);
        loginButton.setReadPermissions("email");
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                getUserDetails(loginResult);
            }

            @Override
            public void onCancel() {
                funcoes.aviso(MainActivity.this,"Você cancelou o login",R.color.red500,3000, R.drawable.ic_triste);
            }

            @Override
            public void onError(FacebookException exception) {
                funcoes.dialogoMsg(MainActivity.this,"Há algo de errado com o login do Facebook :/");
            }
        });
}

 protected void getUserDetails(final LoginResult loginResult) {
        GraphRequest data_request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted( JSONObject object, GraphResponse response) {
                        try {
                            nome = object.getString("name");
                            email = object.getString("email");
                            String idfb  = loginResult.getAccessToken().getUserId();
                            logarFb(idfb, nome, email);

                        } catch(JSONException ex) {
                            ex.printStackTrace();
                        }
                    }

                });
        Bundle parameters = new Bundle();
        parameters.putString("fields", "id,name,email,gender, birthday");
        data_request.setParameters(parameters);
        data_request.executeAsync();

    }

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

如果您已经安装了Facebook应用程序,则应该足以将Facebook登录作为对话框而不是全屏活动显示。
如果您想这样做,请按照此指南进行操作,如果您忘记了其他设置:https://www.studytutorial.in/android-facebook-integration-and-login-tutorial

0
如果您的手机上安装了Facebook应用,那么对话框将会出现,否则将显示一个网页视图。请尝试安装该应用程序,然后登录。

我已经安装了Facebook应用程序。在像Memrise、Bandlab等应用程序中,它会向我显示对话框,但在我的应用程序中没有。 - HerberthObregon

0

如果您在权限中定义了"user_birthday",则需要将其移除。

LoginManager.getInstance().logInWithReadPermissions(context,Arrays.asList("public_profile","email"));

由于需要进行“应用审核”,因此需要某些权限


谢谢您的回答,但它与问题无关。 - HerberthObregon
最近我遇到了这个问题,所以我删除了需要应用审核的权限。我有三个权限:电子邮件、公开资料和用户生日,删除了用户生日权限后,它向我显示了对话框。还有一件事是更新了Facebook应用程序。 - Danish Amjad

0

我已经更改了我的权限集

现有代码

LoginManager.getInstance().logInWithReadPermissions(activity, listOf("user_photos", "email", "public_profile"))

可运行的代码

LoginManager.getInstance().logInWithReadPermissions(activity, listOf("email"))

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