更新记录
1.8.3(2024-11-13)
登录界面
1.8.2(2024-05-10)
优化打包发行
1.8.1(2024-01-18)
阿里云 云函数适配
查看更多平台兼容性
阿里云 | 腾讯云 | 支付宝云 |
---|---|---|
√ | × | × |
Vue2 | Vue3 |
---|---|
√ | × |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 3.3.0 | × | √ | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 |
---|---|---|---|
× | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
云函数类插件通用教程
使用云函数类插件的前提是:使用HBuilderX 2.9+
特别申明
- 此插件不建议非程序员或者完全看不懂文档的人购买,远程代搭建部署五十元一次(需要提前准备好小程序)
快速上手
- 使用 HBuilderX 导入插件
- 关联 uniCloud 服务空间(创建 uniCloud 服务空间)
- 运行 uniCloud -> database -> db_init.josn(右键:初始化云数据库(包含 Schema 和校验函数))
- 配置 uniCloud -> cloudfunctions -> common 云函数 uni-config-center -> uni-id -> config.json 文件 官方文档
- 修改配置文件需重新右键上传 uni-config-center、uni-id 云函数
- uni-id
"passwordSecret": [{
"version": 1,
"value": "xxxxxxxxxxxxxxxxxxx"
}],
"tokenSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tokenExpiresIn": 259200,
"tokenExpiresThreshold": 600,
"passwordErrorLimit": 6,
"passwordErrorRetryTime": 3600,
"autoSetInviteCode": false,
"forceInviteCode": false,
"bindTokenToDevice": false,
2. 配置微信小程序appid和秘钥
"mp-weixin": {
"oauth": {
"weixin": {
"appid": "xxxxxxxxxxxxxxxxxxx",
"appsecret": "xxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
},
- 运行 uniCloud -> cloudfunctions(右键:上传所有云函数、公共模块及 actions)
- 配置 manifest.json 官方文档
A. 基础配置
B. 微信小程序配置 - 执行 npm install 安装依赖,或者把node_modules文件夹重命名为 node_modules
- 右键 giegie 云函数【上传并运行】用于生成微信 access_token(非必须,只有生成小程序码会用到,也会每小时定时获取)
- 工具栏 -> 运行(R) ->
A. 运行到小程序模拟器(微信开发者工具[体验微信小程序版本]) - 注意点(重要、重要、重要)
A. 小程序中使用 uniCloud 白名单配置。
B. 发布到线上一定要用【发行】后提交到微信平台(没有自动打开微信开发者工具,请看下一节),不要用【运行】 - 图文教程
开启 uniAd 广告,需要发行特定的程序包
1.打包 uniad 包, A.开发环境,运行=》(WIFI)uniAd 包 B.线上环境,发行=》自定义发行=》(WIFI)uniAd 包 2.小程序系统管理》程序配置》配置 uniad 广告 id
一键更新此插件
- 在项目根目录 package.json 右键点击,“从插件市场更新”。
- 特别注意:更新合并时,去掉勾选 uni_modules --》 uni-config --》 uniCloud --》 ... --》 uni-id,以及 manifest.json,防止配置文件被重置,需要重新配置。更新后注意检查其他配置文件。
- 如果出现数据不见了,极有可能是因为你更新版本导致 manifest.json 里的 unicloud appid 被重置,然后你点了重新生成,unicloud 是通过这个 appid 做数据隔离的。
- 每次更新一定要测试功能和数据没问题才上线,最容易出现的就是 unicloud appid 变了导致数据不见了,unicloud appid 改为之前的就行了。
常见问题
1. 为何修改配置文件密码加密 Token 后,无法登录?
A. 修改说明 需新增密码加密 Token version。
B. 修改 passwordSecret 会导致老用户使用密码无法登录,修改 tokenSecret 会导致所有已经下发的 token 失效。
C. 官方详细介绍
2. 为何微信小程序授权登录没反应或登录不了?
A. 确认是否已在配置文件中填写对应的 appid、appsecret。
B. 修改后的配置文件是否已右键重新上传。
3. 运行后提示 Error: Cannot find module 'uni-read-pages'。
A. 需执行 npm install 安装依赖。 需要 nodejs 环境,如果没有就把node_modules文件夹重命名为 node_modules
4. 点击发行没有自动打开微信开发者工具
A. hbuilderx 的 bug,手动打开微信开发者工具后导入 unpackage/dist/build 包,取个名字与开发包做区分。
B.勾选未使用云开发(不要勾选微信云开发)。
二次开发
1. giegie 云函数
.该云函数封装了安全规则和子路由,支持云函数和定时器(不校验安全规则)和 url 方式访问 .子路由代码放在 routers 目录,前端通过 giegie/aaa/bbb 访问云函数 giegie 下 routers 目录子路由 A.package.json 中 cloudfunction-permission 节点用于配置子路由安全规则
"cloudfunction-permission": {
"login":true,
"config": true,
"ad-calc-fencheng": "auth && auth.uid && auth.role.includes('admin')",
"ad-calc-score": true,
"ad-trace": "auth && auth.uid",
"invite_list": "auth && auth.uid",
"qrcode": true,
"withdraw": "auth && auth.uid",
"access_token": true
}
B.package.json 中 cloudfunction-config.triggers 节点用于配置子路由定时器
"cloudfunction-config": {
"memorySize": 256,
"timeout": 10,
"triggers": [
{
"name": "access_token,ad-calc-score",
"desc": "注释:name指定子路由名称,多个用逗号隔开(官方目前triggers数组只支持一个所以用逗号隔开)",
"type": "timer",
"config": "33 33 * * * * *"
}
],
"path": "",
"runtime": "Nodejs8"
},
C.context.currentUser 用于获取当前登录用户 定时器和 url 方式访问没有该属性
let {uid:user_id} = context.currentUser;
2. 前端
.request 统一封装了 http 云函数和云数据库请求 .页面和组件 vue 里面通过 this.$request('请求路径')发起请求 .请求路径定义在 common/request/api_defines 目录
//云数据库使用方式
//api_defines目录下接口定义
user_schema: {
url: 'uni-id-users',
auth: true,
method: 'clouddatabase',
desc: '用户信息',
},
//接口调用
let {total:total3} = await this.$request('user_schema',(collection,database,command)=>{
return collection
.where({
invite_time:command.gt(new Date(new Date().toDateString()).getTime()),
inviter_uid:command.all([this.userInfo.id])
})
.count();
})
//云函数使用方式
//api_defines目录下接口定义
config: {
global: {
url: 'giegie/config',
auth: false,
method: 'cloudfunction',
desc: '加载全局配置',
},
},
//接口调用
let {total:total3} = await this.$request('config.global',{})