簡體   English   中英

在 Android 中使用 Dialog 登錄 Facebook

[英]Login with Facebook with Dialog in Android

如何使用 facebook 實現此登錄? 我遵循了本教程https://www.androidlearning.in/facebook-login-for-android-app/但它引發了一個完整的活動(傳統方式)。

我安裝了 Facebook 應用程序

在 Memrise、Bandlab 等應用程序中顯示 Dialog 但在我的應用程序中沒有

我也試試

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

但不工作...

我想:

影像

我的應用 給我看:

影像

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

我將其更改為 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

僅當您的手機上安裝了 Facebook 應用程序時才會出現該對話框,否則您將獲得 Web 視圖。 嘗試安裝該應用程序,然后登錄。

如果您在權限中定義,則需要刪除權限“user_birthday”。

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

由於“App Review”需要一些權限

我已經更改了我的權限集

現有代碼

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

工作代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM