用户注册与登录功能的实现

来源:互联网 发布:golang udp server 编辑:程序博客网 时间:2024/06/06 14:18

参考文档: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中也可以看见刚才注册的用户
这里写图片描述