Bmob 开发 Android程序快速入门 9 用户管理

小编 2026-07-11 阅读:1962 评论:0
                     Bmob 开发 Android程序快速入门 9 用户管理     用户管理    用户是一个应用程序的核心。对于个人开发者来说,自己的应用程序积累到越多的用...

                     Bmob 开发 Android程序快速入门 9 用户管理

 

 

用户管理

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

有了这个类,你就可以在你的应用程序中添加用户账户功能。

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

 

属性

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

 

扩展用户类

很多时候,你的用户表还会有很多其他字段,如性别、年龄、头像等。那么,你需要对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;
    }
}

更多代码实现大家可以下载SDK,在里面的BmobExample中查找MyUser类,参考它的用法。

 

创建用户对象

创建用户对象如下:

BmobUser user = new BmobUser();

 

注册用户

你的应用程序可能会要求用户注册。下面的代码是一个典型的注册过程:

BmobUser bu = new BmobUser();
bu.setUsername(\"sendi\");
bu.setPassword(\"123456\");
bu.setEmail(\"sendi@163.com\");
bu.signUp(this, new SaveListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast(\"注册成功:\");
    }
    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast(\"注册失败:\"+msg);
    }
});

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

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

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

这里有两点需要注意的:

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

\"\"

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

 

登录用户

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

BmobUser bu2 = new BmobUser();
bu2.setUsername(\"lucky\");
bu2.setPassword(\"123456\");
bu2.login(this, new SaveListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast(\"登录成功:\");
    }
    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast(\"登录失败:\"+msg);
    }
});

 

获取当前用户

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

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

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

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

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

 

退出登录

退出登录非常简单,可以使用如下的代码:

BmobUser.logOut(this);   //清除缓存用户对象
BmobUser currentUser = BmobUser.getCurrentUser(this); // 现在的currentUser是null了

 

更新用户

很多情况下你可能需要修改用户信息,比如你的应用具备修改个人资料的功能,Bmob提供的用户更新方式有两种写法:

第一种:新建一个用户对象,并调用update(context,objectId,updateListener)方法来更新(推荐使用),示例:

BmobUser newUser = new BmobUser();
newUser.setEmail(\"xxx@163.com\");
BmobUser bmobUser = BmobUser.getCurrentUser(this);
newUser.update(this,bmobUser.getObjectId(),new UpdateListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast(\"更新用户信息成功:\");
    }
    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast(\"更新用户信息失败:\" + msg);
    }
});

 

第二种:获取本地的用户对象,并调用update(context,updateListener)方法来更新(不推荐使用),示例:

BmobUser bmobUser = BmobUser.getCurrentUser(this);
// 修改用户的邮箱为xxx@163.com
bmobUser.setEmail(\"xxx@163.com\");
bmobUser.update(this,new UpdateListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast(\"更新用户信息成功:\");
    }
    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast(\"更新用户信息失败:\" + msg);
    }
});

1、开发者在进行用户更新操作的时候,推荐使用第一种方式来进行用户的更新操作,因为此方法只会更新你提交的用户信息(比如只会向服务器提交当前用户的email值),而不会将本地存储的用户信息也提交到后台更新。

2、在更新用户信息时,如果用户邮箱有变更并且在管理后台打开了邮箱验证选项的话,Bmob云后端同样会自动发一封邮件验证信息给用户。

 

查询用户

查询用户和查询普通对象一样,只需指定BmobUser类即可,如下:

BmobQuery<BmobUser> query = new BmobQuery<BmobUser>();
query.addWhereEqualTo(\"username\", \"lucky\");
query.findObjects(this, new FindListener<BmobUser>() {
    @Override
    public void onSuccess(List<BmobUser> object) {
        // TODO Auto-generated method stub
        toast(\"查询用户成功:\"+object.size());
    }
    @Override
    public void onError(int code, String msg) {
        // TODO Auto-generated method stub
        toast(\"查询用户失败:\"+msg);
    }
});

浏览器中查看用户表

User表是一个特殊的表,专门存储BmobUser对象。在浏览器端,你会看到一个User表旁边有一个小人的图标。

\"\"

 

密码重置

一旦你引入了一个密码系统,那么肯定会有用户忘记密码的情况。对于这种情况,我们提供了一种方法,让用户安全地重置起密码。

重置密码的流程很简单,开发者只需要求用户输入注册的电子邮件地址即可:

final String email = \"xxx@163.com\";
BmobUser.resetPassword(this, email, new ResetPasswordListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast(\"重置密码请求成功,请到\" + email + \"邮箱进行密码重置操作\");
    }
    @Override
    public void onFailure(int code, String e) {
        // TODO Auto-generated method stub
        toast(\"重置密码失败:\" + e);
    }
});

密码重置流程如下:

  1. 用户输入他们的电子邮件,请求重置自己的密码。
  2. Bmob向他们的邮箱发送一封包含特殊的密码重置连接的电子邮件。
  3. 用户根据向导点击重置密码连接,打开一个特殊的Bmob页面,根据提示他们可以输入一个新的密码。
  4. 用户的密码已被重置为新输入的密码。

 

找回密码

为方便大家了解如何用Bmob开发找回密码的功能,我们为大家准备了另外一份文档,详细见我们在Github中的文档:

https://github.com/bmob/bmob-cloudcode-demo/blob/master/HOW-TO-FIND-PASSWORD.md

邮箱验证

设置邮件验证是一个可选的应用设置, 这样可以对已经确认过邮件的用户提供一部分保留的体验,邮件验证功能会在用户(User)对象中加入emailVerified字段, 当一个用户的邮件被新添加或者修改过的话,emailVerified会被默认设为false,如果应用设置中开启了邮箱认证功能,Bmob会对用户填写的邮箱发送一个链接, 这个链接可以把emailVerified设置为 true.

emailVerified 字段有 3 种状态可以考虑:

  • true : 用户可以点击邮件中的链接通过Bmob来验证地址,一个用户永远不会在新创建这个值的时候显示emailVerified为true。
  • false : 用户(User)对象最后一次被刷新的时候, 用户并没有确认过他的邮箱地址, 如果你看到emailVerified为false的话,你可以考虑刷新用户(User)对象。
  • missing : 用户(User)对象已经被创建,但应用设置并没有开启邮件验证功能; 或者用户(User)对象没有email邮箱。

请求验证Email

发送给用户的邮箱验证邮件会在一周内失效,可以通过调用 requestEmailVerify 来强制重新发送:

final String email = \"xxx@qq.com\";
BmobUser.requestEmailVerify(this, email, new EmailVerifyListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast(\"请求验证邮件成功,请到\" + email + \"邮箱中进行激活。\");
    }
    @Override
    public void onFailure(int code, String e) {
        // TODO Auto-generated method stub
        toast(\"请求验证邮件失败:\" + e);
    }
});

 

第三方账号登陆

Bmob提供了非常简单的方法来实现使用第三方账号登陆的功能,目前支持新浪微博、QQ账号的登陆。

新浪微博账号登陆

使用新浪微博账号登陆,需要先在新浪微博开放平台中创建应用并得到appkey和redirectUrl,在新浪微博开放平台创建应用的步骤可以参考新浪微博提供的开发文档。然后将新浪微博提供的SDK和BmobSDK一样放入自己项目的libs目录中。接下来就是在程序中调用BmobSDK提供的方法了。示例代码如下:

BmobUser.weiboLogin(this, \"appkey\", \"redirectUrl\", new OtherLoginListener() {
    @Override
    public void onSuccess(JSONObject userAuth) {
        // TODO Auto-generated method stub
        toast(\"第三方登陆成功:\"+userAuth);
    }

    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast(\"第三方登陆失败:\"+msg);
    }
});

QQ账号登陆

使用QQ账号登陆,同样也需要在腾讯开放平台中创建应用并得到appid,在腾讯开放平台创建应用的步骤可以参考腾讯开放平台提供的开发文档。然后将腾讯提供的SDK和BmobSDK一样放入自己项目的libs目录中。使用腾讯SDK还需要在AndroidManifest.xml文件中添加相应的配置如下:

<!-- qq回调需要注册该activity -->
<activity
    android:name=\"com.tencent.connect.common.AssistActivity\"
    android:configChanges=\"orientation|keyboardHidden\"
    android:screenOrientation=\"portrait\"
    android:theme=\"@android:style/Theme.Translucent.NoTitleBar\" />

<!-- qq授权需要注册该activity -->
<activity
    android:name=\"com.tencent.tauth.AuthActivity\"
    android:launchMode=\"singleTask\"
    android:noHistory=\"true\" >
    <intent-filter>
        <action android:name=\"android.intent.action.VIEW\" />

        <category android:name=\"android.intent.category.DEFAULT\" />
        <category android:name=\"android.intent.category.BROWSABLE\" />

        <data android:scheme=\"tencent你的AppId\" />
    </intent-filter>
</activity>

最后是在程序中调用BmobSDK提供的方法了,示例代码如下:

BmobUser.qqLogin(this, \"appid\", new OtherLoginListener() {
    @Override
    public void onSuccess(JSONObject userAuth) {
        // TODO Auto-generated method stub
        toast(\"第三方登陆成功:\"+userAuth.toString());
    }

    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast(\"第三方登陆失败:\"+msg);
    }
});

 

第三方账号与BmobUser绑定

如果你的应用中有其他功能已经使用到了相关第三方平台的功能,比如社交分享功能,那么你可以将已经得到的用户授权信息传递给BmobSDK来便捷地与BmobUser进行绑定。以下代码展示了将第三方账号和已经存在的BmobUser对象进行绑定:

BmobUser.associateWithAuthDate(this, BmobUser.getCurrentUser(this), userAuth, new UpdateListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub

    }
});

以上代码中的参数userAuth是由开发者构造的JSONObject格式的第三方平台授权信息,相关平台的授权信息格式如下所示: 新浪微博的userAuth内容:

{\"weibo\": {
      \"uid\": \"145785469\",
            \"access_token\": \"2.00vs9yFCI8FrHCba4951pdq5vn1slZ\",
            \"expiration_in\": \"78000\"
    }
}

QQ的userAuth内容:

{\"qq\": {
      \"openid\": \"AAC61872C459FB196AECFA9D6FEBA334\",
      \"access_token\": \"19A1E9FB3E440B4D15DBB44a39946FD4\",
      \"expires_in\": 7776000
    }
}

 

解除绑定

解除第三方账号与BmobUser的绑定关系如下代码所示:

BmobUser.dissociateAuthData(this, BmobUser.getCurrentUser(this), new UpdateListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast(\"解除绑定成功\");
    }

    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast(\"解除绑定失败:\"+msg);
    }
});

第三方登录的案例源码

大家可以下载我们提供的案例源码:https://github.com/bmob/bmob-android-demo-thirdpartylogin 这个源码包含了第三方登录的源码和登录之后如何获取用户基本信息的部分。

 

希望对你有帮助。

 

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

上一篇:Tomcat多实例 下一篇:Tomcat开启Debug模式
热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表