Categories
Uncategorized

Uni-Cloud

轮子

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 账号密码登录页面

报错

  1. Error: Invalid uni-id config file
    需要配置config.json:https://doc.dcloud.net.cn/uniCloud/uni-id/summary.html#config
    如果没有uni-id文件夹则新建,配置完之后需要在父级文件夹uni-config-center,右击上传云即可
  2. 没有找到公共模块,记得右键database->上传Schema扩展js的配置

邀请码

搞了半天邀请码,它云代码又不好调试,原来是他原来的代码逻辑影响了,导致一直inviteCode为undefine

  1. 配置云函数里面的common>uni-config-center>uni-id>config.json
  "autoSetInviteCode": true, 
  "forceInviteCode": false, //真或假取决于你,记得删掉备注 
  1. 本地项目的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文件夹,然后重新创建自定义基带后运行就可以了

广告

  1. uniads 是一个聚合广告平台
  2. 需要提前在uniads平台开通相应的广告类型
  3. 再创建自定义的基座,并勾选上刚开通的那些广告
  4. 注意,有些广告形式需要使用到adpid,想激励视频,banner…这个adpid需要到平台中查看
  5. 如果想要测试广告,需要使用标准基座运行,并用测试的adpid,例如激励广告测试adpid=1507000689
  6. 最后如果要打包上线,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

Leave a Reply

Your email address will not be published. Required fields are marked *