参考文档:https://firebase.google.com/docs/auth/android/password-auth
集成firebase中的用户管理功能
在上一篇文章中,集成的AdMob SDK与Firebase版本不同,所以导致了在调用firebase api时编译出错,需要手动将版本号调整(这里用的是10.2.1)
在项目上右键,点击”Open Module Settings-Ads”,取消勾选
然后打开app级的build.gradle,加入
compile 'com.google.firebase:firebase-auth:10.2.1'
compile 'com.google.android.gms:play-services-ads:10.2.1'
然后点击右上角的“Sync now”,等待完成
编写UI
涉及这个功能的是三个Activity
LoginActivity 用户登录
RegActivity 用户注册
UserCenterActivity 用户中心
首先是布局文件
拖放控件,重新修改ID,文本
再在string.xml中加入相应的资源
效果如图
注册界面只需复制粘贴,然后用Ctrl+F,将login替换为reg
最后在按钮控件上添加onClick响应函数
接着新建三个继承自Activity的java类,添加成员变量,并写入相应的初始化代码
private EditText et_email,et_password;
private FirebaseAuth mAuth;
...
private void init(){
et_email= (EditText) findViewById(R.id.login_et_email);
et_password= (EditText) findViewById(R.id.login_et_password);
mAuth = FirebaseAuth.getInstance();
}
再实现onClic响应函数
public void login(View v){
...
}
public void reg(View v){
...
}
布局也就完成了
接着开始写实现代码
由于对话框会被多次调用,所以这里定义了一个UIUtils类
package com.greenapp.note.utils;
import android.app.AlertDialog;
import android.content.Context;
import android.widget.Toast;
import com.greenapp.note.R;
/**
* Created by Administrator on 2017/7/31 0031.
*/
public class UIUtils {
public static AlertDialog createDialog(String title, String message, Context context){
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setTitle(title);
builder.setMessage(message);
AlertDialog dlg = builder.create();
dlg.show();
return dlg;
}
public static AlertDialog createDialog(String message, Context context){
return createDialog(context.getString(R.string.wait),message,context);
}
public static void makeToast(String text,Context context){
Toast.makeText(context,text,Toast.LENGTH_SHORT);
}
}
在按钮的相应函数中调用mAuth的createUserWithEmailAndPassword函数,并添加事件完成的监听器
final AlertDialog dlg= UIUtils.createDialog(getString(R.string.wait),getString(R.string.reg_handling),this);
mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(dlg!=null){
dlg.dismiss();
}
if(task.isSuccessful()){
Toast.makeText(RegActivity.this,getString(R.string.reg_succeed),Toast.LENGTH_SHORT).show();
startActivity(new Intent(RegActivity.this,UserCenterActivity.class));
RegActivity.this.finish();
}else{
Toast.makeText(RegActivity.this,getString(R.string.reg_failed),Toast.LENGTH_SHORT).show();
}
}
});
登录那部分也就依葫芦画瓢了,调用signInWithEmailAndPassword就OK了
最后在UserCenterActivity中添加显示登录用户的email退出功能
public void logout(View v){
final AlertDialog dlg=UIUtils.createDialog(getString(R.string.center_logout_handling),UserCenterActivity.this);
mAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if(firebaseAuth.getCurrentUser()==null){
dlg.dismiss();
Toast.makeText(UserCenterActivity.this,getString(R.string.logout_succeed),Toast.LENGTH_SHORT).show();
UserCenterActivity.this.finish();
mAuth.removeAuthStateListener(this);
}
}
});
mAuth.signOut();
}
最后运行测试
在Firebase Console中也可以看见刚才注册的用户