鸿蒙端云一体化简单项目

文章目录

  • 前言
  • 端云一体化
  • 服务端
  • 客户端
  • 云数据库
  • 总结
一、前言

鸿蒙系统在不断地成熟,现在有了鸿蒙端云一体化开发模式。什么是端云一体化呢,简单点就是你原本是客户端开发的,项目中只是客户端的代码,端云一体化呢,就是服务器的项目,也是由客户端完成了,对,就是你写客户端同时也把服务端的活也给干了。

看到这里,你可能会觉得不可思议。为什么会有端云一体化呢,主要是对一些中小企业,为了成本,为了稳健性,使用华为云来处理后台的任务。一方面是稳健性,一方面是省成本。当然了,如果你要求的后台比较复杂,那么就需要单独的后台人员来开发。

这篇文章主要讲的就是把云函数,云数据库,还有客户端调用云服务这些整合起来。最后我会附上一个demo,可以看看具体是怎么玩的。

二、端云一体化

1、注册华为开发者账号。
到AppGallery Connect网站:
https://developer.huawei.com/consumer/cn/service/josp/agc/index.html,AppGalleryConnect
2、
在AppGallery Connect,创建项目,写一个项目名就行。
默认数据处理位置选择中国,其他都按默认的。
然后就创建完了,接着左边会有Serverless,这里头就有认证服务 云函数 云数据库等功能。把这几个主要的都给开通了。
在这里插入图片描述

3、
DevEco 创建项目:
记得选的是 Empty Ability withCloudDev 然后点击下一步:
在这里插入图片描述
接着需要你去登录:
在这里插入图片描述

登录完还会报错,你还没有进行关联。关联一下,你在AppGallery Connect 中创建的项目,填一些关联的基本信息就可以了。
(这一步主要是将app和云服务进行绑定。)
然后回到DevEco,就会发现绑定完成,然后点finish就可以了。
在这里插入图片描述
在这里插入图片描述

4、这个时候会看到两个项目,一个是Application 就是客户端的。
一个是CloudProgram 这个就是服务端的。

接下里我们就一个端,一个端写实现

三、服务端

1、我们可以在CloudProgram/cloudfunctions 创建一个云函数。 创建方法:右键cloudfunctions,New -> Cloud Fuction

比如我们创建login函数:

/**
 * 云函数入口
 * */

let myHandler = async function (event, context, callback, logger) {//event: 接收请求信息。 callback:返回服务器数据
  logger.info(event);

  // 实现那个随机数
  let random = Math.random().toFixed(4);

  callback({ //返回服务器的数据
    code: 0,
    desc: "Success." + random
  });
};

export { myHandler };

上面这个login 中,我们就可以写服务器的实现了,我们这里是实现随机数,然后将结果返回。

2、
写完之后,我们就可以发布到云服务上去:
右键 cloudfunctions -> Deploy Cloud Fuction 这个时候AppGallery Connect,云函数中,就会有我们刚才写的login了。

3、测试
这里我们可以通过编译工具,Tools -> CloudDev -> Cloud Fuctions Requestor
进行测试验证,请求结果。
在这里插入图片描述

这个时候服务端搞定了。

四、客户端

1、
首先在entry/src/module.json5 要保证有网络权限。

"requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      },
]

2、查看entry/oh-package.json5 里面的依赖。如果没同步,要点sync now,进行同步下。

3、我们在index.ets 添加按钮

 Button("获取服务器数据").onClick(()=>{
        console.log("点击了")
        this.getLoginResult();
      })
getLoginResult = () => {
  login(getContext(this)).then((data) => {
    let message: Message =  JSON.parse(data) as Message  //这里是数据格式的转换,转成对象。
    console.log('获取的数据:', message.desc);
  }).catch((err) => {
    console.error('error: ', err && err.message);
  });
}     

在Function.ts 中增加个login 方法,用来请求云函数:

export function login(context): Promise<string> {
    return new Promise((resolve, reject) => {
        getAGConnect(context);
        console.log("开始请求")
        let functionCallable = agconnect.function().wrap("login-$latest");
        functionCallable.call().then((ret: any) => {
            Log.info(TAG, "Cloud Function Called, 返回来的值: " + JSON.stringify(ret.getValue()));
            resolve(JSON.stringify(ret.getValue())); //这里会进行回调
        }).catch((error: any) => {
            Log.error(TAG, "Error - could not obtain cloud function result. Error Detail: " + JSON.stringify(error));
            reject(error);
        });
    });
}

通过上面,我们就能在客户端,调用云函数了,也就是调用接口。正常打印日志,能够接收到服务器返回的随机数,说明能正常访问服务器了。

到此。我们已经能够通过客户端请求服务端的云函数了。到这里,如果觉得消化不了,可以先去实践,根据上面的跑一下,因为后面这部分是锦上添花的事,就是操作云数据库。

五、云数据库

1、创建一个json文案,实际上就是数据库表要用到的字段,给类型,给id等:
右键 CloudProgram/clouddb/objecttype 创建json 文件。(New -> Cloud DB Object Type)
创建完,改自己想要定义的字段名就行了

{
     "belongPrimaryKey": true,
     "fieldName": "bookName",
     "fieldType": "String",
     "isNeedEncrypt": false,
     "notNull": true
   }

2、创建数据条数:
右键 CloudProgram/clouddb/dataentry (New -> Cloud DB Data Entry)
创建文件 dataentry1.json:
文件会默认生成,你根据自己的需要做个修改就行,下面代表加了两条数据

{
  "cloudDBZoneName": "cloudDBZone1",
  "objectTypeName": "objectType1",
  "objects": [
    {
      "bookName": "My Favorite Book",
      "author": "ssz",
      "id": 10,
      "publishTime": 1706169847036,
      "field5": 10.5,
      "field6": 10
    },
    {
      "bookName": "string2",
      "author": "string2",
      "id": 20,
      "publishTime": 1706169847036,
      "field5": 20.5,
      "field6": 20
    }
  ]
}

3、部署数据库
右键 cloubdb,选择 Deploy Cloud DB
右下角,弹出Deploy successfully,表示部署成功。

这个时候打开AppGallery Connect 刷新下,就可以看到云数据库里,有了两条数据。

六、操作云数据库

既然数据库部署完了,那么接下来就能通过客户端来操作云数据库了。

1、
在AppGallery Connect 找到自己的项目,左边栏找到 -> 项目设置 -> 常规,下载 agconnect-services.json,将文件下载。
放到 entry/src/main/ets 目录下

另外还要下载:在AppGallery Connect 找到自己的项目,左边栏找到-> Serverless -> 云数据库 -> 对象类型 -> 点击导出json(新增按钮旁边的三个点)-> 重命名为schema
同样放到 entry/src/main/ets 目录下

还有:在 entry/src/main/ets 创建个models文件
然后在AppGallery Connect 找到自己的项目,左边栏找到-> Serverless -> 云数据库 -> 对象类型 ->勾选自己写的objectType1-> 导出js格式
解压后,将文件命名为objectType1.js 放到 models 中。

上面这几个文件,主要是下面要用到,要提前准备好。

2、
在oh-package.json5
添加依赖:

    "@hw-agconnect/hmcore": "^1.0.1",
    "@hw-agconnect/cloud": "^1.0.1",
    //记得点右上角,同步下。

3、
在EntryAbility.ts
导入:

import {initialize} from '@hw-agconnect/hmcore'
import json from '../agconnect-services.json';

在oncreate 中进行初始化:

oncreate(){
     initialize(this.context, json)
}   

4、
在Index.ets中导入database组件:

import cloud from '@hw-agconnect/cloud';   
import schema from '../schema.json';
import {objectType1} from '../models/objectType1';

下面就是增删改查的操作了。

   Button("查询数据库").onClick(async ()=>{
        console.log("查询数据")
        const resultArray = await cloud.database({objectTypeInfo: schema, zoneName: "cloudDBZone1"}).collection(objectType1).query().get();
        console.log("更新成功:" +  JSON.stringify(resultArray))
      })

      Button("增加一条数据").onClick(async ()=>{
        console.log("连接数据库")
        try {
          let object = new objectType1();
          object.bookName = 'ssz新增书'
          object.author = 'ssz'
          const record = await cloud.database({objectTypeInfo: schema, zoneName: "cloudDBZone1"}).collection(objectType1).upsert(object);
          console.log("增加成功:" + record)
        }catch (err){
          console.log("增加失败")
        }
      })

      Button("删除数据").onClick(async ()=>{
        console.log("连接数据库")
        try {
          let object = new objectType1();
          object.bookName = 'ssz新增书'
          const record = await cloud.database({objectTypeInfo: schema, zoneName: "cloudDBZone1"}).collection(objectType1).delete(object);
          console.log("删除成功:" + record)
        }catch (err){
          console.log("删除失败")
        }
      })

当我们要运行的时候,会碰到一个坑,就是关于so的报错。
这块只要在entry/build-profile.json5 的文件中,增加以下代码即可:

...
"buildOption": {
    //配置筛选har依赖.so资源文件的过滤规则
    "napiLibFilterOption": {
      //按照.so文件的优先级顺序,打包最高优先级的.so文件
      "pickFirsts": [
        "**/1.so"
      ],
      //按照.so文件的优先级顺序,打包最低优先级的.so 文件
      "pickLasts": [
        "**/2.so"
      ],
      //排除的.so文件
      "excludes": [
        "**/3.so"
      ],
      //允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件
      "enableOverride": true
    }
  },
  ...
   "targets":

上面的操作一定要注意,先进行query,也就是查询的操作,因为查询不需要管理员权限。其他的操作,可能要相应的权限才能操作。这块一定的注意,特别是刚玩的时候,一直没成功会摸不着头脑的。其实最主要就是objectType1.json 也就是部署云数据库的时候,创建的这个objectType1,要进行一些权限的修改才能正常。

我这个demo中已经都改成所有用户都能增删改查了。

好了,整个项目,就是这个样子,主要还是一些配置还有就是前后端的结合,及一些注意事项。

最后呢,端云一体化相关的东西,比如配置什么的,一不小心就踩坑了,写这篇博客真的是比较费心的,总算写出来了,只是作为参考,随着api的变动,可能后面还会有不同。可以根据最新文档来实现。

以上代码地址:https://github.com/shenshizhong/AppCloudDemo

总结

1、简单介绍端云一体化
2、实现服务端,然后再实现客户端,通过客户端调用云函数
3、部署云数据库,然后通过客户端调用云数据库,实现增删改查。

如果对你有一点点帮助,那是值得高兴的事情。:)
我的csdn:http://blog.csdn.net/shenshizhong
我的简书:http://www.jianshu.com/u/345daf0211ad

  • 33
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Dart三端一体化开发是指使用Dart编程语言进行跨平台开发,可以同时为Web、移动端和桌面端开发应用程序。 首先,Dart是一种高性能、可嵌入式的编程语言,可以用于开发Web应用、移动应用和桌面应用。Dart具有良好的可读性和可维护性,通过使用Dart语言进行三端开发,可以减少开发成本和时间。 其次,Dart有丰富的工具和框架支持。最常用的框架是Flutter,它是一个用于开发跨平台移动应用和桌面应用的UI框架。Flutter的热重载功能使得开发过程更加高效,开发者可以即时看到界面的变化。此外,Flutter还提供了丰富的组件和界面风格,使得开发出的应用具有良好的用户体验。 最后,Dart三端一体化开发具有良好的兼容性。Dart编译器将Dart代码编译为JavaScript代码,使得Dart应用可以在各种Web浏览器上运行。同时,通过Flutter的跨平台特性,开发者只需编写一套代码,即可在Android、iOS和桌面操作系统上运行应用程序。 总之,Dart三端一体化开发通过使用Dart语言和相关工具,可以实现在Web、移动端和桌面端的跨平台开发,大大提高了开发效率和代码的可复用性,是一种非常便捷和高效的开发方式。 ### 回答2: Dart三端一体化开发是指使用Dart语言进行跨平台应用程序开发的一种方法。它可以同时在Android、iOS和Web平台上运行,极大地提高了开发者的效率和代码的复用性。 Dart是一种由Google开发的面向对象的编程语言,它具有简洁灵活、易于学习和理解的特点。可以使用Dart编写应用程序的核心逻辑,并且可以通过Dart框架来实现UI界面的构建和管理。根据Dart的特性,我们可以将应用程序的逻辑和界面组件进行有效的分离和封装,从而实现三端一体化的开发。 使用Dart三端一体化开发可以大大减少重复代码的编写量。开发者只需要编写一套逻辑代码,然后根据不同平台的要求,编写相应的界面代码。通过使用Dart的跨平台框架,这些界面代码可以在不同平台上进行复用,从而减少了重复开发的工作量。 此外,Dart三端一体化开发还能够降低项目的维护成本。由于采用了统一的开发语言和框架,开发者可以更加方便地进行项目的维护和升级。当应用程序需要更新时,只需要针对逻辑代码进行修改,而不需要改动各个平台上的界面代码,从而极大地加快了项目的开发周期。 总之,Dart三端一体化开发是一种高效、灵活和可维护的开发方法。它能够充分利用Dart语言的特点,实现跨平台应用的开发与维护,提高开发者的生产效率和代码的复用性。未来,Dart三端一体化开发有望成为移动应用开发的主流趋势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值