此示例应用演示了如何快速的使用Cloud DB构建简单的图书管理服务。通过快速入门和示例应用,您将会了解到如下信息:
实时侦听数据的更改。
使用Cloud DB构建应用服务,需要完成以下准备工作:
使用Cloud DB服务前,您需要先启用服务。
您需要基于AppGallery Connect控制台创建对象类型,请您遵循操作步骤创建示例中涉及的对象类型,并导出Objective-C格式的对象类型文件。不允许修改导出的Objective-C格式文件,否则会导致数据同步功能异常。
字段名称 |
类型 |
主键 |
非空 |
加密 |
默认值 |
---|---|---|---|---|---|
id |
Integer |
√ |
√ |
– |
– |
bookName |
String |
– |
– |
– |
– |
author |
String |
– |
– |
– |
– |
price |
Double |
– |
– |
– |
– |
publisher |
String |
– |
– |
– |
– |
publishTime |
Date |
– |
– |
– |
– |
shadowFlag |
Boolean |
– |
– |
– |
true |
角色 |
query |
upsert |
delete |
---|---|---|---|
所有人 |
√ |
– |
– |
认证用户 |
√ |
√ |
√ |
数据创建者 |
√ |
√ |
√ |
管理员 |
√ |
√ |
√ |
创建完成后返回对象类型列表中,可以查看已创建的对象类型。
文件将会导出至本地,其内包含该版本中所有的对象类型。导出的Objective-C格式文件在后续步骤用于添加至本地开发环境。
可基于AppGallery Connect控制台在云侧创建数据存储区,请您遵循操作步骤创建一个存储区名称为“CloudDBDemo”的存储区。
创建完成后返回存储区列表中,可以查看已创建的存储区。
使用CocoaPods集成SDK。
pod 'AGConnectDatabase', '~>1.0.4.300'
pod install
注意:
在开发应用时,可直接将AppGallery Connect控制台上导出的Objective-C格式文件添加至本地开发环境,并通过AGConnectCloudDB类中的createObjectType方法实现对象类型的定义和创建。在进行本地应用开发时,无需再次创建对象类型。
在配置完开发环境后,就可以使用云数据库进行应用开发。开发应用时,需要先执行初始化操作,初始化AGConnectCloudDB、创建Cloud DB zone和对象类型。
NSError *error = nil;
[AGConnectCloudDB initEnvironment:&error];
self.agcConnectCloudDB = [AGConnectCloudDB shareInstance];
NSError *createError= nil;
[self.agcConnectCloudDB createObjectType:[AGCCloudDBObjectTypeInfoHelper obtainObjectTypeInfo] error:&createError];
AGCCloudDBZoneConfig *zoneConfig = [[AGCCloudDBZoneConfig alloc] initWithZoneName:zoneName
syncMode:AGCCloudDBZoneSyncModeCloudCache
accessMode:AGCCloudDBZoneAccessModePublic];
__weak typeof(self) weakSelf = self;
[self.agcConnectCloudDB openCloudDBZone2:zoneConfig allowCreate:YES callback:^(AGCCloudDBZone * _Nullable zone, NSError * _Nullable error) {
weakSelf.dbZone = zone;
}];
在本节主要介绍如何在应用程序中进行数据写入操作,以便您了解如何使用Cloud DB SDK实现数据的写入。在应用界面中,增加了“添加”按钮,用于用户新增数据,并在代码中通过executeUpsert实现数据的写入。
- (void)executeUpsertWithBooks:(NSArray *__nonnull)books complete:(void(^)(BOOL success, NSError *error))complete {
if (books.count == 0) {
return;
}
[self.dbZone executeUpsert:books onCompleted:^(NSInteger count, NSError * _Nullable error) {
if (error) {
if (complete) {
complete(NO, error);
}
} else {
if (complete) {
complete(YES, nil);
}
}
}];
}
用户在应用界面中新增的数据,将会被存储在云侧。在端侧注册数据变化侦听器,当云侧数据发生变化时,端侧能够感知数据变化,及时刷新本地应用数据。通过查询条件与subscribeSnapshotWithQuery方法组合使用,可以指定侦听对象,当侦听对象的数据发生变化时,端侧会收到通知,根据快照获取变化的数据信息,从云侧同步数据至端侧应用。
- (void)subscribeSnapshotComplete:(void(^)(NSArray *bookList, NSError *error))complete {
AGCCloudDBQuery *query = [AGCCloudDBQuery where:[BookInfo class]];
[query equalTo:@YES forField:@"showFlag"];
[self.dbZone subscribeSnapshotWithQuery:query policy:AGCCloudDBQueryPolicyCloud listener:^(AGCCloudDBSnapshot * _Nullable snapshot, NSError * _Nullable error) {
if (snapshot != nil) {
NSArray *bookList = snapshot.snapshotObjects;
if (complete) {
complete(bookList, nil);
}
} else {
if (complete) {
complete(nil, error);
}
}
}];
}
数据查询和排序
在应用界面中,增加了“查询”按钮和排序功能,通过executeQuery实现异步方式查询数据。
- (void)queryAllBooksWithResults:(void(^)(NSArray * bookList, NSError *error))results {
AGCCloudDBQuery *query = [AGCCloudDBQuery where:[BookInfo class]];
[self.dbZone executeQuery:query policy:AGCCloudDBQueryPolicyCloud onCompleted:^(AGCCloudDBSnapshot *_Nullable snapshot, NSError *_Nullable error) {
if (error) {
if (results) {
results(nil, error);
}
} else {
NSArray *bookList = snapshot.snapshotObjects;
if (results) {
results(bookList, nil);
}
}
}];
}
通过查询与limit方法组合,实现限制查询数据显示条数的功能;与orderByAsc方法或者orderByDesc方法组合来实现数据的排序功能。
- (void)fuzzyQueryAGCDataWithBookInfo:(nonnull BMQueryBookDataModel *)bookInfo results:(void(^)(NSArray * bookList, NSError *error))results {
AGCCloudDBQuery *query = [AGCCloudDBQuery where:[BookInfo class]];
//contains
[query contains:bookInfo.bookName forField:@"bookName"];
//greaterThanOrEqualTo
[query greaterThanOrEqualTo:bookInfo.minBookPrice forField:@"price"];
//lessThanOrEqualTo
[query lessThanOrEqualTo:bookInfo.maxBookPrice forField:@"price"];
//limit
[query limit:(int)bookInfo.count];
//orderByAsc
[query orderByAsc:@"bookName"];
[self.dbZone executeQuery:query policy:AGCCloudDBQueryPolicyCloud onCompleted:^(AGCCloudDBSnapshot *_Nullable snapshot, NSError *_Nullable error) {
if (error) {
if (results) {
results(nil, error);
}
} else {
NSArray *bookList = snapshot.snapshotObjects;
if (results) {
results(bookList, nil);
}
}
}];
}
到此,您已经了解了示例应用的开发流程。您可以编译并在iPhone手机或模拟器上运行示例应用。如需体验示例应用,您可以在A手机或A模拟器上打开应用,并新增数据;然后您可以在B手机或B模拟器上打开应用,查看在A手机或A模拟器上写入的数据。