首先,什么是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
