这是我的代码,它使用Parse通过Facebook登录用户。
public void onFacebookLoginClick(View v) {
ParseUser currentUser = ParseUser.getCurrentUser();
if ((currentUser != null) && ParseFacebookUtils.isLinked(currentUser)) {
Log.d("onFacebookLoginClick", "Already signed in");
showHomeActivity();
} else {
progressDialog = ProgressDialog.show(LoginActivity.this, "", "Logging in...", true);
List<String> permissions = Arrays.asList("public_profile", "email");
// NOTE: for extended permissions, like "user_about_me", your app must be reviewed by the Facebook team
// (https://developers.facebook.com/docs/facebook-login/permissions/)
ParseFacebookUtils.logInWithReadPermissionsInBackground(this, permissions, new LogInCallback() {
@Override
public void done(ParseUser user, ParseException err) {
progressDialog.dismiss();
if (user == null) {
Log.d("Facebook", "Uh oh. The user cancelled the Facebook login.");
} else if (user.isNew()) {
Log.d("onFacebookLoginClick: ", "User signed up and logged in through Facebook!");
showHomeActivity();
} else {
Log.d("onFacebookLoginClick: ", "User logged in through Facebook!");
showHomeActivity();
}
}
});
}
}
问题是,用户第一次登录(OK!),然后再次打开登录对话框。
注意:当我关闭对话框时,它会带我进入下一个活动。但是为什么它可以两次显示登录对话框?
答案 0 :(得分:0)
我有一个类似的问题来实现这一点。我通过让我的代码在尝试启动活动之前休眠几秒钟来解决它。这可能是错误。
- 为什么我得出这个结论 -
我发现ParseFacebookUtils中的loginCallBack需要几秒钟才能返回其结果代码/解析用户。
当我启动活动时没有返回任何数据,并且活动被配置为在没有用户登录的情况下启动登录活动。这使得看起来好像代码在第一次尝试时没有登录。我相信Parse Facebook逻辑比常规解析登录逻辑慢一点。
第二次运行代码(单击按钮)时,回调已经与解析用户一起返回,并且无需返回即可成功启动活动。