首先,什么是AppGallery Connect云数据库服务?

先来看下官方介绍:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-clouddb-introduction

华为AppGallery Connect的云数据库(CloudDB)是一款端云协同的数据库产品,提供端云数据的协同管理、统一的数据模型和丰富的数据管理API接口等能力。在保证数据的可用性、可靠性、一致性,以及安全等特性基础上,能够实现数据在客户端和云端之间的无缝同步,并为应用提供离线支持,以帮助开发者快速构建端云、多端协同的应用。

 

是不是有点难懂?下面我用大白话翻译一下:

        云数据库(CloudDB)是为我们开发者服务的,他提供了一个端云协同的数据库服务,可以通过SDK和API接口,简单方便的集成到APP应用里面,使用安全可靠。集成的时候,开发者们不需要关注服务器的搭建和部署运维,直接通过SDK和API接口使用就行。

 

翻译以后,是不是就很好懂了哈哈。

其他原理、功能、安全啥的先不看,我们先来看下怎么在Android应用里,快速把CloudDB使用起来。经过我的试用,发现使用其实很方便,总结下来,就是下面的三步走:

1、界面操作:创建对象类型及存储区

2、应用前置步骤:导出对象类型并且执行用户认证。

3、Android项目集成CloudDB: 集成SDK,使用接口增删改查:

1、界面操作 :

写在最前:CloudDB还处于Beta阶段,需要先发邮件申请开通服务,可以参考这个链接:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-clouddb-apply

界面操作主要包括两方面,创建对象类型 以及创建存储区

1.1、对象类型是啥?

简单来说,对象类型就是你数据库里面,用来存放数据的表,每一个对象类型,就是一种表。打个简单的比方,你有一个excel文件用来存数据,每一个excel里都可以创建不同的工作表,每一个工作表,就相当于CloudDB里面的一个对象类型。比如我是一个老师,工作表1里面存放的是学生信息,包括学生的性别和学号;表2里存放的学生的成绩,包括学生的学号和各科成绩。

这样是不是就很好理解了。


1.2、存储区又是啥?

        这个可以从界面意思来理解了,就是用来存储数据的一片区域,不同的存储区是相互隔离的。继续上面的例子:我一个老师,可能会带多个班级,记录学生成绩的时候,不同的班用不同的excel文件。每个excel文件里都包括了学生信息表和成绩表。

        在上面你的例子里,每一个excel文件,就是一个存储区,两个excel互不相关。每个excel里都有不同的工作表,每个工作表就是一个对象类型。

1.3、创建对象类型

       讲完了概念,下面来讲一下操作:前提是你已经申请并且开通的CloudDB服务哈。

1、在 “我的项目” –>“构建” -> “云数据库”界面,在对象类型页签,点击新增创建一个对象类型。

63562d3b5e287e957418f12056d8d513.png

2、按照上面说的例子,我创建一个StudentInfo的表,注意需要设置主键,并且为认证用户勾选Upsert和delete权限。

befc71c4cee252c4355f1f2ca1e0dc67.png

9f6383f9c7a0cecc08de3ad28bfdeefc.png

f16af541c5a467195ae49bdfd5b07050.png

           

1.4、创建存储区

这个就简单很多了,直接在存储区页签,点击新增,数据存储区的名字,点确定就好了。

e7f54d547504060468932806e01ed8da.png

 

应用前置步骤

想要在Android应用里正确的使用CloudDB,还需要有两个前置的步骤,导出对象类型和用户认证。

1、 导出对象类型:

简单说,就是讲上一步创建的对象类型,导出到你本地的Android项目里,这样才能让Android项目和你云端的数据库进行同步:导出的操作如下:

5adbffb3e12f9ae424ebe6ac57e659af.png

导出以后。记得放到你的Android项目里面,哪我这个举例,我把导出的对象类型都放在model路径下

077390dc8348a4fe8a48761466edeed1.png

 

Android项目集成CloudDB

1、集成SDK

1、下载json:在你的“我的项目 –> 项目设置 -> 应用”下,下载json文件,并且放到你Android项目的的app路径下:

                048ead2ed1b3f4e344d70988c02782e5.png

2、  配置项目级build.gradle文件

buildscript {

    repositories {

        google()

        jcenter()

        maven {url 'https://developer.huawei.com/repo/'}

    }

    dependencies {

        classpath 'com.android.tools.build:gradle:4.0.1'

        classpath 'com.huawei.agconnect:agcp:1.4.2.301'

    }

}

 

allprojects {

    repositories {

        google()

        jcenter()

        maven {url 'https://developer.huawei.com/repo/'}

    }

}

 

task clean(type: Delete) {

    delete rootProject.buildDir

}


3、 配置应用级build.gradle文件

apply plugin: 'com.android.application'

apply plugin: 'com.huawei.agconnect'

 ...

android {

                ……

compileOptions {

                                sourceCompatibility = 1.8

                                targetCompatibility = 1.8

}

}

dependencies {

 ...

implementation 'com.huawei.agconnect:agconnect-auth:1.4.2.300'        // 华为Auth服务,用于用户认证

implementation 'com.huawei.agconnect:agconnect-database:1.2.3.301'               // CloudDB的SDK

}

1.1      前置操作

补充一个小插曲,CloudDB对操作权限有做限制,需要认证用户才能进行增删改操作,因此还需要集成华为认证服务,上一个步骤集成的Auth SDK就是这个作用的。

1、先去AGC界面开通认证服务,此处为了最简单的集成,我就只用匿名认证来给大家做示例:选择“我的项目 –> 构建 -> 认证服务”中,启动匿名认证。

b9544b160491e91e79229f70b8a91ca5.png

2、匿名认证相关代码:

AGConnectAuth.getInstance().signInAnonymously().addOnSuccessListener(new OnSuccessListener<SignInResult>() {
   
@Override
   
public void onSuccess(SignInResult signInResult) {
       
// onSuccess
       
AGConnectUser user = signInResult.getUser();
   
}
}).addOnFailureListener(
new OnFailureListener() {
   
@Override
    
public void onFailure(Exception e) {
       
// onFail
   
}
})
;

2、初始化

初始化包括有三部分:初始化AGConnectCloudDB、创建对象类型、以及创建并打开CloudDB Zone(也就是前面说的存储区)

1、先在onCreate最外层,定义需要使用的参数:

private AGConnectCloudDB mCloudDB;
private
CloudDBZoneConfig mConfig;
private
CloudDBZone mCloudDBZone;

2、初始化AGConnectCloudDB

AGConnectCloudDB.initialize(this);

3、获取AGConnectCloudDB实例并且创建对象类型

mCloudDB = AGConnectCloudDB.getInstance();
try
{
   
mCloudDB.createObjectType(ObjectTypeInfoHelper.getObjectTypeInfo());
} catch (AGConnectCloudDBException e) {
    Log.e(
"CloudDB", "createObjectType Failed " + e.getMessage());
}
 

4、创建并打开CloudDB Zone

Config = new CloudDBZoneConfig("classs1",
       
CloudDBZoneConfig.CloudDBZoneSyncProperty.CLOUDDBZONE_CLOUD_CACHE,
       
CloudDBZoneConfig.CloudDBZoneAccessProperty.CLOUDDBZONE_PUBLIC);
mConfig.setPersistenceEnabled(true);
try
{
    CloudDBZone = mCloudDB.openCloudDBZone(mConfig
, true);
} catch (AGConnectCloudDBException e) {
    Log.e(
"CloudDB", "openCloudDBZone failed: " + e.getMessage());
}

注意咯,这里也可以用异步的openCloudDBZone2方法法,具体操作这里就不介绍了。具体看如下文档哈。

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-clouddb-get-started#h1-1594008398022

 

3、数据库操作:

接下来既可以进行愉快的数据库操作啦。下面我拿查询举个例:

1、先在AGC界面上,插入两条数据用来测试:test1和test2:

b7e688bd3d06e91816458a5770d5f222.png

2、然后回到Android项目里,通过executeQuery查询全量数。

Task<CloudDBZoneSnapshot<StudentInfo>> queryTask = mCloudDBZone.executeQuery(
        CloudDBZoneQuery.where(StudentInfo.
class),
       
CloudDBZoneQuery.CloudDBZoneQueryPolicy.POLICY_QUERY_FROM_CLOUD_ONLY);
queryTask.addOnSuccessListener(new OnSuccessListener<CloudDBZoneSnapshot<StudentInfo>>() {
   
@Override
   
public void onSuccess(CloudDBZoneSnapshot<StudentInfo> snapshot) {
       
//
       
CloudDBZoneObjectList<StudentInfo> InfoCursor = snapshot.getSnapshotObjects();
       
ArrayList<StudentInfo> infoList = new ArrayList<>();
       
StudentInfo studentInfo = new StudentInfo();
        try
{
           
while (InfoCursor.hasNext()) {
                studentInfo = InfoCursor.next()
;
               
infoList.add(studentInfo);
           
}
            Log.i(
"CloudDB", "query success: " + JSONArray.toJSONString(studentInfo));
       
} catch (AGConnectCloudDBException e) {
            Log.e(
"CloudDB", "query failed: " + e.getMessage());
       
}
        snapshot.release()
;
   
}
})
;

3、然后就能在Logcat里面,查看看相应的查询数据:

fcba754e685a90c59ceb0d46da190cf3.png

4、后续的增删改操作,我就不再详细说明了,大家可以直接看文档或API参考

      配置指南:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-clouddb-insert-data

      API参考:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-References/clouddb

总结

虽然资料文档看起来很多,但实际操作起来,也就三步就能完成的。

1、云侧操作,创建对象类型和存储区:

2、导出对象类型到Android项目

3、在Android项目中集成SDK并且使用API接口。

三步下来,就完成了一个数据库系统的集成,没有任何数据库搭建和部署相关的操作,而且现在CloudDB还是免费使用的,简直不要太爽。

 

最后再附上官方CloudDB文档,需要的可以自行查看:

       配置指南:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-clouddb-insert-data

       API参考:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-References/clouddb

       Demo参考:https://github.com/AppGalleryConnect/agc-demos/tree/main/Android/acg-clouddb-demo-java


原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0202441049629310404?fid=0101271690375130218&pid=0302441049629310621

原作者:Mayism