android - firebase 中创建帐户的结果为 true,但未在 firebase 控制台中添加
问题描述
(应用程序流程)注册->在firebase身份验证中创建帐户,sharedpreference.put(电子邮件和密码)用于自动登录,将用户信息保存在firebase中的数据库中->登录-> mainActivity
在我发布 apk 和 proguard 之前,它运行良好,没有任何问题。但是在我遇到 proguard 问题后,我消除了 proguard 规则并在 gradle 中将 minifyEnabled true 更改为 false。
然后我重建并运行我的应用程序。
FirebaseAuth.createUserWithEmailAndPassword 的结果为真。UserData 上传的结果为真。登录的结果也为真。
一切成功后,我检查了我的 firebase 控制台。但是没有添加新的身份验证数据。并且创建了用户数据,但每个信息都是空的。Sharedpreference 也是空的。
当它运行良好时,我检查了我以前的代码。所有代码都是一样的。我整天搜索,但我没有得到任何处理它的提示。
==FirebaseAuth 类 ===
public void singUp(String userEmail, String userPwd) {
firebaseAuth.createUserWithEmailAndPassword(userEmail,userPwd)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
firebaseAuthListener.onSignUpComplete(true);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
firebaseAuthListener.onSignUpComplete(false);
if(e instanceof FirebaseAuthUserCollisionException) {
signUpErrorListener.setErrorMessage("이미 사용 중인 이메일입니다. 다시 시도해주세요.");
}
}
});
}
public void login(final String userEmail, String userPwd){
firebaseAuth.signInWithEmailAndPassword(userEmail,userPwd)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
firebaseLoginListener.onLoginComplete(true);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
firebaseLoginListener.onLoginComplete(false);
}
});
}
public void userDataUpload(final UserData userData){
firestore.collection("User")
.add(userData).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
firebaseAuthListener.onUserDataComplete(true);
String recording_key = documentReference.getId();
recordingKeyListener.onSaveRecordKey(recording_key);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
firebaseAuthListener.onUserDataComplete(false);
}
});
}
==注册类 =====
complete_btn.setOnClickListener(this);
@Override
public void onClick(View view) {
int id = view.getId();
switch (id){
case R.id.complete_btn:
boolean check_pw = checkPassword(userPassword_textInput,check_userpw_textInput);
if(check_pw) {
if(isSignUpSuccess) {
isComplete();
}else{
onSignUpComplete(true);
}
}else{
Toast.makeText(this, "비밀번호 일치 오류입니다. 다시 입력해주세요.", Toast.LENGTH_SHORT).show();
}
break;
}
}
private boolean checkPassword(TextInputLayout userPassword_textInput, TextInputLayout check_userpw_textInput) {
return true when passwords are same / return false in the other case
}
private void isComplete() {
userEmail = changeToString(userEmail_textInput);
userPwd = changeToString(userPassword_textInput);
userAge = changeToString(userAge_textInput);
userName = changeToString(userName_textInput);
singUp();
}
}
private void singUp() {
setUserData();
firebaseAuthData.singUp(userEmail, userPwd);
}
private void setUserData(){
userData.setUserName(userName);
userData.setUserEmail(userEmail);
userData.setUserAge(userAge);
userData.setUserGender(userSex);
userData.setUserJob(userJob);
}
@Override
public void onSignUpComplete(boolean isSuccess) {
this.isSignUpSuccess = isSuccess;
if(isSuccess){
firebaseAuthData.userDataUpload(userData);
SharedPreference sharedPreference = new SharedPreference();
sharedPreference.put(this,"email",userEmail);
sharedPreference.put(this,"pwd",userPwd);
}else{
Toast.makeText(this, "회원가입에 실패하였습니다.", Toast.LENGTH_SHORT).show();
LoadingProgress.dismissDialog();
}
}
@Override
public void onUserDataComplete(boolean isSuccess) {
LoadingProgress.dismissDialog();
if(isSuccess){
goNext(MainActivity.class);
}else{
Toast.makeText(this, "회원가입 실패 ", Toast.LENGTH_SHORT).show();
}
}
}
如果创建身份验证数据的结果为真,则应在我的 Firebase 控制台中添加新的帐户信息。同时,使用共享偏好将用户的电子邮件和密码保存在用户的设备中,并使用用户输入的信息不为空创建用户数据。
解决方案
=====SignUp Class=======(全局变量)//用于检查创建的用户帐户但未在数据库中设置 userData
Boolean isSignUpSuccess = true;
complete_btn.setOnClickListener(this);
@Override
public void onClick(View view) {
int id = view.getId();
switch (id){
case R.id.complete_btn:
boolean check_pw = checkPassword(userPassword_textInput,check_userpw_textInput);
if(check_pw) {
if(isSignUpSuccess) {
isComplete();
}else{
onSignUpComplete(true);
}
}else{
Toast.makeText(this, "비밀번호 일치 오류입니다. 다시 입력해주세요.", Toast.LENGTH_SHORT).show();
}
break;
}
}
推荐阅读
- javascript - 在 JavaScript/Nodejs 中动态处理未定义变量的最佳实践
- android - 没有额外信息的 RemoteServiceException
- sql - 将 Access 数据库复制到 SQL Server 正常但参数输入查询失败
- java - 如何在 Java 中使用 PDFPTable 从上到下将 2 个表添加到单个表中
- python - 不能根据来源的内容写日期
- xpages - IBM Designer 客户端在 Notes 客户端中启动表单和视图!CLFRJ0010E 有时
- c# - 如何摆脱“Animator 没有播放 AnimtorController”警告?
- iis - 使用 IIS7 URL Rewrite 将虚拟目录的请求转发到内部 Web 服务器
- azure-iot-sdk - 未链接到 libcurl 的示例
- javascript - 围绕 javascript/html 数据选项的 if 语句