似乎有很多人在使用 parse.com 的 ParseFacebookUtils.logIn() 方法时遇到问题,而我自己也遇到了一个非常奇怪的问题(我的问题与我在 SO 上看到的问题都不相似)。
我已经开发一个应用程序很长一段时间了,一切都运行良好。直到我使用我的测试/开发手机上的应用程序注销 UserA 的 Facebook 帐户以登录 UserB 的帐户测试目的,问题才开始出现。现在,每次任何用户使用Sign In With 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();
}
}
});
}
我的 onActivityResult 方法中也有以下内容,就像示例中一样:
@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);
}
}
这是使用确切方法的 parse.com 示例应用程序https://parse.com/tutorials/integrating-facebook-in-android的链接。
自从我退出 UserA 的 Facebook 帐户,然后使用 UserB 的凭据登录,然后使用 Sign In With Facebook 按钮登录到我的应用程序后,它现在创建了一个新用户,我可以在 parse.com 上的应用程序仪表板的用户中看到班级。即使当我重新登录到 UserA 并尝试登录时,即使已经有一个用户(我自己)拥有一个帐户,也会创建一个新用户。
我的问题:
1)为了保存新用户,我应该做些什么不同的事情吗?截至目前,我与 ParseFacebookUtils.logIn() 没有任何不同的逻辑,因为该调用表示如果新用户尚不存在,它将自动创建一个新用户。我会假设对该方法的相同调用也能够以某种方式告诉具有该 Facebook Id 的用户已经存在,但也许这是我没有做或误解的(当然这是由 ParseFacebookUtils 内部处理的,所以我应该不必碰任何东西)。
如果您对正在发生的事情有任何想法,我将不胜感激。
编辑:
每次登录都会点击 user.isNew() 方法。当用户作为对 FacebookUserUtils.logIn() 的调用的结果而创建时,对这个函数的调用将是真的。所以显然有些问题,因为这个用户实际上不是新用户(他们已经在我的应用程序的数据库中,但由于某种原因被忽略了)。