HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

【关于】uniCloud阿里云服务空间云函数计费规则调整,节约资源费用经验分享。

unicloud入门教程 uniCloud

我也是等到费用不够提醒的时候,才注意到的。那个时候已经过去很多天了。附图

我小程序日活300左右吧,所以正常也没怎么去管理,让它自己跑。
我分了很多云对象。各司其职。新规出来后,我把定时任务在同一时间段的合并成一个。
全部云对象合并成一个。新的云对象有4000行代码。

在这里应该有人担心合并成一个后的性能问题。有区别,但是类似我这样的 区别应该不大。
启动阶段分为 冷启动 跟 热启动。(官方文档:阿里云:15分钟内没有第二次访问的云函数,就会被回收)
代码大了冷启动需要耗时比较久。
都是热启动状态下区别很小,忽略不计。

总结,冷启动比较久一点。热启动状态下无区别。
(PS:在改规前,我还想写定时任务,让函数一直处于热启动,这样前端请求返回就会跳过函数冷启动的阶段更快。)

所以这里的建议是合并成一个云对象,这一步适用很多中小项目。
因为我使用的是uni-id 所以我理论上最低消耗应该是 0.24x2+定时任务 也就是五毛到六毛。比之前高了10倍,但是可以接受。
使用于不是迁移到支付云的大家。

有不懂了,留言。我看见会帮忙。

继续阅读 »

我也是等到费用不够提醒的时候,才注意到的。那个时候已经过去很多天了。附图

我小程序日活300左右吧,所以正常也没怎么去管理,让它自己跑。
我分了很多云对象。各司其职。新规出来后,我把定时任务在同一时间段的合并成一个。
全部云对象合并成一个。新的云对象有4000行代码。

在这里应该有人担心合并成一个后的性能问题。有区别,但是类似我这样的 区别应该不大。
启动阶段分为 冷启动 跟 热启动。(官方文档:阿里云:15分钟内没有第二次访问的云函数,就会被回收)
代码大了冷启动需要耗时比较久。
都是热启动状态下区别很小,忽略不计。

总结,冷启动比较久一点。热启动状态下无区别。
(PS:在改规前,我还想写定时任务,让函数一直处于热启动,这样前端请求返回就会跳过函数冷启动的阶段更快。)

所以这里的建议是合并成一个云对象,这一步适用很多中小项目。
因为我使用的是uni-id 所以我理论上最低消耗应该是 0.24x2+定时任务 也就是五毛到六毛。比之前高了10倍,但是可以接受。
使用于不是迁移到支付云的大家。

有不懂了,留言。我看见会帮忙。

收起阅读 »

前后端分离!ThinkPHP 6 + UniApp 圈子小程序源码,代码优雅到没朋友

在圈子类小程序开发中,代码冗余、兼容性差、维护繁琐是常见痛点,而 ThinkPHP 6 + UniApp 组合的前后端分离架构,恰好破解这些难题,其源码的优雅度更是让开发者眼前一亮,兼顾高效开发与后期可扩展性。

后端采用 ThinkPHP 6 框架,遵循PSR规范,代码结构清晰、逻辑严谨,摒弃冗余代码,核心业务逻辑模块化拆分,接口开发简洁高效,支持灵活扩展,无论是圈子动态发布、评论互动,还是用户权限管理,都能快速落地。同时内置安全机制,有效防范SQL注入、XSS攻击,保障小程序稳定运行。

前端依托 UniApp 开发,实现一次编码、多端适配,无需重复开发即可同步生成微信小程序、支付宝小程序等多端版本,大幅降低开发成本。源码遵循前端规范,组件化开发思路贯穿全程,页面布局简洁美观,交互流畅,可直接复用组件快速搭建圈子核心功能。

这套源码最突出的优势的就是“优雅”——无冗余代码、注释清晰、逻辑连贯,新手可快速上手二次开发,老手能高效优化迭代。无需复杂配置,部署简单,无论是个人开发者搭建兴趣圈子,还是企业打造专属社群,这套前后端分离的圈子小程序源码,都是高效省心的优选。
查看演示及源码获取地址⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

继续阅读 »

在圈子类小程序开发中,代码冗余、兼容性差、维护繁琐是常见痛点,而 ThinkPHP 6 + UniApp 组合的前后端分离架构,恰好破解这些难题,其源码的优雅度更是让开发者眼前一亮,兼顾高效开发与后期可扩展性。

后端采用 ThinkPHP 6 框架,遵循PSR规范,代码结构清晰、逻辑严谨,摒弃冗余代码,核心业务逻辑模块化拆分,接口开发简洁高效,支持灵活扩展,无论是圈子动态发布、评论互动,还是用户权限管理,都能快速落地。同时内置安全机制,有效防范SQL注入、XSS攻击,保障小程序稳定运行。

前端依托 UniApp 开发,实现一次编码、多端适配,无需重复开发即可同步生成微信小程序、支付宝小程序等多端版本,大幅降低开发成本。源码遵循前端规范,组件化开发思路贯穿全程,页面布局简洁美观,交互流畅,可直接复用组件快速搭建圈子核心功能。

这套源码最突出的优势的就是“优雅”——无冗余代码、注释清晰、逻辑连贯,新手可快速上手二次开发,老手能高效优化迭代。无需复杂配置,部署简单,无论是个人开发者搭建兴趣圈子,还是企业打造专属社群,这套前后端分离的圈子小程序源码,都是高效省心的优选。
查看演示及源码获取地址⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

收起阅读 »

Google Play 正式发版后,Appkey未配置问题【离线打包】

离线打包 GooglePlay appkey

我遇到的情况和过程:
1、走的是离线打包;
2、内测正常;
3、正式版发布后,安装提示appkey未配置或不正确;
4、社区我搜索出来似乎都没有明确说明这个如何解决;
5、目前已经正式发新版上架,下载测试成功已经解决。

造成的原因
我分析的之间原因是:
按uni-app官方的流程走appkey申请的各位包括我之前,很有可能填写的sha1和sha256是个签keystore的,Google Play二签发版后,下载下来自然就不匹配。
表象:内测发版正常(因为google发内测没有执行二签)

正确的处理
就是把Google Play提供的应用凭证去uni-app重新申请appkey,并更新重新发版:


注意
我測試的结果:
1、用Google Play的凭证申请的Appkey只有正式发布(公测我未试)是正常的,其他都会提示未配置;
2、用自签的凭证申请的Appkey在本地、apk和发内测都是正常的,正式发布会提示未配置;
3、无论用哪个Appkey,离线打包的证书都未变,都是用自签的证书。

——MD5我沒測到底要不要,我看提供了就順便,確實也沒發現問題;

——我確實就是這樣解決的,如果還是不行,我就確實不知道了:)

继续阅读 »

我遇到的情况和过程:
1、走的是离线打包;
2、内测正常;
3、正式版发布后,安装提示appkey未配置或不正确;
4、社区我搜索出来似乎都没有明确说明这个如何解决;
5、目前已经正式发新版上架,下载测试成功已经解决。

造成的原因
我分析的之间原因是:
按uni-app官方的流程走appkey申请的各位包括我之前,很有可能填写的sha1和sha256是个签keystore的,Google Play二签发版后,下载下来自然就不匹配。
表象:内测发版正常(因为google发内测没有执行二签)

正确的处理
就是把Google Play提供的应用凭证去uni-app重新申请appkey,并更新重新发版:


注意
我測試的结果:
1、用Google Play的凭证申请的Appkey只有正式发布(公测我未试)是正常的,其他都会提示未配置;
2、用自签的凭证申请的Appkey在本地、apk和发内测都是正常的,正式发布会提示未配置;
3、无论用哪个Appkey,离线打包的证书都未变,都是用自签的证书。

——MD5我沒測到底要不要,我看提供了就順便,確實也沒發現問題;

——我確實就是這樣解決的,如果還是不行,我就確實不知道了:)

收起阅读 »

PHP+Uni‑App如何为游戏代练业务注入“技术BUFF”?智能匹配系统成转化率提升利器!

PHP

PHP+Uni‑App如何为游戏代练业务注入“技术BUFF”?智能匹配系统成转化率提升利器!

在游戏代练和护航服务行业,你是否也常遇到这样的痛点:客户需求多样(有的专注“三角洲行动”冲榜,有的急需热门副本代打),但手头的打手师傅技能和经验各异,匹配全靠人工沟通,效率低、流失高?别急,用PHP打造后端大脑,再搭配Uni‑App实现全平台触达,一套智能匹配系统,或许就是让你在激烈竞争中脱颖而出的“神装”。

一、核心技术栈:PHP + Uni‑App的黄金组合

• 后端基石(PHP):凭借其成熟、稳定、开发效率高的特点,PHP是构建业务逻辑后端的绝佳选择。它可以高效处理订单管理、打手技能标签化、用户数据分析以及最核心的智能匹配算法。你可以根据“三角洲行动”的地图熟悉度、段位历史、英雄池等维度,为打手建立精准画像;同时,系统可实时分析客户发布的代练需求(如上分、护航、成就代打),由算法自动筛选、推荐最合适的打手,极大缩短等待时间。

• 前端利器(Uni‑App):一次开发,可发布到iOS、Android、Web以及各家小程序平台。这意味着,无论是寻求“游戏代打”服务的玩家,还是随时准备接单的“护航”大神,都能通过最熟悉的平台便捷使用你的服务。Uni‑App流畅的体验和接近原生的性能,能完美承载从浏览、下单、沟通到进度跟踪的全流程。

二、智能匹配:如何真正提升转化率?

  1. 需求深度解析:系统不只是看“王者段位代练”这样的大类,而是可细化到“三角洲行动-排位护航-特定时段”。精准的需求拆解是高效匹配的第一步。

  2. 动态算法推荐:PHP后端算法可综合考量打手实时接单状态、历史好评率、特定任务(如某副本速通)完成率等多重权重,进行动态评分与即时推荐。这让客户感觉“秒懂我心”,直接推动下单决策。

  3. 流程全自动化:从客户下单、智能派单、打手接单确认到服务完成,全流程线上化、自动化。减少人工干预,不仅降低运营成本,更提升了订单处理速度和客户体验的专业感。

三、业务赋能与未来想象

通过PHP构建的强大后台管理系统,你可以清晰掌握各项业务数据:哪些“游戏代练”需求最火爆?“护航”服务的客单价分布如何?打手团队的效率如何优化?数据驱动的决策能让运营更精准。

在DCloud生态发布你的Uni‑App应用,能够轻松覆盖海量潜在用户。对于年轻的创业者或技术开发者而言,这个技术方案不仅可行性强、开发周期可控,其核心的“智能匹配”理念,更是将技术力直接转化为业务竞争力和转化率提升的关键。用技术为传统的“游戏代打”服务赋能,打造一个更高效、更透明、更可信赖的平台,无疑是当前市场的蓝海机遇。

立即行动,用代码构建你的“护航”舰队,在游戏服务的新浪潮中,智慧启航!

继续阅读 »

PHP+Uni‑App如何为游戏代练业务注入“技术BUFF”?智能匹配系统成转化率提升利器!

在游戏代练和护航服务行业,你是否也常遇到这样的痛点:客户需求多样(有的专注“三角洲行动”冲榜,有的急需热门副本代打),但手头的打手师傅技能和经验各异,匹配全靠人工沟通,效率低、流失高?别急,用PHP打造后端大脑,再搭配Uni‑App实现全平台触达,一套智能匹配系统,或许就是让你在激烈竞争中脱颖而出的“神装”。

一、核心技术栈:PHP + Uni‑App的黄金组合

• 后端基石(PHP):凭借其成熟、稳定、开发效率高的特点,PHP是构建业务逻辑后端的绝佳选择。它可以高效处理订单管理、打手技能标签化、用户数据分析以及最核心的智能匹配算法。你可以根据“三角洲行动”的地图熟悉度、段位历史、英雄池等维度,为打手建立精准画像;同时,系统可实时分析客户发布的代练需求(如上分、护航、成就代打),由算法自动筛选、推荐最合适的打手,极大缩短等待时间。

• 前端利器(Uni‑App):一次开发,可发布到iOS、Android、Web以及各家小程序平台。这意味着,无论是寻求“游戏代打”服务的玩家,还是随时准备接单的“护航”大神,都能通过最熟悉的平台便捷使用你的服务。Uni‑App流畅的体验和接近原生的性能,能完美承载从浏览、下单、沟通到进度跟踪的全流程。

二、智能匹配:如何真正提升转化率?

  1. 需求深度解析:系统不只是看“王者段位代练”这样的大类,而是可细化到“三角洲行动-排位护航-特定时段”。精准的需求拆解是高效匹配的第一步。

  2. 动态算法推荐:PHP后端算法可综合考量打手实时接单状态、历史好评率、特定任务(如某副本速通)完成率等多重权重,进行动态评分与即时推荐。这让客户感觉“秒懂我心”,直接推动下单决策。

  3. 流程全自动化:从客户下单、智能派单、打手接单确认到服务完成,全流程线上化、自动化。减少人工干预,不仅降低运营成本,更提升了订单处理速度和客户体验的专业感。

三、业务赋能与未来想象

通过PHP构建的强大后台管理系统,你可以清晰掌握各项业务数据:哪些“游戏代练”需求最火爆?“护航”服务的客单价分布如何?打手团队的效率如何优化?数据驱动的决策能让运营更精准。

在DCloud生态发布你的Uni‑App应用,能够轻松覆盖海量潜在用户。对于年轻的创业者或技术开发者而言,这个技术方案不仅可行性强、开发周期可控,其核心的“智能匹配”理念,更是将技术力直接转化为业务竞争力和转化率提升的关键。用技术为传统的“游戏代打”服务赋能,打造一个更高效、更透明、更可信赖的平台,无疑是当前市场的蓝海机遇。

立即行动,用代码构建你的“护航”舰队,在游戏服务的新浪潮中,智慧启航!

收起阅读 »

基于vue3.5+electron41+vite8.0++deepseek构建桌面版ai智能对答系统

vue3 OpenAI ai vite

vite8-electron41-deepseek:基于vue3.5+vite8.0+electron41+arco+markdown+hljs+openai集成调用deepseek api聊天大模型。支持暗夜+浅色主题、深度思考、代码高亮/复制代码/下载、katex公式、渲染mermaid图表等功能。

技术知识

  • 编辑器:Vscode
  • 跨平台框架:electron^41.0.3
  • 前端框架:vite^8.0.1+vue^3.5.30+vue-router^5.0.4
  • 大模型框架:deepseek-v3.2+openai
  • 组件库:arco-design^2.57.0
  • 状态管理:pinia^3.0.4
  • markdown解析:markdown-it^14.1.1
  • 打包工具:electron-builder^26.8.1
  • vite桥接electron插件:vite-plugin-electron^0.29.1

项目框架目录结构

使用vite8.0+electron41构建项目,vue3 setup语法编码开发。

最新研发vue3.5+vite8+electron41搭建本地桌面版ai流式生成智能助手。
Electron41+Vite8+DeepSeek桌面版AI流式会话模板Exe

了解更多的项目详细介绍,可以看看下面这篇文章。
Electron41+Vite8.0+DeepSeek桌面端AI助手|electron+vue3流式ai系统

热文推荐

uniapp+deepseek流式ai助理|uniapp+vue3对接deepseek三端Ai问答模板
Vite8+DeepSeek网页版AI助手|vue3+arco本地web版ai流式打字问答系统
tauri2.10+deepseek+vite7客户端ai系统|Tauri2+Vue3.5桌面AI程序Exe
vite8.0+deepseek流式ai模板|vue3.5+vant4+markdown打字输出ai助手
Electron38-Wechat电脑端聊天|vite7+electron38仿微信桌面端聊天系统
electron38-admin桌面端后台|Electron38+Vue3+ElementPlus管理系统
Electron38-Vue3OS客户端OS系统|vite7+electron38+arco桌面os后台管理
最新版uniapp+vue3+uv-ui跨三端短视频+直播+聊天【H5+小程序+App端】
最新版uni-app+vue3+uv-ui跨三端仿微信app聊天应用【h5+小程序+app端】
Tauri2.9+Vue3桌面版OS系统|vite7+tauri2+arcoDesign电脑端os后台模板
Tauri2.8+Vue3聊天系统|vite7+tauri2+element-plus客户端仿微信聊天程序
Tauri2-Vite7Admin客户端管理后台|tauri2.9+vue3+element-plus后台系统
最新版Flutter3.38+Dart3.10仿写抖音APP直播+短视频+聊天应用程序
Flutter3-MacOS桌面OS系统|flutter3.32+window_manager客户端OS模板
最新研发flutter3.27+bitsdojo_window+getx客户端仿微信聊天Exe应用
最新版Flutter3.32+Dart3.8跨平台仿微信app聊天界面|朋友圈

继续阅读 »

vite8-electron41-deepseek:基于vue3.5+vite8.0+electron41+arco+markdown+hljs+openai集成调用deepseek api聊天大模型。支持暗夜+浅色主题、深度思考、代码高亮/复制代码/下载、katex公式、渲染mermaid图表等功能。

技术知识

  • 编辑器:Vscode
  • 跨平台框架:electron^41.0.3
  • 前端框架:vite^8.0.1+vue^3.5.30+vue-router^5.0.4
  • 大模型框架:deepseek-v3.2+openai
  • 组件库:arco-design^2.57.0
  • 状态管理:pinia^3.0.4
  • markdown解析:markdown-it^14.1.1
  • 打包工具:electron-builder^26.8.1
  • vite桥接electron插件:vite-plugin-electron^0.29.1

项目框架目录结构

使用vite8.0+electron41构建项目,vue3 setup语法编码开发。

最新研发vue3.5+vite8+electron41搭建本地桌面版ai流式生成智能助手。
Electron41+Vite8+DeepSeek桌面版AI流式会话模板Exe

了解更多的项目详细介绍,可以看看下面这篇文章。
Electron41+Vite8.0+DeepSeek桌面端AI助手|electron+vue3流式ai系统

热文推荐

uniapp+deepseek流式ai助理|uniapp+vue3对接deepseek三端Ai问答模板
Vite8+DeepSeek网页版AI助手|vue3+arco本地web版ai流式打字问答系统
tauri2.10+deepseek+vite7客户端ai系统|Tauri2+Vue3.5桌面AI程序Exe
vite8.0+deepseek流式ai模板|vue3.5+vant4+markdown打字输出ai助手
Electron38-Wechat电脑端聊天|vite7+electron38仿微信桌面端聊天系统
electron38-admin桌面端后台|Electron38+Vue3+ElementPlus管理系统
Electron38-Vue3OS客户端OS系统|vite7+electron38+arco桌面os后台管理
最新版uniapp+vue3+uv-ui跨三端短视频+直播+聊天【H5+小程序+App端】
最新版uni-app+vue3+uv-ui跨三端仿微信app聊天应用【h5+小程序+app端】
Tauri2.9+Vue3桌面版OS系统|vite7+tauri2+arcoDesign电脑端os后台模板
Tauri2.8+Vue3聊天系统|vite7+tauri2+element-plus客户端仿微信聊天程序
Tauri2-Vite7Admin客户端管理后台|tauri2.9+vue3+element-plus后台系统
最新版Flutter3.38+Dart3.10仿写抖音APP直播+短视频+聊天应用程序
Flutter3-MacOS桌面OS系统|flutter3.32+window_manager客户端OS模板
最新研发flutter3.27+bitsdojo_window+getx客户端仿微信聊天Exe应用
最新版Flutter3.32+Dart3.8跨平台仿微信app聊天界面|朋友圈

收起阅读 »

监听应用安装完成

/**

  • 监听应用启动
  • 通过广播接收器监听目标应用的启动事件
    */
    const receiveBroadcastOfAppInstall: {
    broadcastReceiver?: any;
    (targetPname: string): Promise<void>
    } = (targetPname) => {
    const main = plus.android.runtimeMainActivity()
    if (receiveBroadcastOfAppInstall.broadcastReceiver) {
    // @ts-ignore
    main.unregisterReceiver(receiveBroadcastOfAppInstall.broadcastReceiver)
    receiveBroadcastOfAppInstall.broadcastReceiver = null
    }

    const Intent = plus.android.importClass('android.content.Intent')
    const IntentFilter = plus.android.importClass('android.content.IntentFilter')
    const Uri = plus.android.importClass('android.net.Uri')
    // @ts-ignore
    const filter = new IntentFilter()
    // @ts-ignore
    filter.addAction(Intent.ACTION_PACKAGE_ADDED)
    // @ts-ignore
    filter.addAction(Intent.ACTION_PACKAGE_REPLACED)
    filter.addDataScheme('package')
    return new Promise((resolve) => {
    const broadcastReceiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
    onReceive: (context: any, intent: any) => {
    const action = intent.getAction()
    const data = intent.getData()
    if (
    // @ts-ignore
    (action === Intent.ACTION_PACKAGE_ADDED || action === Intent.ACTION_PACKAGE_REPLACED)

继续阅读 »

/**

  • 监听应用启动
  • 通过广播接收器监听目标应用的启动事件
    */
    const receiveBroadcastOfAppInstall: {
    broadcastReceiver?: any;
    (targetPname: string): Promise<void>
    } = (targetPname) => {
    const main = plus.android.runtimeMainActivity()
    if (receiveBroadcastOfAppInstall.broadcastReceiver) {
    // @ts-ignore
    main.unregisterReceiver(receiveBroadcastOfAppInstall.broadcastReceiver)
    receiveBroadcastOfAppInstall.broadcastReceiver = null
    }

    const Intent = plus.android.importClass('android.content.Intent')
    const IntentFilter = plus.android.importClass('android.content.IntentFilter')
    const Uri = plus.android.importClass('android.net.Uri')
    // @ts-ignore
    const filter = new IntentFilter()
    // @ts-ignore
    filter.addAction(Intent.ACTION_PACKAGE_ADDED)
    // @ts-ignore
    filter.addAction(Intent.ACTION_PACKAGE_REPLACED)
    filter.addDataScheme('package')
    return new Promise((resolve) => {
    const broadcastReceiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
    onReceive: (context: any, intent: any) => {
    const action = intent.getAction()
    const data = intent.getData()
    if (
    // @ts-ignore
    (action === Intent.ACTION_PACKAGE_ADDED || action === Intent.ACTION_PACKAGE_REPLACED)

收起阅读 »

商业模式之争:SaaS代练系统与独立护航小程序的底层逻辑差异及源码实现方案

在游戏代练赛道,SaaS代练系统与独立护航小程序的竞争,核心是商业模式与技术架构的底层差异,二者适配不同规模从业者,源码实现逻辑也随之不同,共同构成行业两大主流解决方案。

底层逻辑上,SaaS代练系统以“租赁服务”为核心,主打轻门槛、标准化,本质是通过持续收取年费和订单抽成盈利,核心逻辑是服务规模化复用,用户无需投入开发成本,却需依附平台,数据与运营自主权受限。独立护航小程序则以“自主可控”为核心,采用买断式部署,一次性投入后无后续抽成,核心逻辑是打造专属品牌,掌控客户数据与运营规则,适配中小工作室长期盈利需求。

源码实现方面,SaaS系统采用UniApp ThinkPHP6架构,侧重多端适配与集中管控,核心模块含订单管理、多角色权限分配,通过Redis缓存与读写分离支撑高并发,源码需预留增值功能接口适配分层付费模式。独立小程序源码同样基于UniApp PHP开发,侧重轻量化与自主部署,简化平台管控模块,强化客户留存与自定义功能,集成WebSocket实现进度实时推送,部署后仅需承担服务器与域名成本。

二者无绝对优劣,SaaS适合新手快速起步,独立小程序适合追求长期盈利、注重品牌建设的从业者,源码实现需贴合其商业模式核心,平衡成本与自主可控性。


查看演示及源码获取地址⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

继续阅读 »

在游戏代练赛道,SaaS代练系统与独立护航小程序的竞争,核心是商业模式与技术架构的底层差异,二者适配不同规模从业者,源码实现逻辑也随之不同,共同构成行业两大主流解决方案。

底层逻辑上,SaaS代练系统以“租赁服务”为核心,主打轻门槛、标准化,本质是通过持续收取年费和订单抽成盈利,核心逻辑是服务规模化复用,用户无需投入开发成本,却需依附平台,数据与运营自主权受限。独立护航小程序则以“自主可控”为核心,采用买断式部署,一次性投入后无后续抽成,核心逻辑是打造专属品牌,掌控客户数据与运营规则,适配中小工作室长期盈利需求。

源码实现方面,SaaS系统采用UniApp ThinkPHP6架构,侧重多端适配与集中管控,核心模块含订单管理、多角色权限分配,通过Redis缓存与读写分离支撑高并发,源码需预留增值功能接口适配分层付费模式。独立小程序源码同样基于UniApp PHP开发,侧重轻量化与自主部署,简化平台管控模块,强化客户留存与自定义功能,集成WebSocket实现进度实时推送,部署后仅需承担服务器与域名成本。

二者无绝对优劣,SaaS适合新手快速起步,独立小程序适合追求长期盈利、注重品牌建设的从业者,源码实现需贴合其商业模式核心,平衡成本与自主可控性。


查看演示及源码获取地址⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

收起阅读 »

uniCloud阿里云服务空间云函数计费规则调整导致我们费用暴涨几十倍,我们怎么办?

bug反馈

办法1:
直接做项目迁移,迁移到支付宝云

办法2:
如果有使用的uni-admin开发后台管理的,但是又没有用到数据统计的,先去掉二个定时运行的云函数:
官方的uni-admin及uni-starter内置定时任务如下:
uni-stat-cron:uni 统计,每小时运行 1 次,删除可节省 1 天的保底费用 0.24 元(2160Gbs)
uni-analyse-searchhot:热点搜索,每 2 小时运行 1 次,删除可节省 1 天的保底费用 0.12 元(1080Gbs)
自己项目的定时运行的云函数也可以做下取舍,再全局审查项目,合并一些云函数,有的页面可能是一进来就调用二三个云函数的做下合并

办法3
这是最无奈的办法,知道希望很小,但是我们要试一试,我正在组织针对阿里云这一次修改的一个投诉,但是个人的力量是很微薄的,人多才力量大,我们一起加油,加入这个集体投诉,希望官方能听到我们声音
集体投诉地址:https://tousu.sina.com.cn/grp_comp/view/G17395081502


方法3已经试过,得到了阿里云的回复,说我没有直接用阿里云的产品,用阿里云产品的是unicloud,有什么问题应该由unicloud官方派人跟阿里云沟通,unicloud官方能不能派个人去沟通争取一下。

继续阅读 »

办法1:
直接做项目迁移,迁移到支付宝云

办法2:
如果有使用的uni-admin开发后台管理的,但是又没有用到数据统计的,先去掉二个定时运行的云函数:
官方的uni-admin及uni-starter内置定时任务如下:
uni-stat-cron:uni 统计,每小时运行 1 次,删除可节省 1 天的保底费用 0.24 元(2160Gbs)
uni-analyse-searchhot:热点搜索,每 2 小时运行 1 次,删除可节省 1 天的保底费用 0.12 元(1080Gbs)
自己项目的定时运行的云函数也可以做下取舍,再全局审查项目,合并一些云函数,有的页面可能是一进来就调用二三个云函数的做下合并

办法3
这是最无奈的办法,知道希望很小,但是我们要试一试,我正在组织针对阿里云这一次修改的一个投诉,但是个人的力量是很微薄的,人多才力量大,我们一起加油,加入这个集体投诉,希望官方能听到我们声音
集体投诉地址:https://tousu.sina.com.cn/grp_comp/view/G17395081502


方法3已经试过,得到了阿里云的回复,说我没有直接用阿里云的产品,用阿里云产品的是unicloud,有什么问题应该由unicloud官方派人跟阿里云沟通,unicloud官方能不能派个人去沟通争取一下。

收起阅读 »

实现微信小程序自定义 tabBar

微信小程序 uniapp

前言

本文分享如何在uniapp vue3 实现自定义微信小程序 tabBar。

配置信息

pages.json 中添加 tabBar 的相关配置,例如

{  
  "pages": [  
    {  
      "path": "pages/index/index",  
      "style": {  
        "navigationBarTitleText": "首页"  
      }  
    },  
    {  
      "path": "pages/mine/index",  
      "style": {  
        "navigationBarTitleText": "我的"  
      }  
    }  
  ],  
  "tabBar": {  
    "custom": true,  
    "color": "#7A7E83",  
    "selectedColor": "#3cc51f",  
    "borderStyle": "black",  
    "backgroundColor": "#ffffff",  
    "list": [  
      {  
        "pagePath": "pages/index/index",  
        "iconPath": "static/icon_component.png",  
        "selectedIconPath": "static/icon_component_HL.png",  
        "text": "首页"  
      },  
      {  
        "pagePath": "pages/mine/index",  
        "iconPath": "static/icon_API.png",  
        "selectedIconPath": "static/icon_API_HL.png",  
        "text": "我的"  
      }  
    ]  
  }  
}

添加 tabBar 代码文件

在根目录添加 custom-tab-bar 文件夹,下面包含微信小程序原生文件

编写 tabBar 代码

这一步需要获取自定义 tabBar 组件实例,通过示例来更新选中的 tab,微信小程序可以通过 this 操作,uniapp 也支持直接操作微信小程序组件示例,如下代码

<template>  
  <view>  
    <text>首页</text>  
  </view>  
</template>  

<script setup>  
import { getCurrentInstance } from "vue";  
import { onShow } from "@dcloudio/uni-app";  

const instance = getCurrentInstance();  

onShow(() => {  
  const tabBar = instance?.proxy?.$scope?.getTabBar?.();  // 获取组件示例函数返回值  
  if (tabBar) {  
    tabBar.setData({  
      selected: 0,  
    });  
  }  
});  
</script>

其他 tab 页同理

示例项目

参考附件

继续阅读 »

前言

本文分享如何在uniapp vue3 实现自定义微信小程序 tabBar。

配置信息

pages.json 中添加 tabBar 的相关配置,例如

{  
  "pages": [  
    {  
      "path": "pages/index/index",  
      "style": {  
        "navigationBarTitleText": "首页"  
      }  
    },  
    {  
      "path": "pages/mine/index",  
      "style": {  
        "navigationBarTitleText": "我的"  
      }  
    }  
  ],  
  "tabBar": {  
    "custom": true,  
    "color": "#7A7E83",  
    "selectedColor": "#3cc51f",  
    "borderStyle": "black",  
    "backgroundColor": "#ffffff",  
    "list": [  
      {  
        "pagePath": "pages/index/index",  
        "iconPath": "static/icon_component.png",  
        "selectedIconPath": "static/icon_component_HL.png",  
        "text": "首页"  
      },  
      {  
        "pagePath": "pages/mine/index",  
        "iconPath": "static/icon_API.png",  
        "selectedIconPath": "static/icon_API_HL.png",  
        "text": "我的"  
      }  
    ]  
  }  
}

添加 tabBar 代码文件

在根目录添加 custom-tab-bar 文件夹,下面包含微信小程序原生文件

编写 tabBar 代码

这一步需要获取自定义 tabBar 组件实例,通过示例来更新选中的 tab,微信小程序可以通过 this 操作,uniapp 也支持直接操作微信小程序组件示例,如下代码

<template>  
  <view>  
    <text>首页</text>  
  </view>  
</template>  

<script setup>  
import { getCurrentInstance } from "vue";  
import { onShow } from "@dcloudio/uni-app";  

const instance = getCurrentInstance();  

onShow(() => {  
  const tabBar = instance?.proxy?.$scope?.getTabBar?.();  // 获取组件示例函数返回值  
  if (tabBar) {  
    tabBar.setData({  
      selected: 0,  
    });  
  }  
});  
</script>

其他 tab 页同理

示例项目

参考附件

收起阅读 »

支付宝原生扫码插件兼容HBuildX新版本解决方案分享

> 原插件地址:
https://ext.dcloud.net.cn/plugin?id=2636

当前插件一直在使用,扫码很快很稳定,后面因为升级了HB版本,导致打包后扫码无任何反应,导致无法正常使用!

后面为了保证打包后插件可正常使用,只能回退到HB版本4.7.6

但是随着HB版本的不断升级优化,又不想抛弃这个插件,只能找解决方案来解决这个问题

后面发现4.7.6版本打包后的APK的LIB文件下有libc++_shared.so文件,而后新版本打包的APK里无这个so文件

对比信息:

解决方法:

1.把以前可正常运行包里的libc++_shared.so文件拷贝出来
分别是 arm64-v8a/libc++_shared.so armeabi-v7a/libc++_shared.so

2.然后在项目根目录新建文件夹nativeResources/android/libs/

3.将拷贝出来的两个文件夹放入到libs下

结果:

提交新版本打包 打包成功后就可以了

复核: 可打开新的APK 查看libs/xx/下是否有libc++_shared.so文件来确定

> 为了方便,可自行下载当前附件放到项目根目录 后进行打包测试

是否可行 可回帖反馈给需要的人

继续阅读 »

> 原插件地址:
https://ext.dcloud.net.cn/plugin?id=2636

当前插件一直在使用,扫码很快很稳定,后面因为升级了HB版本,导致打包后扫码无任何反应,导致无法正常使用!

后面为了保证打包后插件可正常使用,只能回退到HB版本4.7.6

但是随着HB版本的不断升级优化,又不想抛弃这个插件,只能找解决方案来解决这个问题

后面发现4.7.6版本打包后的APK的LIB文件下有libc++_shared.so文件,而后新版本打包的APK里无这个so文件

对比信息:

解决方法:

1.把以前可正常运行包里的libc++_shared.so文件拷贝出来
分别是 arm64-v8a/libc++_shared.so armeabi-v7a/libc++_shared.so

2.然后在项目根目录新建文件夹nativeResources/android/libs/

3.将拷贝出来的两个文件夹放入到libs下

结果:

提交新版本打包 打包成功后就可以了

复核: 可打开新的APK 查看libs/xx/下是否有libc++_shared.so文件来确定

> 为了方便,可自行下载当前附件放到项目根目录 后进行打包测试

是否可行 可回帖反馈给需要的人

收起阅读 »

关于app隐藏底部安全边界问题(指示条、手机导航栏)

导航栏 App 安卓 iOS 鸿蒙next

App如何隐藏手机底部安全边界问题(指示条、手机导航)

纯血鸿蒙(app-harmony)如何隐藏安全边界:

在 manifest.json 的 app-harmony 节点下独立配置:

"app-harmony": {    
  "safearea": {    
    "bottom": {    
      "offset": "none"    
    }    
  }    
}

苹果系统(IOS)如何隐藏安全边界:

在 manifest.json 的 app-plus 节点下配置:

"app-plus": {    
  "safearea": {    
    "bottom": {    
      "offset": "none"  // 设置为 none 可关闭底部安全区域占位    
    }    
  }    
}

注:IOS隐藏安全边界配置完后一定得重新云打包自定义基座才生效

安卓系统()如何隐藏安全边界:

在第一个界面或随便一个界面script中设置。

// #ifdef APP-PLUS  
    // 判断当前环境是否为Android  
    if (plus.os.name.toLowerCase() === 'android') {  
        var Color = plus.android.importClass("android.graphics.Color");  
        const Window = plus.android.importClass("android.view.Window");  
        var mainActivity = plus.android.runtimeMainActivity();  
        var window_android = mainActivity.getWindow();  
        var WindowManager = plus.android.importClass("android.view.WindowManager");  
        var View = plus.android.importClass("android.view.View");  
        //直接隐藏    
        window_android.setFlags(Window.FLAG_FULLSCREEN, Window.FLAG_FULLSCREEN);  
        window_android.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View  
            .SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);  
        //设置为全透明    
        window_android.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  
        window_android.setNavigationBarColor(Color.TRANSPARENT);  
    }  
// #endif

注:涉及原生安卓代码,有不懂的直接让AI解析
安卓隐藏安全边界 原文链接:https://blog.csdn.net/sct_123/article/details/142408327

希望可以帮助到你

继续阅读 »

App如何隐藏手机底部安全边界问题(指示条、手机导航)

纯血鸿蒙(app-harmony)如何隐藏安全边界:

在 manifest.json 的 app-harmony 节点下独立配置:

"app-harmony": {    
  "safearea": {    
    "bottom": {    
      "offset": "none"    
    }    
  }    
}

苹果系统(IOS)如何隐藏安全边界:

在 manifest.json 的 app-plus 节点下配置:

"app-plus": {    
  "safearea": {    
    "bottom": {    
      "offset": "none"  // 设置为 none 可关闭底部安全区域占位    
    }    
  }    
}

注:IOS隐藏安全边界配置完后一定得重新云打包自定义基座才生效

安卓系统()如何隐藏安全边界:

在第一个界面或随便一个界面script中设置。

// #ifdef APP-PLUS  
    // 判断当前环境是否为Android  
    if (plus.os.name.toLowerCase() === 'android') {  
        var Color = plus.android.importClass("android.graphics.Color");  
        const Window = plus.android.importClass("android.view.Window");  
        var mainActivity = plus.android.runtimeMainActivity();  
        var window_android = mainActivity.getWindow();  
        var WindowManager = plus.android.importClass("android.view.WindowManager");  
        var View = plus.android.importClass("android.view.View");  
        //直接隐藏    
        window_android.setFlags(Window.FLAG_FULLSCREEN, Window.FLAG_FULLSCREEN);  
        window_android.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View  
            .SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);  
        //设置为全透明    
        window_android.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  
        window_android.setNavigationBarColor(Color.TRANSPARENT);  
    }  
// #endif

注:涉及原生安卓代码,有不懂的直接让AI解析
安卓隐藏安全边界 原文链接:https://blog.csdn.net/sct_123/article/details/142408327

希望可以帮助到你

收起阅读 »