首页 > 解决方案 > Facebook RegisterCallback 无法正常工作

问题描述

我正在制作一个名为“BrandShopping”的应用程序。该应用程序旨在用于在线交付和购物。这就是为什么我需要不同的登录方法,以便用户可以选择他们觉得最舒服的方式。

我遇到的问题是我的 Facebook 登录。我不太明白我做错了什么。我主要在RegisterCallback()功能上遇到问题。

问题是应用程序被指定为RegisterCallback()使用登录按钮(在本例中为RegisterWithFacebookBtn)。在该OnSuccess()方法中,我指定应用程序调用一个名为的方法,该方法FetchUserData()应该从 Facebook 数据库中读取用户的信息。稍后在该方法中,我让应用程序检查用户是否已登录。如果这是true:(goto AccountinfoActivity另一个活动)但它永远不会。

我已尝试调试该应用程序,但我无法理解该程序有什么问题。如果成功,我确实有一个应该显示的祝酒词,registerCallback()但它不显示祝酒词。

我的代码如下:

public class LoginOrSignupActivity extends AppCompatActivity {

    private Button LoginBtn, RegisterWithEmailBtn, RegisterWithGoogleBtn;
    private String Tag;
    private ProgressDialog LoadingBar;
    private LoginButton RegisterWithFacebookBtn;

    private FirebaseDatabase firebasedatabase = 
FirebaseDatabase.getInstance();
    private DatabaseReference database = firebasedatabase.getReference();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_or_signup);

        LoadinGUI(); //LOAD IN THE GRAPHICAL USER INTERFACE

        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
          .requestIdToken(getString(R.string.default_web_client_id))
          .requestEmail()
          .build();

        LoginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(LoginOrSignupActivity.this, LogInActivity.class));
            }
        });

        RegisterWithEmailBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(LoginOrSignupActivity.this, RegisterActivity.class));
            }
        });


        RegisterWithFacebookBtn.setOnClickListener(new View.OnClickListener() { //REGISTRATION WITH FACEBOOK
            @Override
            public void onClick(View view) {
              SignInWithFacebook();
            }
        });
    }

    private void SignInWithFacebook(){ //FOR FACEBOOK LOGIN

        CallbackManager callbackManager = CallbackManager.Factory.create();

        RegisterWithFacebookBtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                    Toast.makeText(LoginOrSignupActivity.this, "Part one succeded", Toast.LENGTH_SHORT).show();
                    AccessToken accessToken = loginResult.getAccessToken();
                    FetchUserData(accessToken);
            }

            @Override
            public void onCancel() {
            }

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

    // FOR FACEBOOK LOGIN, ALSO SAVES TO THE FIREBASE DATABSE
    private void FetchUserData(final AccessToken accessToken){ 
        GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(
              JSONObject object, GraphResponse response
            ) {
              try {
                String name = object.getString("name");
                String email = object.getString("email");
                // ADD MORE HERE

                /* WHEN EVERYTHING IS DONE AND SUCCEEDS, 
                 *   GOTO ACCOUNTINFOACTIVITY ACTIVITY; MAY NEED TO BE
                 * MODIFIED LATER ON 
                 */
                if(accessToken != null) {
                  startActivity(new Intent(LoginOrSignupActivity.this, AccountInfoActivity.class));
                }
              } catch (JSONException e) {
                e.printStackTrace();
              }
            }
        });

        Bundle parameters = new Bundle();
        parameters.putString("fileds", "id,name,emai");
    }

任何和所有的帮助将不胜感激

标签: javaandroidfacebookandroid-studiofacebook-graph-api

解决方案


你在你的活动中添加了这个吗?

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

推荐阅读