java - Firebase 身份验证 createUserWithEmailAndPassword 在具有电子邮件变量的物理设备上失败
问题描述
使用 createUserWithEmailAndPassword 时有两个问题,
它适用于模拟器,但不适用于物理设备的调试模式
为了让它在物理设备上工作,我可以为电子邮件部分硬编码一个字符串,即使它被保存到一个变量中。从 EditText 获取电子邮件时它会中断,但我使用 Log.d() 在调用创建方法之前确认字符串完全相同。
这有效
final String sEmail = "ExampleEmail@gmail.com";
final String sPassword = password.getText().toString();
final String sDisplayName = displayName.getText().toString();
Log.d("Credentials:Email", sEmail);
Log.d("Credentials:Password", sPassword);
mAuth.createUserWithEmailAndPassword(sEmail,sPassword).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
FirebaseUser user = mAuth.getCurrentUser();
/*UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName(sDisplayName).build();
user.updateProfile(profileUpdates);
mAuth.signOut();*/
Intent intent = new Intent(MainActivity.this,UserLogin.class);
startActivity(intent);
}else{
Toast creationFailed = Toast.makeText(getApplicationContext(),"Creation Failed", Toast.LENGTH_SHORT);
creationFailed.show();
}
}
});
这没有。
final String sEmail = email.getText().toString();
final String sPassword = password.getText().toString();
final String sDisplayName = displayName.getText().toString();
Log.d("Credentials:Email", sEmail);
Log.d("Credentials:Password", sPassword);
mAuth.createUserWithEmailAndPassword(sEmail,sPassword).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
FirebaseUser user = mAuth.getCurrentUser();
/*UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName(sDisplayName).build();
user.updateProfile(profileUpdates);
mAuth.signOut();*/
Intent intent = new Intent(MainActivity.this,UserLogin.class);
startActivity(intent);
}else{
Toast creationFailed = Toast.makeText(getApplicationContext(),"Creation Failed", Toast.LENGTH_SHORT);
creationFailed.show();
}
}
});
这是错误消息
2019-01-14 13:44:48.298 3217-16541/? E/Volley: [1455] BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?alt=proto&key=AIzaSyCTfahJaTfOSAOdY7_pIN27-BGQgFlORnE
请注意,由于某种原因,第二个不起作用的将在模拟设备上工作。我希望第二个创建帐户,但它失败了。
解决方案
我假设您的输入不是电子邮件类型。请记住,它需要电子邮件类型。
制定一种检查电子邮件有效的方法
//Check email valid
boolean isEmailValid(CharSequence email) {
return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
然后适用于你的部分。
//Check email valid
if (!isEmailValid(email.getText().toString())) {
email.setError("Not email type");
email.requestFocus();
return;
}
关于你的吐司,也许你这样放会更好。所以,你可以知道你遇到了什么错误。
else {
Toast.makeText(getApplicationContext(), "Fail: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
推荐阅读
- r - 如何删除R中文件名括号内的字符?
- python - 想要获取图像的一部分
- mongodb - 当我在命令提示符下运行“mongod”命令时,消息以 json 格式显示。如何解决?
- android - onNavigationItemSelected 未调用
- c++ - 无法在我的 TCP 服务器代码中解决此错误
- r - 如何使用 R 中的“plotly”库在主图旁边添加边际分布图?
- macos - `.zshrc:8: bad assignment` 来自`source ~/.zshrc` 的错误
- api - API 的 URL 参数
- node.js - 如何将搜索半径限制为 url 查询字符串中的矩形区域
- c# - 如何修复代码中的 SqlException 不正确的语法错误?