使用Cloud DB构建APP 快速入门 - iOS篇

使用Cloud DB构建APP 快速入门 - iOS篇,第1张

概述

此示例应用演示了如何快速的使用Cloud DB构建简单的图书管理服务。通过快速入门和示例应用,您将会了解到如下信息:

如何使用Cloud DB进行应用开发。应用数据如何写入到Cloud DB。如何实现数据的查询。

实时侦听数据的更改。

体验端云数据同步等功能。 开发准备

使用Cloud DB构建应用服务,需要完成以下准备工作:

您已经在开发者联盟官网注册帐号并通过实名认证,详细请参见帐号注册认证。您已经在AppGallery Connect控制台上创建项目和应用,详细请参见创建项目。示例应用使用了认证用户的相关权限,需要开通AppGallery Connect认证服务中“匿名帐号”服务,详细请参见认证服务。您已经获取到示例代码,请从示例代码获取。您已在本地安装Xcode。

启用服务

使用Cloud DB服务前,您需要先启用服务。

登录AppGallery Connect网站,选择“我的项目”。在项目列表页面中选择项目,单击项目下需要启用云数据库服务的应用。在导航树上选择“构建 > 云数据库”。单击“立即开通”,开通云数据库服务。

(可选)如您还未选择数据处理位置,需要您先设置数据处理位置,具体 *** 作请参见设置数据处理位置。

服务初始化成功后,即启用云数据库服务成功。 新增和导出对象类型

您需要基于AppGallery Connect控制台创建对象类型,请您遵循 *** 作步骤创建示例中涉及的对象类型,并导出Objective-C格式的对象类型文件。不允许修改导出的Objective-C格式文件,否则会导致数据同步功能异常。

登录AppGallery Connect网站,选择“我的项目”。在项目列表页面中选择项目,单击项目下需要创建对象类型的应用。在导航树上选择“构建 > 云数据库”。单击“新增”,进入创建对象类型页面。

输入对象类型名为“BookInfo”后,单击“下一步”。单击 +新增字段,新增如下字段后,单击“下一步”。

表1 字段定义表

字段名称

类型

主键

非空

加密

默认值

id

Integer

bookName

String

author

String

price

Double

publisher

String

publishTime

Date

shadowFlag

Boolean

true

单击 +新增索引 ,设置索引名为“bookName”,索引字段为“bookName”后,单击“下一步”。按照如下要求设置各角色权限后,单击“下一步”。

表2 权限配置表

角色

query

upsert

delete

所有人

认证用户

数据创建者

管理员

单击“确定”。

创建完成后返回对象类型列表中,可以查看已创建的对象类型。

单击“导出”。

选择导出文件格式,选择“Objective-C格式”。单击“导出”。

文件将会导出至本地,其内包含该版本中所有的对象类型。导出的Objective-C格式文件在后续步骤用于添加至本地开发环境。

新增存储区

可基于AppGallery Connect控制台在云侧创建数据存储区,请您遵循 *** 作步骤创建一个存储区名称为“CloudDBDemo”的存储区。

登录AppGallery Connect网站,选择“我的项目”。在项目列表页面中选择项目,单击项目下需要创建存储区的应用。在导航树上选择“构建 > 云数据库”。选择“存储区”页签。单击“新增”,进入创建存储区页面。

输入存储区名称为“CloudDBDemo”。单击“确定”。

创建完成后返回存储区列表中,可以查看已创建的存储区。

配置开发环境

使用CocoaPods集成SDK。

集成AGC SDK,详细请参见集成AGC SDK。在podfile文件中添加Cloud DB SDK依赖。
pod 'AGConnectDatabase', '~>1.0.4.300'
执行pod install,然后打开.xcworkspace文件查看该项目。
pod install

注意:

使用SQLCipher默认生成的文件权限为0644,建议将文件权限修改为0640,保证文件在使用过程中的安全性。每次pod install后,在pod工程中的“TARGETS > SQLCipher > Build Settings > Other C Flags”文件中添加“-DSQLITE_DEFAULT_FILE_PERMISSIONS=0640”。Cloud DB iOS SDK依赖SQLCipher,而SQLCipher是基于SQLite开发的开源组件,由于iOS SDK并没有直接集成SQLCipher源码,所有我们无法提供已修复漏洞的SQLCipher版本。但是,我们会持续关注SQLite上的漏洞信息,当发现新的漏洞时,我们会及时分析和验证,确认漏洞可以修复时,会更新至漏洞补丁表中,您可以根据应用需要选择是否修复该漏洞,详细请参见SQLite漏洞修复。 添加对象类型文件

在开发应用时,可直接将AppGallery Connect控制台上导出的Objective-C格式文件添加至本地开发环境,并通过AGConnectCloudDB类中的createObjectType方法实现对象类型的定义和创建。在进行本地应用开发时,无需再次创建对象类型。

将已在AppGallery Connect控制台上导出的全部Objective-C格式文件添加至本地开发环境。初始化Cloud DB,通过AGConnectCloudDB类中的createObjectType方法实现对象类型的定义和创建,详细请参见初始化。 初始化

在配置完开发环境后,就可以使用云数据库进行应用开发。开发应用时,需要先执行初始化 *** 作,初始化AGConnectCloudDB、创建Cloud DB zone和对象类型。

通过initEnvironment方法初始化AGConnectCloudDB。
NSError *error = nil;
[AGConnectCloudDB initEnvironment:&error];
通过shareInstance方法获取AGConnectCloudDB实例,并使用createObjectType方法创建对象类型。
self.agcConnectCloudDB = [AGConnectCloudDB shareInstance];
NSError *createError= nil;
[self.agcConnectCloudDB createObjectType:[AGCCloudDBObjectTypeInfoHelper obtainObjectTypeInfo] error:&createError];

创建Cloud DB zone配置对象,并打开该Cloud DB zone(以Cloud DB zone的同步属性为缓存模式、访问属性为公共存储区为例),详细请参考AGCCloudDBZoneConfig。
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模拟器上写入的数据。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/993517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存