11.2 使用Bmob创建移动后端服务" class="reference-link">11.2 使用Bmob创建移动后端服务
了解了Baas的强大优势,下面我们就以Bmob为例来讲讲如何利用Baas在云端搭建移动平台的服务器端。
首先来看看Bmob的官网——http://www.bmob.cn/,主页如图11.4所示。
图11.4 Bmob官网
Bmob官网上已经有了比较详细的开发配置文档和API文档,不过我们还是来实际操作一下会比较好。
首先,要下载Bmob的Android SDK,如图11.5所示。
图11.5 Bmob SDK下载
下载后就可以将Bmob的lib集成到Android Studio中了。将BmobPush_V0.5beta_1027.jar和BmobSDK_V3.2.6_1103.jar拷贝到工程的lib目录下,然后按F4键选择Module Setting,在Dependencies里面添加刚刚加入的lib,如图11.6所示。
然后,进入网站后台选择创建应用。创建好后,系统就会生成三个唯一的Key。这些Key就是App的身份证。
图11.6 引用Bmob Lib库文件
最后,需要修改项目的配置文件。在Mainifest文件中增加一些Bmob所需要用到的权限,代码如下所示。
- <uses-permission android:name="android.permission.INTERNET"/>
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
- <uses-permission android:name=
- "android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.READ_LOGS"/>
这些在Bmob的开发文档—快速入门中都有列举。接下来,在应用程序的主入口中调用如下代码。
- Bmob.initialize(this, "Application ID");
这里的Application ID就是前面创建应用时生成的Key。通过这样一句简单的代码,就完成了整个Bmob项目的准备工作。下面以一个提交反馈的小例子来看看Bmob最基础的数据存储功能。
11.2.1 数据服务" class="reference-link">11.2.1 数据服务
要使用Bmob的数据服务,首先需要创建一个BmobObject对象。在Bmob中,BmobObject就相当于数据库中的一张表,每个属性就相当于表的字段,而每一个BmobObject对象自然就相当于表里的一行数据,这点与很多Web的数据持久化框架差不多,都是通过面向对象的方式来操纵数据。为了简单,这里我们设计了两个基本的属性,并给它们提供了get/set方法,代码如下所示。
- package com.imooc.bmob;
- import cn.bmob.v3.BmobObject;
- public class Feedback extends BmobObject{
- private String name;
- private String feedback;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getFeedback() {
- return feedback;
- }
- public void setFeedback(String feedback) {
- this.feedback = feedback;
- }
- }
接下来,就需要创建Feedback对象来保存我们的数据,代码如下所示。
- //创建BmobObject对象
- Feedback feedbackObj = new Feedback();
- feedbackObj.setName(name);
- feedbackObj.setFeedback(feedback);
- feedbackObj.save(MainActivity.this,new SaveListener() {
- @Override
- public void onSuccess() {
- Toast.makeText(
- MainActivity.this,
- "submit success",
- Toast.LENGTH_LONG).show();
- }
- @Override
- public void onFailure(int i, String s) {
- Toast.makeText(
- MainActivity.this,
- "submit failure",
- Toast.LENGTH_LONG).show();
- }
- });
通过调用BmobObject的save方法,就可以将一个BmobObject对象,保存到云端服务器中,同时产生两个回调方法,通过回调来获取到save成功与失败的状态,并进行相应的操作。
查询操作也基本类似,先来看一个查询所有数据的操作,代码如下所示。
- //通过BmobQuery创建一个查询对象
- BmobQuery<Feedback> query = new BmobQuery<Feedback>();
- query.findObjects(MainActivity.this,new FindListener<Feedback>() {
- @Override
- public void onSuccess(List<Feedback> feedbacks) {
- AlertDialog.Builder builder = new AlertDialog.Builder(
- MainActivity.this);
- builder.setTitle("Query");
- String str = "";
- for (Feedback feedback : feedbacks) {
- str += feedback.getName() + ":" +
- feedback.getFeedback() + "\n";
- }
- builder.setMessage(str);
- builder.create().show();
- }
- @Override
- public void onError(int i, String s) {
- }
- });
通过BmobQuery,创建一个查询对象,并使用findObjects方法来获取数据,与save方法一样,成功与失败两个回调方法可以让我们处理相应的操作。
此外,如果你要查询特定条件下的数据也非常简单,上面的操作就好比SQL中的Select * From Table_Feedback,那么就像在SQL中增加Where条件一样,代码如下所示。
- //通过BmobQuery创建一个查询对象
- BmobQuery<Feedback> query = new BmobQuery<Feedback>();
- //设置查询条件
- query.addWhereEqualTo("name", str);
- query.findObjects(MainActivity.this,new FindListener<Feedback>() {
- @Override
- public void onSuccess(List<Feedback> feedbacks) {
- AlertDialog.Builder builder = new AlertDialog.Builder(
- MainActivity.this);
- builder.setTitle("Query");
- String str = "";
- for (Feedback feedback : feedbacks) {
- str += feedback.getName() + ":" +
- feedback.getFeedback() + "\n";
- }
- builder.setMessage(str);
- builder.create().show();
- }
- @Override
- public void onError(int i, String s) {
- }
- });
通过addWhereEqualTo等各种方法,就相当于我们给SQL语句增加了Where等条件语句一样,Bmob所支持的条件查询语句如图11.7所示。
图11.7 Bmob条件查询语句
11.2.2 推送服务" class="reference-link">11.2.2 推送服务
除了提供数据服务这一基本功能外,Bmob的推送功能也是十分强大的。在前面的基础上,再来给App增加一个推送的功能。
首先,需要在Mainifest文件中再增加一些组件的声明,代码如下所示。
- <service
- android:label="PushService"
- android:name="cn.bmob.push.lib.service.PushService"
- android:process="cn.bmob.push"
- android:permission="cn.bmob.permission.push"
- android:exported="true">
- <intent-filter>
- <action android:name="cn.bmob.push.lib.service.PushService"/>
- </intent-filter>
- </service>
- <receiver android:name="cn.bmob.push.PushReceiver" >
- <intent-filter android:priority="2147483647" ><!--优先级加最高-->
- <!--系统启动完成后会调用-->
- <action android:name="android.intent.action.BOOT_COMPLETED" />
- <!--解锁完成后会调用-->
- <action android:name="android.intent.action.USER_PRESENT" />
- <!--监听网络连通性-->
- <action android:name=
- "android.net.conn.CONNECTIVITY_CHANGE" />
- </intent-filter>
- </receiver>
- <receiver android:name=".PushReceiver">
- <intent-filter>
- <action android:name="cn.bmob.push.action.MESSAGE"/>
- </intent-filter>
- </receiver>
这里配置了Bmob SDK中所需要用到的组件。Bmob也是基于长连接的推送服务,因此也会有一个Service来保存推送服务,最后一个receiver则是我们自己定义的receiver,用来获取实现推送消息后的操作。
接下来,与初始化Bmob sdk一样,也需要在程序入口处初始化Push服务,代码如下所示。
- BmobInstallation.getCurrentInstallation(this).save();
- BmobPush.startWork(this, " Application ID ");
这里同样需要Application ID来作为唯一的身份验证。配置好这些以后,服务器的整个推送架构就完成了。只需要在程序中或者Web页面上发出一条消息,客户端就可以接收到Push的消息了,代码如下所示。
- BmobPushManager push = new BmobPushManager(MainActivity.this);
- push.pushMessageAll("Test");
当客户端接收到Push的消息后,通过以下方式来获取消息,代码如下所示。
- if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {
- String msg = intent.getStringExtra(
- PushConstants.EXTRA_PUSH_MESSAGE_STRING);
- }
获取到的消息会以Json的格式发送过来,所以可以简单地解析一下Json字符串来获取消息的文本内容,代码如下所示。
- Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
- JSONTokener jsonTokener = new JSONTokener(msg);
- try {
- JSONObject object =
- (JSONObject) jsonTokener.nextValue();
- message = object.getString("alert");
- } catch (JSONException e) {
- e.printStackTrace();
- }
获取到消息的文本内容后,就可以采取不同的操作了,可以以Toast的形式显示,也可以记录在App中,当然最常用的还是以Notification的形式通知出来。
- //获取系统Notification服务
- NotificationManager manager = (NotificationManager)
- context.getSystemService(Context.NOTIFICATION_SERVICE);
- //设置Notification相关属性
- Notification notification = new Notification(
- R.drawable.ic_launcher,
- "TestBmob",
- System.currentTimeMillis());
- notification.setLatestEventInfo(
- context,
- "Bmob Test",
- message,
- null);
- manager.notify(R.drawable.ic_launcher, notification);
当然,Bmob的功能远不止这么简单,以上案例演示了Bmob中最基本也是最常用的几个小功能,大家可以在它详细的API文档中找到更多更复杂的使用方法,如图11.8所示。
图11.8 Bmob API文档
通过前面的讲解,我们大致了解了如何通过使用移动后端服务来简化Android App移动端的开发,目前市面上有很多类似的后端服务SDK,这里虽然只举了Bmob一个简单的例子,但是大部分的SDK使用方法都基本与之类似,相信读者通过这个实例,就可以掌握到其他动后端服务SDK的使用方法了。
