[英]Using ParseFacebookUtils to login android app with facebook
[英]Android ParseFacebookUtils.login callback, returning user with null objectId
我的问题基本上与这个问题相同: https : //www.parse.com/questions/parseusers-object-id-is-null-after-logging-in-using-facebook ,但没有真正的答案线。
如果ParseFacebookUtils第一次使用login()创建用户,一切正常。 但是,当我再次调用ParseFacebookUtils.login()时,它返回一个具有null getObjectId()的用户
我的登录按钮:(已更新)
mFacebookBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ParseFacebookUtils.logIn(LoginActivity.this, new LogInCallback() {
@Override
public void done(ParseUser user, ParseException err) {
if (err != null) {
err.printStackTrace();
return;
}
if (user != null) {
if (user.getObjectId() == null) {
Toast.makeText(LoginActivity.this, "Weird error where object Id is null... " + user.getObjectId() + " " + user.getUsername() + " " + user.getCreatedAt() + " " + user.getUpdatedAt(), Toast.LENGTH_LONG).show();
Log.e(TAG, "Weird error where object Id is null... " + user.getObjectId() + " " + user.getUsername() + " " + user.getCreatedAt() + " " + user.getUpdatedAt());
}
else
proceedToMainActivity();
}
}
});
}
});
正如我之前所说的,如果用户是第一次创建的,它会返回有效的对象ID,但第二次调用login()时,Log会显示奇怪的错误
我正在使用Facebook SDK 3.15.0,Parse 1.5.1,并且还在设备上安装了Facebook应用程序。
更新:此问题仍在发生,但我注意到如果我完全重新安装该应用程序不会发生这种情况。 但是,当您注销时,登录时仍会发生。 这是我的注销代码,如果它可能会有所帮助:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
} else if (id == R.id.action_logout) {
ParseUser.logOut();
Intent intent = new Intent(this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
更新:显然这是一个错误https://developers.facebook.com/bugs/229876443869758/这对我来说仍然是一个持续存在的问题
登录Facebook开发者网站并在设置下的应用仪表板中,检查是否存储了正确的密钥哈希值和包名称,并确保“单点登录”已启用。 在这里阅读密钥哈希。
如果您可以正确登录用户一次,请在注销前尝试删除用户并清除会话。
ParseUser user = ParseUser.getCurrentUser();
if(user != null)
user.deleteInBackground();
if(ParseFacebookUtils.getSession()!=null)
ParseFacebookUtils.getSession().closeAndClearTokenInformation();
ParseUser.logOut();
一件重要的事情! FacebookLogin Activity需要返回(历史记录)发起者活动。 如果您在清单Facebook的活动定义中有noHistory = true将无法返回。
错误
<activity
android:name=".LoginActivity"
android:label="Login activity"
android:noHistory="true">
</activity>
好!
<activity
android:name=".LoginActivity"
android:label="Login activity">
</activity>
现在在您的LoginActivity.java中您可以执行以下操作:
ParseFacebookUtils.logIn(this, new LogInCallback() {
@Override
public void done(ParseUser user, ParseException err) {
//here you will receive the user!!!
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.