Android之Bmob移动云服务(用户管理)

来源:互联网 发布:ubuntu python怎么用 编辑:程序博客网 时间:2024/05/01 01:08

如果耐不住寂寞,你就看不到繁华。


本讲内容:用户管理

用户是一个应用程序的核心。对于个人开发者来说,自己的应用程序积累到越多的用户,就会给自己带来越强的创作动力。因此Bmob提供了一个专门的用户类——BmobUser来自动处理用户账户管理所需的功能。有了这个类,你就可以在你的应用程序中添加用户账户功能。

BmobUser是BmobObject的一个子类,它继承了BmobObject所有的方法,具有BmobObject相同的功能。不同的是,BmobUser增加了一些特定的关于用户账户管理相关的功能。


1、属性
BmobUser除了从BmobObject继承的属性外,还有几个特定的属性: username: 用户的用户名(必需)。 password: 用户的密码(必需)。 email: 用户的电子邮件地址(可选)。

2、扩展用户类
很多时候,你的用户表还会有很多其他字段,如性别、年龄、头像等。那么,你需要对BmobUser类进行扩展,添加一些新的属性。示例代码如下所示:

public class SpecialUser extends BmobUser {    private boolean sex;    private String nick;    public boolean getSex() {        return this.sex;    }    public void setSex(boolean sex) {        this.sex = sex;    }    public String getNick() {        return this.sex;    }    public void setNick(String nick) {        this.nick = nick;    }}

3、创建用户对象如下:
BmobUser user = new BmobUser();

二、注册用户

在注册过程中,服务器会对注册用户信息进行检查,以确保注册的用户名和电子邮件地址是独一无二的。此外,对于用户的密码,你可以在应用程序中进行相应的加密处理后提交。

如果注册不成功,你可以查看返回的错误对象。最有可能的情况是,用户名或电子邮件已经被另一个用户注册。这种情况你可以提示用户,要求他们尝试使用不同的用户名进行注册。

你也可以要求用户使用Email做为用户名注册,这样做的好处是,你在提交信息的时候可以将输入的“用户名“默认设置为用户的Email地址,以后在用户忘记密码的情况下可以使用Bmob提供重置密码功能。

这里有两点需要注意的:
有些时候你可能需要在用户注册时发送一封验证邮件,以确认用户邮箱的真实性。这时,你只需要登录自己的应用管理后台,在应用设置->邮件设置(下图)中把“邮箱验证”功能打开,Bmob云后端就会在注册时自动发动一封验证给用户。


  • username字段是大小写敏感的字段,如果你希望应用的用户名不区分大小写,请在注册和登录时进行大小写的统一转换。

三、登录用户
当用户注册成功后,您需要让他们以后能够用注册的用户名登录到他们的账户使用应用。要做到这一点,你可以使用BmobUser类的login方法。



四、获取当前用户
如果用户在每次打开你的应用程序时都要登录,这将会直接影响到你应用的用户体验。为了避免这种情况,你可以使用缓存的CurrentUser对象。

每当你应用的用户注册成功或是第一次登录成功,都会在本地磁盘中有一个缓存的用户对象,这样,你可以通过获取这个缓存的用户对象来进行登录:

BmobUser bmobUser = BmobUser.getCurrentUser(this);if(bmobUser != null){    // 允许用户使用应用}else{    //缓存用户对象为空时, 可打开用户注册界面…}

在扩展了用户类的情况下获取当前登录用户,可以使用如下的示例代码(SpecialUser类可参看上面):

SpecialUser userInfo = BmobUser.getCurrentUser(this,SpecialUser.class);


五、密码重置
一旦你引入了一个密码系统,那么肯定会有用户忘记密码的情况。对于这种情况,我们提供了一种方法,让用户安全地重置起密码。
重置密码的流程很简单,开发者只需要求用户输入注册的电子邮件地址即可:


示例一:


下面是res/layout/activity_main.xml 布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <ListView        android:id="@+id/listview"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:cacheColorHint="#00000000"        android:listSelector="@drawable/selector_list_item" /></RelativeLayout>

下面是res/layout/list_item.xml 布局文件:

<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/tv_item"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_gravity="center_vertical"    android:minHeight="56dp"    android:paddingLeft="20dp"    android:textSize="16sp" ></TextView>

下面是res/drawable/selector_list_item文件

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_pressed="true"><shape>            <solid android:color="@color/white" />        </shape></item>    <item android:state_focused="true"><shape>            <solid android:color="@color/white" />        </shape></item>    <item android:state_selected="true"><shape>            <solid android:color="@color/white" />        </shape></item>    <item><shape>            <solid android:color="@color/ivory" />        </shape></item></selector>

下面是res/values/strings.xml 布局文件:

<string-array name="user_list">        <item>1. 注册用户</item>        <item>2. 登陆用户</item>        <item>3. 获取当前用户</item>        <item>4. 退出登陆</item>        <item>5. 更新用户</item>        <item>6. 查询用户</item>        <item>7. 重置密码</item>        <item>8. 验证旧密码</item>        <item>9. 验证邮件</item>    </string-array>

下面是MyUser.java文件:

/** * 扩展用户类 */public class MyUser extends BmobUser {private Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}

下面是BaseActivity.java文件:

/** * 设置activity的基础类 * 变量可以在这里设置 * */public class BaseActivity extends Activity {public static String TAG="tag";protected ListView mListview;protected BaseAdapter mAdapter;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}public void toast(String msg){Toast.makeText(this, msg, Toast.LENGTH_LONG).show();Log.d(TAG, msg);}}

下面是UserActivity.java主界面文件:

/** * 用户管理 * @author Administrator * */public class UserActivity extends BaseActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化 Bmob SDK ,并将第二个参数appKey替换成你在Bmob服务器端创建的应用keyBmob.initialize(this, "14fcb34593937578a18862a1b33f29a1");  mListview=(ListView) findViewById(R.id.listview);mAdapter=new ArrayAdapter<>(this, R.layout.list_item, getResources().getStringArray(R.array.user_list));mListview.setAdapter(mAdapter);mListview.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {testBmob(position+1);}});}private void testBmob(int position){switch (position) {case 1:testSignUp();break;case 2:testLogin();break;case 3:testGetCurrentUser();break;case 4:testLogOut();break;case 5:updateUser();break;case 6:testFindBmobUser();break;case 7:testResetPassword();break;case 8:testCheckPassword();break;case 9:testEmailVerify();break;}}/** * 注册用户 */private void testSignUp(){final MyUser myUser=new MyUser();myUser.setUsername("jin");myUser.setPassword("123456");myUser.setEmail("1156494083@qq.com");myUser.setAge(21);myUser.signUp(this, new SaveListener() {public void onSuccess() {toast("注册成功:" + myUser.getUsername() + "-"+ myUser.getObjectId() + "-" + myUser.getCreatedAt()+ "-" + myUser.getSessionToken()+",是否验证:"+myUser.getEmailVerified());}public void onFailure(int code, String msg) {toast("注册失败:" + msg);}});}/** * 登陆用户 */private void testLogin() {final BmobUser bu2=new BmobUser();bu2.setUsername("jin");bu2.setPassword("123456");bu2.login(this, new SaveListener() {public void onSuccess() {toast(bu2.getUsername() + "登陆成功");testGetCurrentUser();}public void onFailure(int code, String msg) {toast("登陆失败:" + msg);}});}/** * 获取当前用户 */private void testGetCurrentUser() {//没扩展了用户类的情况下获取当前登录用户//BmobUser myUser = BmobUser.getCurrentUser(this);//toast("当前用户信息:objectId = "+myUser);//Log.i("tag","当前用户信息:objectId = " + myUser);//在扩展了用户类的情况下获取当前登录用户MyUser myUser=BmobUser.getCurrentUser(this,MyUser.class);if(myUser!=null){toast("当前用户信息:objectId =" + myUser.getObjectId() + ",name = " + myUser.getUsername()+ ",age = "+ myUser.getAge());}else{toast("当前用户为null,请登录。");}}/** * 退出当前登陆 */private void testLogOut() {BmobUser.logOut(this);toast("退出当前登陆");}/** * 更新用户信息 */private void updateUser() {MyUser newUser=new MyUser();newUser.setAge(18);//newUser.setUsername("dan");//newUser.setPassword("118");密码也可以改的BmobUser myUser=BmobUser.getCurrentUser(this);newUser.update(this, myUser.getObjectId(), new UpdateListener() {public void onSuccess() {toast("更新用户信息成功:");testGetCurrentUser();}public void onFailure(int code, String msg) {toast("更新用户信息失败:" + msg);}});}/** * 查询用户 */private void testFindBmobUser() {BmobQuery<MyUser> query=new BmobQuery<MyUser>();query.addWhereEqualTo("username", "jin");query.findObjects(this, new FindListener<MyUser>() {public void onSuccess(List<MyUser> object) {toast("查询用户成功:" +object.size());}public void onError(int code, String msg) {toast("查询用户失败:" + msg);}});}/** * 重置密码 */private void testResetPassword() {final String email="1156494083@qq.com";BmobUser.resetPassword(this, email, new ResetPasswordListener() {public void onSuccess() {toast("重置密码请求成功,请到" + email + "邮箱进行密码重置操作");}public void onFailure(int code, String msg) {toast("重置密码失败:" + msg);}});}/** * 验证旧密码是否正确 */private void testCheckPassword() {BmobQuery<MyUser> query=new BmobQuery<MyUser>();final MyUser myUser=BmobUser.getCurrentUser(this, MyUser.class);query.addWhereEqualTo("password", "123456");query.addWhereEqualTo("username", myUser.getUsername());query.findObjects(this, new FindListener<MyUser>() {// 如果你传的密码是正确的,那么cod.size()的大小是1,这个就代表你输入的旧密码是正确的,否则是失败的public void onError(int code, String msg) {toast("查询密码失败:");}public void onSuccess(List<MyUser> object) {toast("查询密码成功:" + object.size());}});}/** * 请求验证邮件 * 发送给用户的邮箱验证邮件会在一周内失效,可以通过调用 requestEmailVerify 来强制重新发送: */private void testEmailVerify() {final String email="1156494083@qq.com";BmobUser.requestEmailVerify(this, email, new EmailVerifyListener() {public void onSuccess() {toast("请求验证邮件成功,请到" + email + "邮箱中进行激活账户。");}public void onFailure(int code, String msg) {toast("请求验证邮件失败:" + msg);}});}}



Take your time and enjoy it 要原码的、路过的、学习过的请留个言,顶个呗~~

0 0
原创粉丝点击