天天看点

使用Bmob进行用户登录

最近刚好使用到Bmob云服务,在网上调试了好久,总算是成功了。看到很多关于Bmob登录的方法,但都是属于老版本,好像在网上没看到什么使用新版本的登录,所以想在研究完之后分享下经验,顺便说一下,不怎么写博客,所以也想借这个机会锻炼一下写作能力,有不足的地方,还希望有心的小伙伴们多多指教。

既然是使用Bmob提供的相关服务,那首先自然是到官网上将sdk下载下来集成到我们的项目当中。这里我使用的开发环境是AndroidStudio,小伙伴们要记得注意。我个人感觉使用AndroidStudio和Eclipse不管是项目开发还是集成外部sdk都有很大的不同,我这里使用的版本是bmob-sdk:3.5.0。按照Bmob官方的说明文档首先是将Bmob的maven仓库地址配置到我们项目的build.gardle文件中,我的配置方式如下:

allprojects {

    repositories {

        jcenter()

        maven {

            url "https://raw.github.com/bmob/bmob-android-sdk/master"

        }

    }

}

配置完该仓库地址之后,文档要求我们接着在gradle文件中添加compile依赖库

useLibrary 'org.apache.http.legacy'

然后在dependencies中配置我们需要的sdk工具包,这里将我们要用到的相应的版本配置进去

compile 'cn.bmob.android:bmob-sdk:3.5.0'

因为我的项目是在Android6.0的真机上进行调试的,按照官方的说明文档,要兼容Android6.0,还需要添加以下依赖

compile 'cn.bmob.android:http-legacy:1.0'

还有就是文档中提到需要配置com.android.support:appcompat-v包,但是我的AndroidStudio中一般创建项目时已经默认配置好了,我这里使用的是v7包。较为复杂的build.gradle文件配置完成后接下来剩下的加入相应的权限就相对来说比较简单了。

紧接着是在代码中初始化SDK,这里要说的是最新版本的登录功能。我自己在网上搜索到的关于这一功能的说明都是当我们实现登录接口时API要求我们实现两个方法,一个是登录成功的方法,另一个是登录失败的方法。但是当我配置完SDK后调用登录方法时,却发现它只要求我实现一个方法,代码如下:

```

Bmob.initialize(Login.this, BmobCloudDao.Application_ID);

        BmobUser bu = new BmobUser();

        bu.setUsername(username);

        bu.setPassword(password);

        bu.login(new SaveListener<BmobUser>() {

            @Override

            public void done(BmobUser bmobUser, BmobException e) {

                progressDialog.dismiss();

                if (e == null) {

                    Utils.showTest(Login.this, "登录成功!");

                    Intent intent = new Intent();

                    intent.putExtra(Utils.USER_NAME, username);

                    setResult(Utils.REQUEST_CODE, intent);

                    finish();

                } else {

                    Utils.showTest(Login.this, "登录失败,请检查用户名和密码是否正确");

                }

            }

        });

在上面的代码段中我们可以看到,首先是调用Bmob类的初始化方法,它接收两个参数,一个是上下文,第二个是我们在Bmob官网上注册应用的APP_ID,在云端的数据表中,我们创建应用时它会为我们提供一个默认的登录用户的数据表,并且在代码中SDK为我们提供了BombUser类来表示登录的用户,我们将这个类的对象创建出来并设置完用户名和密码之后调用login方法,它要求我们传入一个SaveListener的抽象类,并实现该方法。到这里就发现它的不同之处了,这里只要求我们实现一个done(完成)的方法,并没有什么成功和失败的方法,并且,这里的login方法只接收一个参数,而我在网上搜索的都是传入两个参数的(另一个参数是上下文)。虽然两个方法经过版本更新后变成了只有一个方法,但我发现使用方式却是一样的。在done方法中我们可以发现,它传入的第二个参数是一个BmobException的异常对象,那么我们仍然在该方法中对它进行判空操作,若该对象为空,则给出用户登录成功的提示。否则,可以通过调用该异常对象的getMessage方法来获取异常信息。

这里分享一个我个人调试的细节错误,在代码完成后我在手机上运行,登录失败后通过调试给出了9016的信息,我到Bmob的官网上查找错误码列表却发现该错误码表示“无网络连接,请检查您的手机网络”,然后我检查自己的手机,明明联入网络了啊,于是纠结了好久....后来才发现是没有配置相应的权限(具体权限可以到官方文档查看)。

最后再说明一下,由于本人在开发的时候,并没有找到对最新版本的登录功能的说明,所以想在这里分享一下,其实个人感觉一般第三方提供的SDK比较难不是使用部分,恰恰是配置部分......

继续阅读