在移动开发的过程中,我们通常会看到许多的应用都是使用手机号注册进行登录的,这样做可以让注册账号和登录的用户体验变得更加简单,读取通讯录后能更加容易的建立用户关系等等优点。
当然有优点必然也会存在缺点,用手机号的最大问题就在于手机是可以被更换的(例如你换了城市,或者转网,转套餐,换了手机号)。而换掉的手机号是可能被分配给别人的。
这导致有可能一个人拿到一个新的手机号,用XX应用,却发现这个手机号已经注册,这时有两种处理方式:
1,如果你使用手机号短信认证来找回帐号的话,那么这个新的手机用户将可以轻易的获得这个手机号相关的原有帐号。
2,如果你不允许手机号短信找回,那么将导致这个用户拿着自己新上的手机号无法使用XX应用。
今天我们在这里就先不讨论这个使用手机号注册的利弊问题了,这和今天的标题不符。
唉呀…. 不知道怎么开始写了,先上几张图吧。
是的,其实就一个界面,做三件事情。程序员都爱偷懒,不喜欢做重复的事情,还有就是不爱写文字。^_^
以上代码中username.replace(” “,”“)是因为在EditView中用户输入的手机号码,我做了显示格式处理(xxx xxxx xxxx),所以在提交给登录接口时需要将手机号码中的空格去掉再提交。
因为项目是采用的MVP架构,以上的代码只是View层的实现,真正的登录实现是在Model层中使用BmobSDK进行的登录操作。
这里只是将手机号码作为了username,所以和前两篇文章使用的登录方法是一样的。接下来是手机号注册的实现,在这篇文章的示例中,手机号注册用到了三个元素(手机号、验证码、密码)。
实际上用Bmob SDK提供的手机号注册方法是只需要手机号和验证码即可完成注册过程的,为什么示例中却还有另一个密码值呢?我们先看完代码再说。
以上代码中User对象是继承自BmobUser的,并扩展了一个nickname(昵称)属性。
BmobUser类有一个静态方法signOrLoginByMobilePhone(Context context, String phoneNumber, String security_code, LogInListener listener)是用来做手机号一键注册或登录的。
但是如果注册时需要设置其他属性(如:昵称等等)一同提交就不能用signOrLoginByMobilePhone了。
所以为了满足这样的需求,我采用了另一种方法signOrLogin来实现。并且将手机号码设置为默认的用户名’user.setUsername(phone_number)‘,默认初始密码为123456 以及用手机号码作为默认的昵称‘user.setNickname(phone_number)’
接下来看看重置密码部分的实现:
很简单,只需要调用BmobUser的静态方法resetPasswordBySMSCode,传入新密码和短信验证码即可完成重置密码的过程。
最后再说一下注册和重置密码中用到的短信验证码的获取方法:
验证码模板名称是在Bmob后台创建短信内容模板定义的名称,可以为注册、重置密码创建不同的短信模板,比如:”xx应用,您的注册验证码为xxxxxx。”,”xx应用,您正在重置密码,验证码为xxxxxx,如非本人操作,请忽略。”