> 技术文档 > 在鸿蒙HarmonyOS 5中使用Appgallery connect实现一个书旗小说的小说搜索功能

在鸿蒙HarmonyOS 5中使用Appgallery connect实现一个书旗小说的小说搜索功能

在鸿蒙HarmonyOS 5中集成AppGallery Connect(AGC)实现类似“书旗小说”的小说搜索功能,需结合AGC的云数据库、云函数、搜索服务等能力,并利用HarmonyOS的ArkUI框架构建高性能交互界面。以下是详细实现方案:


​一、功能需求分析​

  1. ​核心功能​

    • 关键词搜索(按书名、作者、分类筛选)
    • 搜索结果分页加载
    • 热门搜索词推荐
    • 搜索历史记录(用户本地存储)
    • 小说详情页跳转(需关联云数据库)
  2. ​技术依赖​

    • ​前端​​:HarmonyOS ArkUI(声明式开发)
    • ​后端​​:
      • AGC云数据库(存储小说元数据:书名、作者、分类、简介等)
      • AGC云函数(处理复杂搜索逻辑,如模糊匹配)
      • AGC搜索服务(可选,若需高性能全文检索)
    • ​安全​​:AGC认证服务(用户登录后保存搜索历史)

​二、实现步骤​

​1. 环境准备​
  • ​DevEco Studio配置​​:

    • 创建HarmonyOS应用项目(TypeScript/ArkUI)。
    • app > build.gradle中集成AGC SDK:
      dependencies { implementation \'com.huawei.agconnect:agconnect-core-harmony:1.9.0\' // AGC核心库 implementation \'com.huawei.agconnect:agconnect-cloud-database-harmony:1.9.0\' // 云数据库}
  • ​AGC控制台配置​​:

    • 启用​​云数据库​​,创建novels集合(字段:bookId, title, author, category, summary)。
    • 启用​​云函数​​(如需复杂搜索逻辑,如权重排序)。

​2. 前端界面开发​
​(1) 搜索页布局(SearchPage.ets)​
import { Search, List, ListItem, Text, Column } from \'@ohos/arkui\';import router from \'@ohos.router\';@Entry@Componentstruct SearchPage { @State keyword: string = \'\'; // 搜索关键词 @State searchResults: Array = []; // 搜索结果 @State hotKeywords: string[] = [\'玄幻\', \'都市\', \'言情\']; // 热门关键词 // 执行搜索 async searchNovels() { try { const db = agconnect.cloudDB(); // 初始化云数据库 const query = db.createQuery() .whereEqualTo(\'title\', this.keyword) // 精确匹配书名 .limit(10); // 分页限制 this.searchResults = await db.executeQuery(query); } catch (err) { console.error(\'搜索失败:\', err); } } build() { Column() { // 搜索框 Search({ placeholder: \'输入书名或作者\' }) .onChange((value: string) => { this.keyword = value }) .onSubmit(() => { this.searchNovels() }) // 热门搜索 Text(\'热门搜索\').fontSize(16).margin({ top: 20 }) List() { ForEach(this.hotKeywords, (item: string) => { ListItem() { Text(item).onClick(() => {  this.keyword = item;  this.searchNovels(); }) } }) } // 搜索结果列表 List() { ForEach(this.searchResults, (item: any) => { ListItem() { Column() {  Text(item.title).fontSize(18)  Text(item.author).fontColor(\'#999\') }.onClick(() => {  router.pushUrl({ url: \'pages/DetailPage\', params: { bookId: item.bookId } }); }) } }) } } }}
​(2) 小说详情页(DetailPage.ets)​
@Componentstruct DetailPage { @State novel: any = {}; onPageShow(params: any) { // 从云数据库获取小说详情 agconnect.cloudDB() .createQuery() .whereEqualTo(\'bookId\', params.bookId) .executeQuery() .then(result => { this.novel = result[0] }); } build() { Column() { Text(this.novel.title).fontSize(24) Text(this.novel.author).fontColor(\'#666\') Text(this.novel.summary).margin({ top: 20 }) } }}

​3. 后端服务集成​
​(1) 云数据库设计​
  • ​集合名​​:novels
  • ​字段示例​​:
    { \"bookId\": \"001\", \"title\": \"斗破苍穹\", \"author\": \"天蚕土豆\", \"category\": \"玄幻\", \"summary\": \"这里是小说简介...\"}
​(2) 模糊搜索优化(云函数)​

若需支持模糊搜索(如“斗破”匹配“斗破苍穹”),需在AGC云函数中编写逻辑:

  1. 创建Node.js云函数searchNovels
    exports.handler = async (client, req) => { const db = client.cloudDB().db(); const { keyword } = req.body; const query = db.collection(\'novels\') .where(\'title\', \'like\', `%${keyword}%`) // 模糊匹配 .limit(10); return await query.get();};
  2. 前端调用云函数:
    agconnect.function.call({ name: \'searchNovels\', data: { keyword: this.keyword }}).then(res => { this.searchResults = res.data });
​(3) 搜索历史记录(本地存储)​

使用HarmonyOS的Preferences存储用户历史:

import preferences from \'@ohos.data.preferences\';let prefs = await preferences.getPreferences(context, \'searchHistory\');// 保存历史await prefs.put(\'history\', JSON.stringify([\'斗破苍穹\', \'遮天\']));// 读取历史let history = await prefs.get(\'history\', \'[]\');

​三、关键优化点​

  1. ​性能优化​

    • 分页加载:云数据库查询添加limit()offset()
    • 防抖处理:搜索框输入时延迟触发搜索(减少无效请求):
      private timer: number = 0;@Watch(\'keyword\')onKeywordChange() { clearTimeout(this.timer); this.timer = setTimeout(() => this.searchNovels(), 500); // 500ms防抖}
  2. ​安全规则​

    • 在AGC控制台配置云数据库权限:
      { \"rules\": { \"novels\": { \"read\": \"auth == null\" // 允许未登录用户读 } }}
  3. ​多端适配​

    • 使用@MediaQuery适配手机/平板布局差异:
      @Styles tabletStyle() { .media(\'screen and (min-width: 600px)\') { .width(\'50%\').margin({ left: \'25%\' }); }}

​四、测试与发布​

  1. ​测试场景​

    • 网络异常时显示友好提示(如“网络开小差了”)。
    • 搜索无结果时展示缺省页(如“暂无匹配小说”)。
  2. ​发布到AppGallery​

    • 在AGC控制台提交应用,填写元数据(如“小说阅读器”分类)。
    • 若涉及用户数据收集,需在隐私政策中声明搜索关键词的存储方式。

​五、扩展功能建议​

  • ​智能推荐​​:基于AGC分析服务,根据用户搜索历史推荐相似小说。
  • ​语音搜索​​:集成HarmonyOS的VoiceRecorder实现语音输入关键词。

通过以上步骤,可快速实现一个高性能、安全的小说搜索功能,充分利用HarmonyOS和AGC的生态能力。