概述

Bmob是一个移动后端云服务平台,提供了如下的后端服务。

  • 消息推送

    通过云推送,你可以随时随地向应用程序的用户推送通知或消息,与用户保持积极互动,提升用户留存率,活跃度以及用户体验度。

  • 即时通讯

    为开发者提供 IM、客服、实时音视频等通讯功能。开发者不必搭建服务端硬件环境就可以将即时通讯、实时网络功能快速集成至应用中。

  • 用户系统

    用户是一个应用程序的核心,Bmob 为用户封装了一整套用户注册登录的功能。支持邮箱注册登录,手机验证码登录,第三方授权登录等方式。

  • 安全验证

    在软件架构层面 Bmob 提供了传输层面、应用层次、表层次、ACL 角色管理、发布层次等不同粒度的权限控制的方式,确保用户数据的安全。

  • 备份还原

    为了防止某些突发的事情,我们对每个应用云端数据库中的数据都会进行实时/定时在线备份,持续保护业务数据。在需要时,可以及时还原数据。

  • 团队管理

    团队管理是为了方便多人写作。可以分配你帐号的应用给其他合作的伙伴,一起对应用进行管理运营,可对各个业务进行权限分配。

官网:https://www.bmob.cn/


使用

获取密钥和控制台使用

注册好账号在控制台,首先创建应用

创建完成后结果如下,点击应用Key就可以看到密钥

点击云数据库可以看到后台数据库

默认一张User表

SDK导入

(这部分复制官网文档了)

鉴于目前Google官方推荐使用 Android Studio 进行Android项目开发,自 V3.4.2 开始,Bmob Android SDK 可以使用Gradle来进行包依赖管理,如果你使用Android Studio来进行基于BmobSDK的项目开发,有两种方式:

自动导入(推荐)

请按照如下两个步骤进行:

  1. 在 Project 的 build.gradle 文件中添加 Bmob的maven仓库地址
    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.2.3'
        }
    }

    allprojects {
        repositories {
            jcenter()
            //Bmob的maven仓库地址--必填
            maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
        }
    }
  1. appbuild.gradle文件中添加依赖文件
android {
    useLibrary 'org.apache.http.legacy'
}
    dependencies {
        implementation 'cn.bmob.android:bmob-sdk:3.7.3-rc1'
        implementation "io.reactivex.rxjava2:rxjava:2.2.2"
        implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
        implementation 'com.squareup.okio:okio:2.1.0'
        implementation 'com.google.code.gson:gson:2.8.5'
        implementation 'com.squareup.okhttp3:okhttp:3.12.0'
    }

注:

[1]、v3.6.8-rc2开始,远程仓库中数据SDK包含了libbmob.so及自动更新组件所需要的资源文件。开发者再也不需要配置libbmob.so,不需要添加依赖jar,也不需要复制自动更新组件的资源文件啦,只需要添加以下依赖即可。

[2]、每个版本的im依赖特定版本的bmob-sdk:

  • bmob-im:1.1.8--->bmob-sdk:3.3.5
  • bmob-im:1.1.9--->bmob-sdk:3.4.3
  • bmob-im:2.0.1--->bmob-sdk:3.4.6-0304
  • bmob-im:2.0.2--->bmob-sdk:3.4.6-0304
  • bmob-im:2.0.3--->bmob-sdk:3.4.6
  • bmob-im:2.0.4--->bmob-sdk:3.4.6
  • bmob-im:2.0.5--->bmob-sdk:3.4.7-aar
  • bmob-im:2.0.6--->bmob-sdk:3.5.0

其中

  • bmob-sdk:3.4.6-0304是Bmob Android SDK的过渡版本,主要用于NewIM_v2.0.1及v2.0.2
  • bmob-sdk:3.4.6的相关依赖包可见注释[3]

[3]、bmob-sdk:3.4.6依赖以下包:

implementation 'cn.bmob.android:bmob-sdk:3.4.6'
implementation 'com.squareup.okhttp:okhttp:2.4.0'//CDN文件服务使用okhttp相关包进行文件的上传和下载(必填)
implementation 'com.squareup.okio:okio:1.4.0'

如果需要兼容Android6.0系统,请添加以下两项:

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

[4]、bmob-sms适用于只需要使用Bmob短信功能的开发者,而bmob-sdk内部包含了bmob-sms的短信功能,请不要重复添加。

[5]、BmobSDK的官方仓库:bmob-android-sdk,开发者可到此仓库查看最新发布的各版本SDK,我们会尽量与官网发布的SDK保持同步更新。

手动导入

  1. 开发者到SDK下载中心下载 数据服务 的Android 版本的SDK,并将下载下来的本地导入SDK文件夹里面的文件根据需要复制到工程的libs和res相应目录下。

  2. appbuid.gradle文件中添加SO库目录配置:

    android {
        sourceSets {
            main.jniLibs.srcDirs = ['libs']
       }
    }
    
  3. 点击Sync,同步配置。

配置权限

在你的应用程序的AndroidManifest.xml文件中添加相应的权限:

<!--允许联网 --> 
<uses-permission android:name="android.permission.INTERNET" /> 
<!--获取GSM(2g)、WCDMA(联通3g)等网络状态的信息  --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<!--获取wifi网络状态的信息 --> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<!--保持CPU 运转,屏幕和键盘灯有可能是关闭的,用于文件上传和下载 -->
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<!--获取sd卡写的权限,用于文件上传和下载-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许读取手机状态 用于创建BmobInstallation--> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

配置ContentProvider

<application>
···
<provider
    android:name="cn.bmob.v3.util.BmobContentProvider"
    android:authorities="你的应用包名.BmobContentProvider">
</provider>
···
</application>

初始化BmobSDK

Bmob.initialize(this, "Your Application ID"); 

即点击最开始图里的应用KEY来获得

准备实体类

首先创建JavaBean,新建一个java类继承BmobObject

public class Person extends BmobObject {
    private String name;
    private String address;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

添加

    //添加数据
    public void add(View view) {
        Person p = new Person();
        p.setName("添加数据的姓名");
        p.setAddress("添加数据的地址");
        p.save(new SaveListener<String>() {
            @Override
            public void done(String s, BmobException e) {
                if (e == null) {
                    Toast.makeText(MainActivity.this, "添加数据成功,返回objectId为" + s, Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "创建数据失败,返回Exception为:" + e, Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

点击增加,效果如👉

进入后台,可以看到记录已经添加

可以看到这里生成了一个objectId,唯一确定一条记录。下面的几个操作基本都需要传进去一共id,就是这个东西。 

修改

    public void update(View v) {
        Person p = new Person();
        p.setAddress("被修改的地址");
        p.update("eee8101a84", new UpdateListener() {

            @Override
            public void done(BmobException e) {
                if (e == null) {
                    Toast.makeText(MainActivity.this, "更新数据成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "更新数据失败返回Exception为:" + e, Toast.LENGTH_SHORT).show();
                }
            }

        });
    }

 点击修改👉

进入控制台,

查询 

    public void query(View v) {
        final BmobQuery<Person> bmobQuery = new BmobQuery<Person>();
        bmobQuery.getObject("eee8101a84", new QueryListener<Person>() {
            @Override
            public void done(Person object, BmobException e) {
                if (e == null) {
                    Toast.makeText(MainActivity.this, "查询数据成功,查询的数据内容为"+object.getName()+","+object.getAddress(), Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "查询数据失败,返回Exception为:" + e, Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

 点击查询👉

删除

    public void delete(View v) {
        Person p = new Person();
        p.setObjectId("eee8101a84");
        p.delete(new UpdateListener() {

            @Override
            public void done(BmobException e) {
                if (e == null) {
                    Toast.makeText(MainActivity.this, "删除数据成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "删除数据失败,返回Exception为:" + e, Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

点击删除👉

刷新控制台