轮子
Uni-Cloud提供了非常多的通用轮子
详见:轮子
条件编译
写法:
#ifdef APP-PLUS
需条件编译的代码 仅出现在 App 平台下的代码
#endif
#ifndef H5
需条件编译的代码 除了 H5 平台,其它平台均存在的代码
#endif
#ifdef H5 || MP-WEIXIN
需条件编译的代码 在 H5 平台或微信小程序平台存在的代码(这里只有||,不可能出现&&,因为没有交集)
#endif
值 平台
APP-PLUS App
APP-PLUS-NVUE App nvue
H5 H5
MP-WEIXIN 微信小程序
MP-ALIPAY 支付宝小程序
MP-BAIDU 百度小程序
MP-TOUTIAO 字节跳动小程序
MP-QQ QQ小程序
MP-360 360小程序
MP 微信小程序/支付宝小程序/百度小程序/字节跳动小程序/QQ小程序/360小程序
quickapp-webview 快应用通用(包含联盟、华为)
quickapp-webview-union 快应用联盟
quickapp-webview-huawei 快应用华为
路由
和Vue不同,路由不是写到router里面,而是在pages.json中
uni-app 通过 pages 节点配置应用由哪些页面组成,pages 节点接收一个数组,数组每个项都是一个对象,其属性值如下:
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
path | String | 配置页面路径 | |
style | Object | 配置页面窗口表现,配置项参考下方 pageStyle | |
needLogin | Boolean | false | 是否需要登录才可访问 |
Tips:
- pages节点的第一项为应用入口页(即首页)
- 应用中新增/减少页面,都需要对 pages 数组进行修改
- 文件名不需要写后缀,框架会自动寻找路径下的页面资源
Uni-id
通过Uni-id,官方已经实现了:注册、登录、发送短信验证码、密码加密保存、修改密码、忘记密码、头像管理、token管理、rbac权限角色体系、页面访问权限路由控制、用户邀请裂变、用户签到、日志记录、账户防刷等功能
云对象
云对象和云函数不同的就是,云对象是云函数的升级版
注意! 云代码有本地和云端两个,开发测试时是在本地模拟的,上线需要上传到云端才能调用
云对象引用第三方库
在云对象目录下修改package.json的dependencies
Uni-Cloud 插件市场
数据库
Uni-Cloud使用的数据库和关系型数据库不同,使用的是JSON格式的结构
Uni | Mysql |
---|---|
数组 | 数据表 |
数组的每一项 | 单个记录 |
key | 字段 |
根据表结构自动生成增删改前端代码
详见:schema2code
schema直接在unicloud-db中渲染控件
"nation_china":{
"bsonType":"string", //这个数据项的数据类型
"title":"民族", //unicloud-db会根据title值来填写label
"enum":{
"collection":"nation_db", //直接引入另一个数据库中的数据
"field": "name as text, _id as value" //指定显示的字段
},
"componentForEdit":{
"name":"uni-data-picker" //指定渲染的UI控件类型
},
"enumType":"tree", //如果选了这个则渲染成树形选择控件,就像选择地址一样,
"pattern":"正则表达式",
"trim":"both", //删除收尾空格
"defaultValue":"汉族" //这个默认值只会在使用JQL方式操作数据库的时候生效,使用db.collection这种是不会生效的,具体查看JQL语法
}
componentForEdit的name类型
- uni-data-picker
- uni-data-checkbox
- 复选框:
"name":"xxx", "props":{ "multiple":true }
- 复选框:
- 其余组件
多表查询
vue代码中要修改,新增表
<unicloud-db v-slot:default="{data, loading, error, options}" collection="db1,db2" field="nation_china{name}">
//这里的field就是schema中的field的数据项
<view v-if="error">{{error.message}}</view>
<view v-else>
{{data.nation_china}}
</view>
</unicloud-db>
schema中修改:
"nation_china":{
"bsonType":"string",
"title":"民族",
"enum":{
"collection":"db2", //直接引入另一个数据库中的数据
"field": "name as text, _id as value" //指定显示的字段
},
"foreignKey":"db2._id", //编辑外键
"componentForEdit":{
"name":"uni-data-picker"
}
}
Uni-Cloud 云数据库
- 快捷键
udb
生成下方代码,直接操作数据库
<unicloud-db v-slot:default="{data, loading, error, options}" collection="">
<view v-if="error">{{error.message}}</view>
<view v-else>{{data}} <view>
</unicloud-db>
Uni-starter 代码结构
https://uniapp.dcloud.net.cn/tutorial/project.html
路径 | 含义 |
---|---|
pages.json | 路由管理(登录路由在uniIdRouter字段配置) |
uni_modules/uni-id-pages/components/uni-id-pages-fab-login/uni-id-pages-fab-login.vue | 多方式登录页面 |
uni_modules/uni-id-pages/pages/login/login-withpwd.vue | 账号密码登录页面 |
报错
- Error: Invalid uni-id config file
需要配置config.json:https://doc.dcloud.net.cn/uniCloud/uni-id/summary.html#config
如果没有uni-id文件夹则新建,配置完之后需要在父级文件夹uni-config-center,右击上传云即可 - 没有找到公共模块,记得右键database->上传Schema扩展js的配置
邀请码
搞了半天邀请码,它云代码又不好调试,原来是他原来的代码逻辑影响了,导致一直inviteCode为undefine
- 配置云函数里面的common>uni-config-center>uni-id>config.json
"autoSetInviteCode": true,
"forceInviteCode": false, //真或假取决于你,记得删掉备注
- 本地项目的common>appInit.js中
if(objectName == "uni-id-co" && (methodName.includes('loginBy') || ['login','registerUser'].includes(methodName) )){
console.log('执行登录相关云对象');
//把下面这段回调代码全部注释掉,这里吧inviteCode置为undefine了
params[0].inviteCode = await new Promise((callBack) => {
....
}
}
URL化云对象
URL化指的是,让云对象能够被外界程序通过HTTP请求调用
云对象文档里写了能够通过params入参,也就是传参到函数,但是post请求中将数据写入到params字段并不优雅
研究一番后发现,可以按照下面代码所示:
//先申明一个全局变量
const httpInfo
//再到module.exports中写入:
_before: function() {
// 前置处理器,可以在这里进行权限控制或初始化操作
httpInfo = this.getHttpInfo() //存储URL化的请求数据
},
test:function(pam1,pam2){
// 处理URL化的Post请求
if(httpInfo&&httpInfo.path=="/test")
{
const body=JSON.parse(httpInfo.body)
pam1=body.pam1;
pam2=body.pam2;
}
}
打包
教程: https://blog.csdn.net/PIOnly/article/details/125196697
1.SDK https://nativesupport.dcloud.net.cn/AppDocs/download/android.html
2.android studio 离线打包 提示”未添加ad模块” : https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/uniad.html
手机打开提示手机SDK的基带版本和PC的不一样
需要再项目根目录,删掉unpackage文件夹,然后重新创建自定义基带后运行就可以了
广告
- uniads 是一个聚合广告平台
- 需要提前在uniads平台开通相应的广告类型
- 再创建自定义的基座,并勾选上刚开通的那些广告
- 注意,有些广告形式需要使用到adpid,想激励视频,banner…这个adpid需要到平台中查看
- 如果想要测试广告,需要使用标准基座运行,并用测试的adpid,例如激励广告测试adpid=1507000689
- 最后如果要打包上线,adpid需要使用正式的,并且离线打包需要在android studio中配置对应的SDK,可以参考:https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/uniad.html
CDN存储和流量扩展方案
https://ask.dcloud.net.cn/question/181830
内置存储和扩展存储是互相独立的,所以代码要重构
但是也可以做到部分资源上传到内置,另外上传到扩展中
具体操作看文档:https://doc.dcloud.net.cn/uniCloud/ext-storage/dev.html