实践分享:30分钟在电脑端运行小程序

news2025/7/18 8:34:52

预计实现效果:在电脑桌面端实现小程序运行

技术实现:小程序容器技术实现(案例使用FinClip SDK)

技术的原理:

 该 SDK 主要包括应用交互层、安全防护、网络通信控制和安全运行容器四个组件。

  1. 应用交互层:应用交互层是为了实现业务应用打开,完成和监管部门指定机构运营平台的数据交互、感知上报。
  2. 安全防护:安全防护组件提供安全保护,检测运行时环境是否安全,如检测到被动态调试则退出业务,防止数据或业务逻辑被恶意破解。
  3. 网络通信控制:网络通信控制组件控制小程序的网络访问,该组件支持黑白名单等功能,可对非白名单访问请求进行阻断。
  4. 安全运行容器:安全容器组件提供小程序的运行环境,该组件采用原生 Web 渲染内核进行渲染,以确保该模块的业务处理逻辑和宿主完全隔离。

具体操作:

整个桌面端 SDK 的结构如下:

Finclip.zip
│   FinclipWrapper.(dll | so | dylib) # 动态链接库
│   finclip_api.h                     # 公共接口头文件
│   finclip_const.h                  
└───finclip/                          # 主程序

引入 SDK

target_include_directories(TARGET PRIVATE ${FinClip_DIR})
  target_link_libraries(TARGET PRIVATE FinClipSDKWrapper)

配置 SDK

在配置 SDK 前还需要在 FinClip 的后台上架小程序,我上架了官方的示例小程序代码包,也尝试了直接把微信小程序的代码包上传到 IDE 中的,发现也能兼容。

在后台获取对应的 SDK KEY 与 SDK SECRET。

auto *factory = finclip_get_packer_factory();
auto *packer = finclip_packer_factory_get_config_packer(factory);
finclip_initialize(packer);
FinclipParams *config = finclip_create_params();
finclip_params_set(config, FINCLIP_CONFIG_APPSTORE, app_store);
finclip_params_set(config, FINCLIP_CONFIG_APPKEY, appkey.c_str());
finclip_params_set(config, FINCLIP_CONFIG_SECRET, secret.c_str());
finclip_params_set(config, FINCLIP_CONFIG_DOMAIN, domain.c_str());
finclip_params_set(config, FINCLIP_CONFIG_EXE_PATH, exe_path.c_str());

其实就这两步就已经完成了SDK的集成工作,还是非常简单方便的。接下来对其使用示例进行完善。

启动小程序

finclip_start_applet(app_store, appid.c_str());

嵌入小程序

finclip_start_applet_embed(app_store, appid.c_str(), hwnd);

注册自定义API

// 定义自定义API
void WebApiExample(const char *event, const char *param, void *input,
                   void *res) {
  auto *self = static_cast<MainWindow *>(input);
  finclip_params_set(res, "hello", "web api");
}
void AppApiExample(const char *event, const char *param, void *input,
                   void *res) {
  auto *self = static_cast<MainWindow *>(input);
  finclip_params_set(res, "hello", "app api");
}

// 注册自定义API
  fin_register_api(packer, kWebView, "test", WebApiExample, this);
  fin_register_api(packer, kApplet, "test", AppApiExample, this);

大功基本告成,整体感受还是比较简单的,并无过多复杂的操作,看得出官方还是做了很好的优化。不过需要注意的点:

FinClip 的 桌面端 SDK 基于qt 5.15 和 Chromium Embedded Framework 开发,现在支持了以下 Windows 和macOS 系统

Windows:

  • Windows 10
  • Windows 8.1
  • Windows 7

Macos:

  • Macos 10.13

看看效果

运行小程序的整体效果其实和微信打开小程序的效果是差不多的,这个还是比较满意。以下是我桌面端实际运行小程序的结果。

 

如果做一定适配优化,小程序的展示尺寸还可以适配打开窗口大小,效果也不错。

个人认为一些企业做OA模块化开发还挺适合在桌面端用小程序的,毕竟小程序能够实现动态化的更新,不必硬要通过迭代更新实现。

好了以上就是我瞎折腾的全过程,欢迎各位大佬拍砖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DBSCAN算法实现【超详细注释】

DBSCAN 算法步骤 设置每个对象为未访问 随机选择一个未访问的点ppp,标记ppp表示访问 如果p的半径为nnn的邻域中至少存在MinPts个对象 我们就创建一个新的簇&#xff0c;并将ppp加入ccc设N 是ppp邻域中对象的集合对在NNN中的每个点p′pp′ 如果p′pp′是未访问的 标记p′pp′…

Matlab:数值积分与符号计算

Matlab数值积分定积分的数值求解实现自适应积分算法梯形积分法累计梯形积分多重定积分的数值求解实现符号计算符号对象及其运算符号微积分符号极限符号导数求不定积分符号方程求解数值积分 数值积分&#xff0c;用于求定积分的近似值。在数值分析中&#xff0c;数值积分是计算定…

SQL Server简介

SQL Server是微软的一款关系型数据库。某些平台吹得天花烂坠&#xff0c;今天第一次在自己的项目中使用了下&#xff0c;感觉不是那么好&#xff0c;特别是SQL语句的支持度还是很欠缺&#xff0c;如limit等都不支持&#xff0c;还有特别单双引号都是需要特别注意的,下面是SQL S…

从0到1CTFer成长之路——1git(全网最详细)

1.1.2.1 git 泄露 (1) 常规git泄露 安装docker sudo apt-get update sudo apt-get install docker 安装容器 docker pull ubuntu:18.04 然后发现请求超时 我们需要阿里云的镜像加速器 我们按照要求配置文件 没有/etc/docker 就自己创建 sudo mkdir -p /etc/docker 然后写入…

Cookie与Session 以及给CBV添加装饰器

文章目录Cookie与Session1、Django操作cookie简单实现用户登录加入装饰器2、Django操作session设置session获取session过期时间清除sessionCBV添加装饰器Cookie与Session HTTP被设计为”⽆态”&#xff0c;也就是俗称“脸盲”。 这⼀次请求和下⼀次请求 之间没有任何状态保持&…

跨模态神经搜索实践VCED 环境准备

跨模态神经搜索实践 环境准备 本文基于WSL2及docker进行环境搭建 1. 安装和配置WSL2 Ubuntu发行版 1.1 安装WSL2 Ubuntu 相关安装命令&#xff1a; wsl --install&#xff1a;默认安装Ubuntu发行版wsl --list --online&#xff1a;查看可支持的发行版本wsl --install -d &…

如何将 wordfile 添加到 UltraEdit 或 UEStudio

UltraEdit 本身支持开箱即用的最常用编程和标记语言的语法突出显示。我们也有数百个其他语言的 wordfile&#xff0c;但是&#xff0c;很容易找到和添加您需要的语言&#xff01; 重要提示&#xff1a;此电源提示适用于运行 UltraEdit v15.00或 UEStudio v09.10及更高版本的用户…

Ubuntu18.04系统安装nginx

Ubuntu18.04系统安装nginx一、在线安装 Nginx二、离线安装 Nginx参考链接请确保以具有 sudo 权限的用户身份登录&#xff0c;并且您没有在端口 80 或 443 上运行 Apache 或任何其他 Web 服务器。 一、在线安装 Nginx 简介&#xff1a;Nginx (engine x) 是一个免费的&#xff0…

swift-类属性

了解属性之前&#xff0c;需要先了解前面的swift-类结构内容 - swift-类结构源码探寻 FieldDescriptor TargetClassDescriptor {var Flags: ContextDescriptorFlags // uint32var Parent: TargetRelativeContextPointer // Int32var Name: TargetRelativeDirectPointer // I…

Markdown还能这么玩?这款开源神器绝了!

Markdown是一款轻量级标记语言&#xff0c;由于它易读易写的特性&#xff0c;很多程序员用它来写项目文档。其实Markdown的功能不止于此&#xff0c;结合一些工具使用还可以用来做PPT&#xff0c;今天带大家使用Markdown来做一个PPT&#xff0c;看看到底有多炫酷&#xff01; S…

《springboot那些事》

注&#xff1a;static目录、主要用于存放非模板引擎渲染的资源。 ​ template目录&#xff0c;存放渲染引擎页面的资源。 一句话&#xff1a;用模板引擎的话&#xff0c;就放template目录、否则static目录。 一、使用thymeleaf 引入thymealeaf坐标 <dependency><…

22.11.15打卡 mysql学习笔记

学了DDL和DQL, 今天课太多, 没怎么学啊, 很烦躁, 还有3周要考试了 空格可以有一个或者多个 if not exists表示不存在则执行, 存在则不执行 方括号当中的都可 create database itcase; show databases;查看数据库 再次创建itcase数据库 加上if not exists就不会报错 字符集演示 …

DPDK LPM库(学习笔记)

1 LPM库 DPDK LPM库组件为32位的key实现了最长前缀匹配&#xff08;LPM&#xff09;表查找方法&#xff0c;该方法通常用于在IP转发应用程序中找到最佳路由匹配。 2 LPM API概述 LPM组件实例的主要配置参数是要支持的最大规则数。 LPM前缀由一对参数&#xff08;32位Key&…

React源码分析3-render阶段(穿插scheduler和reconciler)

本章将讲解 react 的核心阶段之一 —— render阶段&#xff0c;我们将探究以下部分内容的源码&#xff1a; 更新任务的触发更新任务的创建reconciler 过程同步和异步遍历及执行任务scheduler 是如何实现帧空闲时间调度任务以及中断任务的 触发更新 触发更新的方式主要有以下几…

Leetcode第21题:合并两个有序链表

生命无罪&#xff0c;健康万岁&#xff0c;我是laity。 我曾七次鄙视自己的灵魂&#xff1a; 第一次&#xff0c;当它本可进取时&#xff0c;却故作谦卑&#xff1b; 第二次&#xff0c;当它在空虚时&#xff0c;用爱欲来填充&#xff1b; 第三次&#xff0c;在困难和容易之…

面试官:你说说 Mysql 索引失效有哪些场景?

前言 SQL 写不好 加班少不了 日常工作中SQL 是必不可少的一项技术 但是很多人不会过多的去关注SQL问题。 一是数据量小&#xff0c;二是没有意识到索引的重要性。本文主要是整理 SQL失效场景&#xff0c;如果里面的细节你都知道&#xff0c;那你一定是学习能力比较好的人&am…

基于Docker的网络安全靶场搭建

背景介绍 在学习网络安全技术过程中,我们往往需要有一个自己的操作机与多个用来搭建环境的靶机,使用VM虚拟机模拟资源占用较大,成本高、局限性大且使用十分不便。 这时我们可以使用一台安装好Docker环境的linux虚拟机来完成桌面版操作机与WEB靶机的搭建与实验操作。 Docker…

Linux操作系统~进程替换,exec系列函数的使用

目录 1.概念/原理 &#xff08;1&#xff09;.替换原理 &#xff08;2&#xff09;.子进程调用execl执行程序替换&#xff0c;为什么父进程不受影响&#xff1f; &#xff08;3&#xff09;.exec*返回值 2.替换函数exec execl execv execlp execvp的&#xff08;execv…

Android Studio App开发之网络通信中使用POST方式调用HTTP接口实现应用更新功能(附源码 超详细必看)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、POST方式调用HTTP接口 POST方式把接口地址与请求报文分开&#xff0c;允许使用自定义的报文格式&#xff0c;由此扩大了该方式的应用场景。POST请求与GET请求主要有三处编码差异 1&#xff1a;在调用setRequestMethod方…

Kafka 消息队列 ( 一 ) 基本概念

0.MQ(message queue) 消息中间件 生活中的问题 : 快递员 给 你 送东西, 你必须 在家等着, (效率低) 可以 把东西 放 指定 的 地方(菜鸟驿站) , 你自己去取 , 指定 的地点(菜鸟驿站) 就是 MQ 消息队列中间件 0.1.开发中的问题 0.1.1.异步问题 0.1.2.业务解耦 0.1.3.流量削…