Facebook graph api 每次用户登录到android应用程序时,ParseFacebookUtils.logIn()都会创建新用户

Facebook graph api 每次用户登录到android应用程序时,ParseFacebookUtils.logIn()都会创建新用户,facebook-graph-api,parse-platform,parsefacebookutils,Facebook Graph Api,Parse Platform,Parsefacebookutils,似乎有很多人在使用parse.com的ParseFacebookUtils.logIn()方法时遇到了问题,我自己也遇到了一个非常奇怪的问题(我的问题没有一个与我在这里看到的类似) 我已经开发了一个应用程序相当长的一段时间了,一切都很顺利。直到我使用测试/开发手机上的应用程序注销了UserA的Facebook帐户,以便登录UserB的帐户进行测试,问题才开始出现。现在,每当任何用户使用登录Facebook按钮登录到我的应用程序时,都会在解析数据库中我的应用程序的user类中创建一个新用户。很奇怪

似乎有很多人在使用parse.com的ParseFacebookUtils.logIn()方法时遇到了问题,我自己也遇到了一个非常奇怪的问题(我的问题没有一个与我在这里看到的类似)

我已经开发了一个应用程序相当长的一段时间了,一切都很顺利。直到我使用测试/开发手机上的应用程序注销了UserA的Facebook帐户,以便登录UserB的帐户进行测试,问题才开始出现。现在,每当任何用户使用
登录Facebook
按钮登录到我的应用程序时,都会在解析数据库中我的应用程序的
user
类中创建一个新用户。很奇怪。我的Facebook登录代码与parse.com自己给出的示例应用程序完全相同,该应用程序演示了如何进行登录-无需定制。这是:

private void onLoginButtonClicked() {

        LoginActivity.this.progressDialog = ProgressDialog.show(
                LoginActivity.this, "", "Logging in...", true);

        List<String> permissions = Arrays.asList("public_profile", "user_friends",
                "user_relationships", "user_birthday", "user_location");

        ParseFacebookUtils.logIn(permissions, this, new LogInCallback() {
            @Override
            public void done(ParseUser user, ParseException err) {
                LoginActivity.this.progressDialog.dismiss();

                if (user == null) {
                    Log.d(TAG,
                            "Uh oh. The user cancelled the Facebook login.");

                } else if (user.isNew()) {
                    Log.d(TAG,
                            "User signed up and logged in through Facebook!");

                    /*this will populate common info from the user's Facebook profile and store it in Parse backend */
                    facebookObject.getMyFacebookDetails();

                    showNewsFeedActivity();
                } else {
                    Log.d(TAG,
                            "User logged in through Facebook!");
                    //facebookObject.getMyFacebookDetails();
                    ParseUser currentUser = ParseUser.getCurrentUser();
                    Logging.toast("Welcome back, " + currentUser.getString("firstName")+"("+currentUser.getObjectId()+")");

                    showNewsFeedActivity();
                }
            }
        });
    }
下面是parse.com示例应用程序的链接,该应用程序使用确切的方法

自从我注销了UserA的Facebook帐户,然后使用UserB的凭据登录,然后使用“使用Facebook登录”按钮登录到我的应用程序后,它现在创建了一个新用户,我可以在用户类的parse.com上的我的应用程序仪表板上看到该用户。即使我重新登录到UserA并尝试登录,也会创建一个新用户,即使已经有一个用户(我自己)拥有一个帐户

我的问题是:

1) 我是否应该采取不同的措施来保存新用户?到目前为止,我没有任何与ParseFacebookUtils.logIn()不同的逻辑,因为该调用表示,如果还不存在新用户,它将自动创建新用户。我假设对该方法的相同调用也能够以某种方式告诉用户,具有该Facebook Id的用户已经存在,但这可能是我没有做的或误解的事情(当然,这是由ParseFacebookUtils内部处理的,所以我不必触摸任何这些)

如果你对正在发生的事情有任何想法,我将非常感谢你的建议

编辑


每次登录时都会命中user.isNew()方法。通过调用FacebookUserUtils.logIn()创建用户时,此函数的调用将为true。所以很明显,有些地方出了问题,因为这个用户实际上不是新用户(他们已经在我的应用程序的数据库中,但由于某种原因,有些东西被忽略了).

事实证明,发生这种情况的原因是,我在注销时调用了,这将清除与该用户的Facebook身份验证关联,从而强制调用.login()在数据库中创建新用户。因此,只有在您确实需要删除Facebook身份验证时才使用unlink(在我的情况下,如果用户决定删除他们的帐户,就会使用unlink)

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CREATE_ACCOUNT_CODE){

            showNewsFeedActivity();

        }else if (requestCode == SIGN_IN_WITH_EMAIL_CODE){

            showNewsFeedActivity();

        }else if (requestCode == FORGOT_PASSWORD_CODE){

        ...
        }
        else{
            ParseFacebookUtils.finishAuthentication(requestCode, resultCode, data);
        }
    }