简体   繁体   English

在 Android 中使用 Dialog 登录 Facebook

[英]Login with Facebook with Dialog in Android

How to implement this login with facebook?如何使用 facebook 实现此登录? I've followed this tutorial https://www.androidlearning.in/facebook-login-for-android-app/ but it throws a complete activity (the traditional way).我遵循了本教程https://www.androidlearning.in/facebook-login-for-android-app/但它引发了一个完整的活动(传统方式)。

I have facebook application installed我安装了 Facebook 应用程序

In applications like Memrise, Bandlab, etc. Shows me that Dialog but no in my application在 Memrise、Bandlab 等应用程序中显示 Dialog 但在我的应用程序中没有

Also I try with我也试试

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

but dont works...但不工作...

I want:我想:

影像

My app Show me:我的应用 给我看:

影像

I was facing the same problem as you 30 minutes ago, but I was using a custom button for Facebook and the following code inside onCreate for calling Facebook Login: 30 分钟前我遇到了与您相同的问题,但我使用了 Facebook 的自定义按钮和 onCreate 中的以下代码来调用 Facebook 登录:

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
                    }
                });

I changed it to Facebook Login button:我将其更改为 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" /> 

Now that's how my code looks like now, much cleaner:现在这就是我的代码现在的样子,更清晰:

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);
    }

If do you have Facebook App installed, that's should be enough to have the Facebook Login as Dialog Box instead of an FullScreen Activity.如果您安装了 Facebook 应用程序,那么将 Facebook 登录作为对话框而不是全屏活动就足够了。

If you want so, follow this guide If you forgot some other setting: https://www.studytutorial.in/android-facebook-integration-and-login-tutorial如果您愿意,请遵循本指南 如果您忘记了其他一些设置: https ://www.studytutorial.in/android-facebook-integration-and-login-tutorial

The dialog will appear only if you have the facebook app installed on your phone, other wise you will get a web view.仅当您的手机上安装了 Facebook 应用程序时才会出现该对话框,否则您将获得 Web 视图。 Try installing the app and then logging in.尝试安装该应用程序,然后登录。

You need to remove the permission "user_birthday" If you defined in your permissions.如果您在权限中定义,则需要删除权限“user_birthday”。

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

As some permissions needs for "App Review"由于“App Review”需要一些权限

I have changed my permission set我已经更改了我的权限集

Existing code现有代码

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

Working code工作代码

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

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

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