0


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

概述

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

  • 如何使用Cloud DB进行应用开发。
  • 应用数据如何写入到Cloud DB。
  • 如何实现数据的查询。
  • 实时侦听数据的更改。
  • 体验端云数据同步等功能。

开发准备

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

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

启用服务

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

  1. 登录AppGallery Connect网站,选择“我的项目”。
  2. 在项目列表页面中选择项目,单击项目下需要启用云数据库服务的应用。
  3. 在导航树上选择“构建 > 云数据库”。
  4. 单击“立即开通”,开通云数据库服务。
  5. (可选)如您还未选择数据处理位置,需要您先设置数据处理位置,具体操作请参见设置数据处理位置。
  6. 服务初始化成功后,即启用云数据库服务成功。

新增和导出对象类型

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

  1. 登录AppGallery Connect网站,选择“我的项目”。
  2. 在项目列表页面中选择项目,单击项目下需要创建对象类型的应用。
  3. 在导航树上选择“构建 > 云数据库”。
  4. 单击“新增”,进入创建对象类型页面。
  5. 输入对象类型名为“BookInfo”后,单击“下一步”。
  6. 单击 +新增字段,新增如下字段后,单击“下一步”。 **表1 **字段定义表 字段名称类型主键非空加密默认值idInteger√√––bookNameString––––authorString––––priceDouble––––publisherString––––publishTimeDate––––shadowFlagBoolean–––true
  7. 单击 +新增索引 ,设置索引名为“bookName”,索引字段为“bookName”后,单击“下一步”。
  8. 按照如下要求设置各角色权限后,单击“下一步”。 **表2 **权限配置表 角色queryupsertdelete所有人√––认证用户√√√数据创建者√√√管理员√√√
  9. 单击“确定”。 创建完成后返回对象类型列表中,可以查看已创建的对象类型。
  10. 单击“导出”。
  11. 选择导出文件格式,选择“Objective-C格式”。
  12. 单击“导出”。 文件将会导出至本地,其内包含该版本中所有的对象类型。导出的Objective-C格式文件在后续步骤用于添加至本地开发环境。

新增存储区

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

  1. 登录AppGallery Connect网站,选择“我的项目”。
  2. 在项目列表页面中选择项目,单击项目下需要创建存储区的应用。
  3. 在导航树上选择“构建 > 云数据库”。
  4. 选择“存储区”页签。
  5. 单击“新增”,进入创建存储区页面。
  6. 输入存储区名称为“CloudDBDemo”。
  7. 单击“确定”。 创建完成后返回存储区列表中,可以查看已创建的存储区。

配置开发环境

使用CocoaPods集成SDK。

  1. 集成AGC SDK,详细请参见集成AGC SDK。
  2. 在podfile文件中添加Cloud DB SDK依赖。 pod 'AGConnectDatabase', '~>1.0.4.300'
  3. 执行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方法实现对象类型的定义和创建。在进行本地应用开发时,无需再次创建对象类型。

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

初始化

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

  1. 通过initEnvironment方法初始化AGConnectCloudDB。 NSError *error = nil;[AGConnectCloudDB initEnvironment:&error];
  2. 通过shareInstance方法获取AGConnectCloudDB实例,并使用createObjectType方法创建对象类型。 self.agcConnectCloudDB = [AGConnectCloudDB shareInstance];NSError *createError= nil;[self.agcConnectCloudDB createObjectType:[AGCCloudDBObjectTypeInfoHelper obtainObjectTypeInfo] error:&createError];
  3. 创建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 <BookInfo *> *__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模拟器上写入的数据。

标签: 数据库 database iOS

本文转载自: https://blog.csdn.net/GaussDB/article/details/123071584
版权归原作者 Gauss松鼠会 所有, 如有侵权,请联系我们删除。

“使用Cloud DB构建APP 快速入门 - iOS篇”的评论:

还没有评论