使用手机号登录、注册、重置密码
2016-03-02 16:30
1096 查看
在移动开发的过程中,我们通常会看到许多的应用都是使用手机号注册进行登录的,这样做可以让注册账号和登录的用户体验变得更加简单,读取通讯录后能更加容易的建立用户关系等等优点。当然有优点必然也会存在缺点,用手机号的最大问题就在于手机是可以被更换的(例如你换了城市,或者转网,转套餐,换了手机号)。而换掉的手机号是可能被分配给别人的。这导致有可能一个人拿到一个新的手机号,用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.setPassword(password)’ 以及用手机号码作为默认的昵称‘user.setNickname(phone_number)’。
接下来看看重置密码部分的实现:
很简单,只需要调用BmobUser的静态方法resetPasswordBySMSCode,传入新密码和短信验证码即可完成重置密码的过程。
最后再说一下注册和重置密码中用到的短信验证码的获取方法:
验证码模板名称是在Bmob后台创建短信内容模板定义的名称,可以为注册、重置密码创建不同的短信模板,比如:”xx应用,您的注册验证码为xxxxxx。”,”xx应用,您正在重置密码,验证码为xxxxxx,如非本人操作,请忽略。”
今天我们在这里就先不讨论这个使用手机号注册的利弊问题了,这和今天的标题不符。
唉呀…. 不知道怎么开始写了,先上几张图吧。
登录 | 注册 | 重置密码 |
---|---|---|
/** * 登录 * @param username * @param password */ private void login(String username, String password){ if(TextUtils.isEmpty(username)){ mUserNameTextInputLayout.setError(getString(R.string.username_is_null)); return; }else if(TextUtils.isEmpty(password)){ mPasswordTextInputLayout.setError(getString(R.string.password_is_null)); return; }else{ //否则隐藏上次错误 mUserNameTextInputLayout.setErrorEnabled(false); mPasswordTextInputLayout.setErrorEnabled(false); } mProgressBar.setVisibility(View.VISIBLE); // 显示圆形进度条 mBtnLogin.setEnabled(false); // 为了避免用户重复点击登录按钮,在开始执行登录请求时将登录按钮设置为不可用状态 appAction.login(username.replace(" ", ""), password, new ActionCallbackListener<Void>() { @Override public void onSuccess(Void data) { // 登陆成功 startActivity(new Intent(application, MainActivity.class)); finish(); } @Override public void onFailure(int errorEvent, String message) { showToast(message); mProgressBar.setVisibility(View.INVISIBLE); // 隐藏圆形进度条 mBtnLogin.setEnabled(true); // 登录失败时,将登录按钮恢复为可用状态 } }); }
以上代码中username.replace(” “,”“)是因为在EditView中用户输入的手机号码,我做了显示格式处理(xxx xxxx xxxx),所以在提交给登录接口时需要将手机号码中的空格去掉再提交。因为项目是采用的MVP架构,以上的代码只是View层的实现,真正的登录实现是在Model层中使用BmobSDK进行的登录操作。
/** * Model层-登录 * @param username 用户名 * @param password 密码 * @param listener 回调监听 */ @Override public void login(String username, String password, final ResponseListener<Void> listener) { BmobUser user = new BmobUser(); user.setUsername(username); user.setPassword(password); user.login(mContext, new SaveListener() { @Override public void onSuccess() { listener.onSuccess(null); } @Override public void onFailure(int i, String s) { listener.onFailure(i, s); } }); }
这里只是将手机号码作为了username,所以和前两篇文章使用的登录方法是一样的。接下来是手机号注册的实现,在这篇文章的示例中,手机号注册用到了三个元素(手机号、验证码、密码)。实际上用Bmob SDK提供的手机号注册方法是只需要手机号和验证码即可完成注册过程的,为什么示例中却还有另一个密码值呢?我们先看完代码再说。
/** * Model层-手机号注册 * @param phone_number 手机号码 * @param password 注册时设置的密码 * @param security_code 短信验证码 * @param listener 回调 */ @Override public void signUp(String phone_number, String password, String security_code, final ResponseListener<Void> listener) { User user = new User(); user.setUsername(phone_number); user.setPassword(password); user.setMobilePhoneNumber(phone_number); user.setNickname(phone_number); user.signOrLogin(mContext, security_code, new SaveListener() { @Override public void onSuccess() { listener.onSuccess(null); } @Override public void onFailure(int i, String s) { listener.onFailure(i, s); } }); }
以上代码中User对象是继承自BmobUser的,并扩展了一个nickname(昵称)属性。BmobUser类有一个静态方法 signOrLoginByMobilePhone(Context context, String phoneNumber, String security_code, LogInListener listener) 是用来做手机号一键注册或登录的。
但是如果注册时需要设置其他属性(如:昵称等等)一同提交就不能用signOrLoginByMobilePhone了。所以为了满足这样的需求,我采用了另一种方法 signOrLogin 来实现。并且将手机号码设置为默认的用户名’user.setUsername(phone_number)‘,默认初始密码为123456 ‘user.setPassword(password)’ 以及用手机号码作为默认的昵称‘user.setNickname(phone_number)’。
接下来看看重置密码部分的实现:
/** * 验证码重置密码 * @param security_code 短信验证码 * @param new_pwd 新密码 * @param listener 回调 */ @Override public void resetPasswordBySMSCode(String security_code, String new_pwd, final ResponseListener<Void> listener) { BmobUser.resetPasswordBySMSCode(mContext, security_code, new_pwd, new ResetPasswordByCodeListener() { @Override public void done(BmobException ex) { if (ex == null) { listener.onSuccess(null); } else { listener.onFailure(ex.getErrorCode(), ex.getLocalizedMessage()); } } }); }
很简单,只需要调用BmobUser的静态方法resetPasswordBySMSCode,传入新密码和短信验证码即可完成重置密码的过程。
最后再说一下注册和重置密码中用到的短信验证码的获取方法:
/** * 请求验证码 * @param phone_number 手机号 * @param template_name 验证码模板名称 * @param listener 回调 */ @Override public void requestSMSCode(String phone_number, String template_name, final ResponseListener<String> listener) { BmobSMS.requestSMSCode(mContext, phone_number, template_name, new RequestSMSCodeListener() { @Override public void done(Integer integer, BmobException e) { if (e == null) { listener.onSuccess(integer.toString()); } else { listener.onFailure(e.getErrorCode(), e.getMessage()); } } }); }
验证码模板名称是在Bmob后台创建短信内容模板定义的名称,可以为注册、重置密码创建不同的短信模板,比如:”xx应用,您的注册验证码为xxxxxx。”,”xx应用,您正在重置密码,验证码为xxxxxx,如非本人操作,请忽略。”
相关文章推荐
- 【Android】不弹root请求框检测手机是否root
- 《tar命令打包格式及组合find应用原理及误区详解》
- 夺命雷公狗---微信开发28----微信群发消息1
- 最大堆
- UE3 Animation Compression List
- JS基础(二)
- Activity启动模式
- 获取form表单的内容
- Material Design的低版本兼容实现——View & Animation
- 39.layoutSubviews和drawRect调用时机的探究
- 关于iOS8之前和以后的相册图片获取实现
- android 测试教程(转)
- 面向对象
- DB2完整的SQLCODE和SQLState错误信息
- Nginx中虚拟主机与指定访问路径的设置方法讲解
- DataTable常用方法属性
- 1060. Are They Equal (25)
- studio中install_failed_dexopt 解决
- c++重写string类
- JavaScript的事件举例