首先,什么是AppGallery Connect雲數據庫服務?
華為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、在 “我的項目” –>“構建” -> “雲數據庫”界面,在對象類型頁簽,點擊新增創建一個對象類型。
2、按照上面說的例子,我創建一個StudentInfo的表,注意需要設置主鍵,並且為認證用戶勾選Upsert和delete權限。
1.4、創建存儲區
這個就簡單很多了,直接在存儲區頁簽,點擊新增,數據存儲區的名字,點確定就好了。
應用前置步驟
想要在Android應用里正確的使用CloudDB,還需要有兩個前置的步驟,導出對象類型和用戶認證。
1、 導出對象類型:
簡單說,就是講上一步創建的對象類型,導出到你本地的Android項目里,這樣才能讓Android項目和你雲端的數據庫進行同步:導出的操作如下:
導出以后。記得放到你的Android項目里面,哪我這個舉例,我把導出的對象類型都放在model路徑下
在Android項目集成CloudDB
1、集成SDK
1、下載json:在你的“我的項目 –> 項目設置 -> 應用”下,下載json文件,並且放到你Android項目的的app路徑下:
2、 配置項目級build.gradle文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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界面開通認證服務,此處為了最簡單的集成,我就只用匿名認證來給大家做示例:選擇“我的項目 –> 構建 -> 認證服務”中,啟動匿名認證。
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方法法,具體操作這里就不介紹了。具體看如下文檔哈。
3、數據庫操作:
接下來既可以進行愉快的數據庫操作啦。下面我拿查詢舉個例:
1、先在AGC界面上,插入兩條數據用來測試:test1和test2:
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里面,查看看相應的查詢數據:
4、后續的增刪改操作,我就不再詳細說明了,大家可以直接看文檔或API參考
API參考:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-References/clouddb
總結
雖然資料文檔看起來很多,但實際操作起來,也就三步就能完成的。
1、雲側操作,創建對象類型和存儲區:
2、導出對象類型到Android項目
3、在Android項目中集成SDK並且使用API接口。
三步下來,就完成了一個數據庫系統的集成,沒有任何數據庫搭建和部署相關的操作,而且現在CloudDB還是免費使用的,簡直不要太爽。
最后再附上官方CloudDB文檔,需要的可以自行查看:
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
原作者:Mayism