Android Firebase代码未创建新用户
我的登录/注册类的代码是:Android Firebase代码未创建新用户,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我的登录/注册类的代码是: package com.example.joshpc.bluetoothattendee; import android.app.ProgressDialog; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle;
package com.example.joshpc.bluetoothattendee;
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class LoginActivity extends AppCompatActivity {
private EditText etEmail;
private EditText etPassword;
private EditText etRegPW;
private FirebaseAuth firebaseAuth;
private Button loginBut;
private Button regBut;
private ProgressDialog message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
etEmail = (EditText) findViewById(R.id.etEmail);
etPassword = (EditText) findViewById(R.id.etPassword);
etRegPW = (EditText) findViewById(R.id.etRegPW);
firebaseAuth = FirebaseAuth.getInstance();
loginBut = (Button) findViewById(R.id.bLogin);
regBut = (Button) findViewById(R.id.bRegister);
message = new ProgressDialog(this);
regBut.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
userRegister();
}
});
loginBut.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
userLogin();
}
});
}
private void userRegister(){
String email = etEmail.getText().toString().trim();
String password = etPassword.getText().toString().trim();
String verify = etRegPW.getText().toString().trim();
if(TextUtils.isEmpty(email)){
Toast.makeText(this, "Please enter email", Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.isEmpty(password)){
Toast.makeText(this, "Please enter password", Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(this, email, Toast.LENGTH_SHORT).show();
if(TextUtils.equals(password, verify)){
message.setMessage("Registering User...");
message.show();
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Toast.makeText(LoginActivity.this, "Successful Registration", Toast.LENGTH_SHORT).show();
message.hide();
sendData();
}
if(!task.isSuccessful()){
Toast.makeText(LoginActivity.this, "Failed Registration", Toast.LENGTH_SHORT).show();
message.hide();
return;
}
}
});
}
else {
Toast.makeText(this, "Passwords do not match", Toast.LENGTH_SHORT).show();
return;
}
}
我也在模拟器上运行这个
如果有任何内容需要编辑以便更好地解决问题,请让我知道
更新:我注册的用户帐户显示在我的firebase中,但该应用程序仍在向我抛出错误消息。听起来你很困惑。您只需要创建用户一次。创建用户的调用也会让他/她登录。用户在设备上保持登录状态,直到注销。如果需要另一次登录,请使用
signInWithEmailAndPassword()
,而不是createUserWithEmailAndPassword()
如果您想知道创建用户失败的原因,应显示Firebase身份验证提供给您的原因:
if(!task.isSuccessful()){
FirebaseAuthException e = (FirebaseAuthException )task.getException();
Toast.makeText(LoginActivity.this, "Failed Registration: "+e.getMessage(), Toast.LENGTH_SHORT).show();
message.hide();
return;
}
我强烈建议不要使用toasts来显示此类信息,而是(或另外)将其记录下来,以便在开发时拥有永久记录:
Log.e("LoginActivity", "Failed Registration", e);
注册新用户时,请尝试键入更长的密码。Firebase需要大于6个字符的密码
要添加到Frank的答案中,您还可以使用task中的方法在toast中显示错误消息以及常规的“注册失败”。返回字符串的task.getException()
String s = "Sign up Failed" + task.getException();
Toast.makeText(SignInActivity.this, s,
Toast.LENGTH_SHORT).show();
*注意:为了清晰起见,我将显示为字符串的消息分隔开
这可能会在应用程序本身中显示错误。您是否在Firebase项目中使用电子邮件方法启用了登录提供商 在我的情况下,我忘记启用它,因此我的例外情况如下:
D/AUTH:已为此Firebase项目禁用给定的登录提供程序。在Firebase控制台的“身份验证”部分的“登录方法”选项卡下启用它。
确保首先在Firebase身份验证中启用电子邮件。否则,您可能会出现此错误
我只是想添加,以确保您检查google play服务,以及它们是否针对您的特定apk进行了更新。今天我试着在一部旧手机上测试一个应用程序,它在一部新手机上运行良好。我不明白为什么“on failure listener”不能工作,幸运的是,我偶然发现google play服务没有更新,从而解决了这个问题 您必须在代码中检查:
检查您是否已在firebase中启用电子邮件/密码。
转到firebase站点,单击转到控制台,单击您的项目,然后单击构建,在构建下单击身份验证。然后启用电子邮件/密码。回到android studio并运行您的项目。这对我的android studio 4.1.2起到了作用。您是否在Firebase控制台中设置了项目,并将google-services.json文件添加到了您的/app目录中?刚刚更新了帖子。我注册的帐户实际上显示在我的firebase控制台中,但应用程序仍然显示我的错误消息。当你按下注册按钮时,你能检查你的日志吗?Firebase通常会给出某种错误消息。它告诉我的是
W/DynamiteModule:com.google.Firebase.auth的本地模块描述符类找不到。
这是基于我的研究,是一个错误,根据firebase devModify您的完成侦听器代码,当任务未成功时,该错误不应影响功能。此答案的示例代码:我也有一个登录方法,但这确实是第一次创建用户。因此,当完成任务不成功时,什么是task.getException().getMessage()
?此答案应位于顶部
String s = "Sign up Failed" + task.getException();
Toast.makeText(SignInActivity.this, s,
Toast.LENGTH_SHORT).show();