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

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


本讲内容:用户管理

用户是一个应用程序的核心。对于个人开发者来说,自己的应用程序积累到越多的用户,就会给自己带来越强的创作动力。因此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服务器端创建的应用key
		Bmob.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 要原码的、路过的、学习过的请留个言,顶个呗~~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值