Android基础学习总结(十二)——利用Bmob实现用户账户体系(注册、登录、验证等)
2018-01-30 15:19
1056 查看
前言
用户是一个应用程序的核心。对于个人开发者来说,自己的应用程序积累到越多的用户,就会给自己带来越强的创作动力。因此Bmob提供了一个专门的用户类——BmobUser来自动处理用户账户管理所需的功能。有了这个类,你就可以在你的应用程序中添加用户账户功能。
基本属性
关于Bmob的基本使用不再赘述,可以参考我前面一篇文章的总结,或者直接查看官方文档。BmobUser是BmobObject的一个子类,它继承了BmobObject所有的方法,具有BmobObject相同的功能。不同的是,BmobUser增加了一些特定的关于用户账户管理相关的功能。
BmobUser除了从BmobObject继承的属性外,还有几个特定的属性:
username: 用户的用户名(必需)。
password: 用户的密码(必需)。
email: 用户的电子邮件地址(可选)。
emailVerified:邮箱认证状态(可选)。
mobilePhoneNumber:手机号码(可选)。
mobilePhoneNumberVerified:手机号码的认证状态(可选)。
创建用户
很多时候,你的用户表还会有很多其他字段,如性别、年龄、头像等。那么,你需要对BmobUser类进行扩展,添加一些新的属性。示例代码如下所示:public class MyUser extends BmobUser { private Boolean sex; private String nick; private Integer age; public boolean getSex() { return this.sex; } public void setSex(boolean sex) { this.sex = sex; } public String getNick() { return this.nick; } public void setNick(String nick) { this.nick = nick; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
创建用户对象如下:
BmobUser user = new BmobUser();
后台会有个用户表
注册与登录
1.注册
一般用户先输入用户名和密码,之后点击注册按钮提交注册信息,下面的代码是一个典型的注册过程:btn_reg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { BmobUser user =new BmobUser(); user.setUsername(et_user.getText().toString()); user.setPassword(et_pass.getText().toString()); user.signUp(new SaveListener<User>() { @Override public void done(User user, BmobException e) { if(e==null) { Toast.makeText(MainActivity.this,"注册成功",Toast.LENGTH_SHORT).show(); }else { Log.e("注册失败", "原因: ",e ); } } }); } });
实现效果:
后台表:
在注册过程中,服务器会对注册用户信息进行检查,以确保注册的用户名和电子邮件地址是独一无二的。此外,对于用户的密码,你可以在应用程序中进行相应的加密处理后提交。
如果注册不成功,你可以查看返回的错误对象。最有可能的情况是,用户名或电子邮件已经被另一个用户注册。这种情况你可以提示用户,要求他们尝试使用不同的用户名进行注册。
你也可以要求用户使用Email做为用户名注册,这样做的好处是,你在提交信息的时候可以将输入的“用户名“默认设置为用户的Email地址,以后在用户忘记密码的情况下可以使用Bmob提供重置密码功能。
2.登录
当用户注册成功后,您需要让他们以后能够用注册的用户名登录到他们的账户使用应用。要做到这一点,你可以使用BmobUser类的login方法。btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { BmobUser userlogin=new BmobUser(); userlogin.setUsername(et_user.getText().toString()); userlogin.setPassword(et_pass.getText().toString()); userlogin.login(new SaveListener<BmobUser>() { @Override public void done(BmobUser bmobUser, BmobException e) { if(e==null){ Toast.makeText(MainActivity.this,bmobUser.getUsername()+"登录成功",Toast.LENGTH_SHORT).show(); }else { Log.e("登录失败", "原因: ", e); } } }); } });
实现效果:
3.检验当前用户
如果用户在每次打开你的应用程序时都要登录,这将会直接影响到你应用的用户体验。为了避免这种情况,你可以使用缓存的CurrentUser对象。缓存的用户有效期为1年。每当你应用的用户注册成功或是第一次登录成功,都会在本地磁盘中有一个缓存的用户对象,这样,你可以通过获取这个缓存的用户对象来进行登录:
BmobUser bmobUser = BmobUser.getCurrentUser(); if(bmobUser != null){ // 允许用户使用应用 }else{ //缓存用户对象为空时, 可打开用户注册界面… }
注意:貌似多次登录会缓存最后一次登录的信息
更新与查询
1.更新用户信息
很多情况下你可能需要修改用户信息,比如你的应用具备修改个人资料的功能,Bmob提供的用户更新方式:新建一个用户对象,并调用update(objectId,updateListener)方法来更新(推荐使用),示例:
BmobUser newUser = new BmobUser(); newUser.setEmail("xxx@163.com"); BmobUser bmobUser = BmobUser.getCurrentUser(context); newUser.update(bmobUser.getObjectId(),new UpdateListener() { @Override public void done(BmobException e) { if(e==null){ toast("更新用户信息成功"); }else{ toast("更新用户信息失败:" + e.getMessage()); } } });
需要先登录后才能更新用户信息 否则会返回206 User cannot be altered without sessionToken Error错误。
2.查询用户信息
查询用户和查询普通对象一样,只需指定BmobUser类即可,如下:BmobQuery<BmobUser> query = new BmobQuery<BmobUser>(); query.addWhereEqualTo("username", "lucky"); query.findObjects(new FindListener<BmobUser>() { @Override public void done(List<BmobUser> object,BmobException e) { if(e==null){ toast("查询用户成功:"+object.size()); }else{ toast("更新用户信息失败:" + e.getMessage()); } } });
浏览器中查看用户表
User表是一个特殊的表,专门存储BmobUser对象,就是这个表。
退出登录
退出登录非常简单,可以使用如下的代码:BmobUser.logOut(); //清除缓存用户对象 BmobUser currentUser = BmobUser.getCurrentUser(); // 现在的currentUser是null了
密码修改
SDK为开发者提供了直接修改当前用户登录密码的方法,只需要传入旧密码和新密码,然后调用BmobUser提供的静态方法updateCurrentUserPassword即可,以下是示例:BmobUser.updateCurrentUserPassword("旧密码", "新密码", new UpdateListener() { @Override public void done(BmobException e) { if(e==null){ toast("密码修改成功,可以用新密码进行登录啦"); }else{ toast("失败:" + e.getMessage()); } } });
邮箱设置
1.邮箱登录
新增邮箱+密码登录方式,可以通过loginByAccount方法来操作:BmobUser.loginByAccount(account, password, new LogInListener<MyUser>() { @Override public void done(MyUser user, BmobException e) { if(user!=null){ Log.i("smile","用户登陆成功"); } } });
2.邮箱验证
设置邮件验证是一个可选的应用设置, 这样可以对已经确认过邮件的用户提供一部分保留的体验,邮件验证功能会在用户(User)对象中加入emailVerified字段, 当一个用户的邮件被新添加或者修改过的话,emailVerified会被默认设为false,如果应用设置中开启了邮箱认证功能,Bmob会对用户填写的邮箱发送一个链接, 这个链接可以把emailVerified设置为 true.emailVerified 字段有 3 种状态可以考虑:
true : 用户可以点击邮件中的链接通过Bmob来验证地址,一个用户永远不会在新创建这个值的时候显示emailVerified为true。
false : 用户(User)对象最后一次被刷新的时候, 用户并没有确认过他的邮箱地址, 如果你看到emailVerified为false的话,你可以考虑刷新用户(User)对象。
missing : 用户(User)对象已经被创建,但应用设置并没有开启邮件验证功能; 或者用户(User)对象没有email邮箱。
2.1 请求验证Email
发送给用户的邮箱验证邮件会在一周内失效,可以通过调用 requestEmailVerify 来强制重新发送:final String email = "xxx@qq.com"; BmobUser.requestEmailVerify(email, new UpdateListener() { @Override public void done(BmobException e) { if(e==null){ toast("请求验证邮件成功,请到" + email + "邮箱中进行激活。"); }else{ toast("失败:" + e.getMessage()); } } });
2.2 邮箱重置密码
开发者只需要求用户输入注册时的电子邮件地址即可:inal String email = "xxx@163.com"; BmobUser.resetPasswordByEmail(email, new UpdateListener() { @Override public void done(BmobException e) { if(e==null){ toast("重置密码请求成功,请到" + email + "邮箱进行密码重置操作"); }else{ toast("失败:" + e.getMessage()); } } });
邮箱重置密码的流程如下:
用户输入他们的电子邮件,请求重置自己的密码
Bmob向他们的邮箱发送一封包含特殊的密码重置链接的电子邮件。
用户根据向导点击重置密码连接,打开一个特殊的Bmob页面,根据提示他们可以输入一个新的密码。
用户的密码已被重置为新输入的密码。
小结
可以看到Bmob后端给我们提供了相当多的功能和解决方案,为我们开发节约了很多时间,关于注册登录这块还可以使用手机和第三方登陆等等方法,更多细节请参考官方文档。相关文章推荐
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- openfire Android学习(一)----实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
- python学习系列之python装饰器基础(3)---装饰器实现用户登录验证
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- java基础学习_集合类03_用户登录注册案例(集合版)、Set集合、Collection集合总结_day17总结
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- openfire Android学习(一)----实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- MVC3学习第十二章 佟掌柜第一弹----利用MVC3实现用户的注册登录和了解MVC中的分部视图、用户控件
- Android基础学习总结(十三)——利用jsoup解析html实现网络爬虫
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等