Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
c7ad6776
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3172
Star
105
Fork
804
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
93
列表
看板
标记
里程碑
合并请求
67
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
93
Issue
93
列表
看板
标记
里程碑
合并请求
67
合并请求
67
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
c7ad6776
编写于
2月 25, 2022
作者:
D
DCloud_LXH
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into vuepress
上级
0f4535c2
16472b90
变更
12
展开全部
隐藏空白更改
内联
并排
Showing
12 changed file
with
924 addition
and
583 deletion
+924
-583
docs/api/README.md
docs/api/README.md
+181
-181
docs/api/location/map.md
docs/api/location/map.md
+15
-0
docs/collocation/package.md
docs/collocation/package.md
+1
-1
docs/component/map.md
docs/component/map.md
+42
-1
docs/component/uniui/uni-popup.md
docs/component/uniui/uni-popup.md
+317
-317
docs/component/video.md
docs/component/video.md
+2
-2
docs/uniCloud/cf-functions.md
docs/uniCloud/cf-functions.md
+3
-1
docs/uniCloud/cloud-obj.md
docs/uniCloud/cloud-obj.md
+298
-73
docs/uniCloud/jql.md
docs/uniCloud/jql.md
+3
-0
docs/uniCloud/send-sms.md
docs/uniCloud/send-sms.md
+19
-0
docs/uniCloud/uni-id.md
docs/uniCloud/uni-id.md
+22
-7
docs/uniCloud/univerify.md
docs/uniCloud/univerify.md
+21
-0
未找到文件。
docs/api/README.md
浏览文件 @
c7ad6776
此差异已折叠。
点击以展开。
docs/api/location/map.md
浏览文件 @
c7ad6776
...
@@ -49,6 +49,7 @@ mapContext
...
@@ -49,6 +49,7 @@ mapContext
-
nvue没有
`$getAppMap()`
,请使用
`createMapContext`
-
nvue没有
`$getAppMap()`
,请使用
`createMapContext`
-
`uni-app`
中使用原生地图无需提供占位div,得到
`$getAppMap()`
后直接js使用即可。
-
`uni-app`
中使用原生地图无需提供占位div,得到
`$getAppMap()`
后直接js使用即可。
**getCenterLocation 的 OBJECT 参数列表**
**getCenterLocation 的 OBJECT 参数列表**
|参数|类型|必填|说明|
|参数|类型|必填|说明|
...
@@ -185,6 +186,20 @@ mapContext
...
@@ -185,6 +186,20 @@ mapContext
|complete |function | |否 |接口调用结束的回调函数(调用成功、失败都会执行) |
|complete |function | |否 |接口调用结束的回调函数(调用成功、失败都会执行) |
**mapContext (地图服务商差异)**
|属性 |说明 |高德是否支持 |google地图是否支持 |
|:---- |:---- |:---- |:---- |
|setLocMarkerIcon |设置定位点图标,支持网络路径、本地路径、代码包路径 |已支持 |不支持 |
|moveAlong |沿指定路径移动 marker,用于轨迹回放等场景 |已支持(不支持autoRotate属性) |已支持 |
|addCustomLayer |添加个性化图层 |不支持 |不支持 |
|removeVisualLayer |移除可视化图层 |不支持 |不支持 |
|fromScreenLocation |获取屏幕上的点对应的经纬度,坐标原点为地图左上角 |不支持 |不支持 |
|removeCustomLayer |移除个性化图层 |不支持 |不支持 |
|setCenterOffset |设置地图中心点偏移,向后向下为增长,屏幕比例范围(0.25~0.75) |不支持 |不支持 |
|toScreenLocation |获取经纬度对应的屏幕坐标,坐标原点为地图左上角。 |不支持 |不支持 |
**MapContext.on()**
(app-nvue、微信小程序支持)
**MapContext.on()**
(app-nvue、微信小程序支持)
`markerClusterCreate`
`markerClusterCreate`
...
...
docs/collocation/package.md
浏览文件 @
c7ad6776
...
@@ -44,7 +44,7 @@ package.json扩展配置用法:
...
@@ -44,7 +44,7 @@ package.json扩展配置用法:
Tips:
Tips:
-
`UNI_PLATFORM`
仅支持填写
`uni-app`
默认支持的基准平台,目前仅限如下枚举值:
`h5`
、
`mp-weixin`
、
`mp-alipay`
、
`mp-baidu`
、
`mp-toutiao`
、
`mp-qq`
-
`UNI_PLATFORM`
仅支持填写
`uni-app`
默认支持的基准平台,目前仅限如下枚举值:
`h5`
、
`mp-weixin`
、
`mp-alipay`
、
`mp-baidu`
、
`mp-toutiao`
、
`mp-qq`
-
`browser`
仅在
`UNI_PLATFORM`
为
`h5`
时有效,目前仅限如下枚举值:
`chrome`
、
`firefox`
、
`i
d
`
、
`edge`
、
`safari`
、
`hbuilderx`
-
`browser`
仅在
`UNI_PLATFORM`
为
`h5`
时有效,目前仅限如下枚举值:
`chrome`
、
`firefox`
、
`i
e
`
、
`edge`
、
`safari`
、
`hbuilderx`
-
`package.json`
文件中不允许出现注释,否则扩展配置无效
-
`package.json`
文件中不允许出现注释,否则扩展配置无效
-
`vue-cli`
需更新到最新版,HBuilderX需升级到 2.1.6+ 版本
-
`vue-cli`
需更新到最新版,HBuilderX需升级到 2.1.6+ 版本
...
...
docs/component/map.md
浏览文件 @
c7ad6776
...
@@ -237,7 +237,48 @@ export default {
...
@@ -237,7 +237,48 @@ export default {
}
}
```
```
map 组件相关操作的 JS API:
[
uni.createMapContext
](
/api/location/map?id=createmapcontext
)
## 地图服务商差异
### Map 地图组件
|属性 |说明 |高德是否支持 |google地图是否支持 |
|:---- |:---- |:---- |:---- |
|subkey |个性化地图使用的key |不支持 |不支持 |
|show-scale |显示比例尺 |已支持 |不支持 |
|enable-poi |是否展示 POI 点 |已支持 |不支持 |
|labeltap |点击label时触发 |已支持 |Android支持iOS不支持 |
|poitap |点击地图poi点时触发 |已支持 |Android不支持 iOS支持 |
### marker
|属性 |说明 |高德是否支持 |google地图是否支持 |
|:---- |:---- |:---- |:---- |
|label |为标记点旁边增加标签 |已支持 |Android支持 iOS不支持 |
### marker 上的气泡 callout
|属性 |说明 |高德是否支持 |google地图是否支持 |
|:---- |:---- |:---- |:---- |
|display |'BYCLICK':点击显示; 'ALWAYS':常显 |已支持 |Android支持iOS只支持 'BYCLICK' |
### marker 上的自定义气泡 customCallout
|属性 |说明 |高德是否支持 |google地图是否支持 |
|:---- |:---- |:---- |:---- |
|display|'BYCLICK':点击显示; 'ALWAYS':常显 |已支持 |Android支持iOS只支持 'BYCLICK' |
### polyline
|属性 |说明 |高德是否支持 |google地图是否支持 |
|:---- |:---- |:---- |:---- |
|colorList |彩虹线 |已支持 |Android不支持 iOS支持 |
|dottedLine |是否虚线 |已支持 |Android已支持 iOS不支持 |
|arrowLine |带箭头的线 |已支持 |Android不支持 iOS支持 |
|arrowIconPath|更换箭头图标 |已支持 |Android不支持 iOS支持 |
map 组件相关操作的 JS API:
[
uni.createMapContext
](
api/location/map?id=createmapcontext
)
nvue map 更换箭头图标格式参考:
[
https://ask.dcloud.net.cn/article/37901
](
https://ask.dcloud.net.cn/article/37901
)
nvue map 更换箭头图标格式参考:
[
https://ask.dcloud.net.cn/article/37901
](
https://ask.dcloud.net.cn/article/37901
)
**注意事项**
**注意事项**
...
...
docs/component/uniui/uni-popup.md
浏览文件 @
c7ad6776
此差异已折叠。
点击以展开。
docs/component/video.md
浏览文件 @
c7ad6776
...
@@ -31,8 +31,8 @@
...
@@ -31,8 +31,8 @@
|enable-play-gesture|Boolean|false|是否开启播放手势,即双击切换播放/暂停|微信小程序、快手小程序|
|enable-play-gesture|Boolean|false|是否开启播放手势,即双击切换播放/暂停|微信小程序、快手小程序|
|auto-pause-if-navigate|Boolean|true|当跳转到其它小程序页面时,是否自动暂停本页面的视频|微信小程序|
|auto-pause-if-navigate|Boolean|true|当跳转到其它小程序页面时,是否自动暂停本页面的视频|微信小程序|
|auto-pause-if-open-native|Boolean|true|当跳转到其它微信原生页面时,是否自动暂停本页面的视频|微信小程序|
|auto-pause-if-open-native|Boolean|true|当跳转到其它微信原生页面时,是否自动暂停本页面的视频|微信小程序|
|vslide-gesture|Boolean|false|在非全屏模式下,是否开启亮度与音量调节手势(同 page-gesture)|微信小程序、快手小程序|
|vslide-gesture|Boolean|false|在非全屏模式下,是否开启亮度与音量调节手势(同 page-gesture)|微信小程序、
App(3.4.0+)、
快手小程序|
|vslide-gesture-in-fullscreen|Boolean|true|在全屏模式下,是否开启亮度与音量调节手势|微信小程序、快手小程序|
|vslide-gesture-in-fullscreen|Boolean|true|在全屏模式下,是否开启亮度与音量调节手势|微信小程序、
App(3.4.0+)、
快手小程序|
|ad-unit-id|String||视频前贴广告单元ID,更多详情可参考开放能力
[
视频前贴广告
](
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/ad/video-patch-ad.html
)
|微信小程序|
|ad-unit-id|String||视频前贴广告单元ID,更多详情可参考开放能力
[
视频前贴广告
](
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/ad/video-patch-ad.html
)
|微信小程序|
|poster-for-crawler|String||用于给搜索等场景作为视频封面展示,建议使用无播放 icon 的视频封面图,只支持网络地址|微信小程序|
|poster-for-crawler|String||用于给搜索等场景作为视频封面展示,建议使用无播放 icon 的视频封面图,只支持网络地址|微信小程序|
|codec|String|hardware|解码器选择,hardware:硬解码(硬解码可以增加解码算力,提高视频清晰度。少部分老旧硬件可能存在兼容性问题);software:ffmpeg 软解码;|App-Android 3.1.0+|
|codec|String|hardware|解码器选择,hardware:硬解码(硬解码可以增加解码算力,提高视频清晰度。少部分老旧硬件可能存在兼容性问题);software:ffmpeg 软解码;|App-Android 3.1.0+|
...
...
docs/uniCloud/cf-functions.md
浏览文件 @
c7ad6776
...
@@ -459,7 +459,9 @@ uniCloud.callFunction({
...
@@ -459,7 +459,9 @@ uniCloud.callFunction({
## 云函数中调用云函数@callbyfunction
## 云函数中调用云函数@callbyfunction
用法同客户端调用云函数,不支持callback形式。
**云函数本地运行时使用callFunction会调用云端的云函数而不是本地云函数,连接本地云函数调试时云函数内的callFunction会调用本地云函数**
用法同客户端调用云函数,不支持callback形式。
`HBuilderX 3.4.0`
版本之前
**云函数右键本地运行时使用callFunction会调用云端的云函数而不是本地云函数,连接本地云函数调试时云函数内的callFunction会调用本地云函数**
,
`HBuilderX 3.4.0`
及之后的版本
**连接本地云函数或运行本地云函数时,如果在云函数内调用同一服务空间下的云函数会直接调用本地云函数。**
#### 请求参数
#### 请求参数
...
...
docs/uniCloud/cloud-obj.md
浏览文件 @
c7ad6776
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
```
js
```
js
// 传统方式调用云函数-云函数代码
// 传统方式调用云函数-云函数代码
// 云函数名:
user-center
// 云函数名:
todo
// 云函数入口index.js内容如下
// 云函数入口index.js内容如下
'
use strict
'
;
'
use strict
'
;
exports
.
main
=
async
(
event
,
context
)
=>
{
exports
.
main
=
async
(
event
,
context
)
=>
{
...
@@ -19,22 +19,23 @@ exports.main = async (event, context) => {
...
@@ -19,22 +19,23 @@ exports.main = async (event, context) => {
params
params
}
=
event
}
=
event
switch
(
method
)
{
switch
(
method
)
{
case
'
login
'
:
{
case
'
add
'
:
{
cons
t
{
le
t
{
usernam
e
,
titl
e
,
password
content
}
=
params
}
=
params
// 简化演示逻辑,此处不演示token校验
title
=
title
.
trim
()
if
(
!
username
)
{
content
=
content
.
trim
()
if
(
!
title
||
!
content
)
{
return
{
return
{
errCode
:
'
INVALID_
USERNAME
'
,
errCode
:
'
INVALID_
TODO
'
,
errMsg
:
'
用户名不正确
'
errMsg
:
'
TODO标题或内容不可为空
'
}
}
}
}
// ...省略其他逻辑
// ...省略其他逻辑
return
{
return
{
errCode
:
0
,
errCode
:
0
,
errMsg
:
'
登录
成功
'
errMsg
:
'
创建
成功
'
}
}
}
}
}
}
...
@@ -45,15 +46,15 @@ exports.main = async (event, context) => {
...
@@ -45,15 +46,15 @@ exports.main = async (event, context) => {
};
};
// 传统方式调用云函数-客户端代码
// 传统方式调用云函数-客户端代码
async
function
login
()
{
async
function
addToDo
()
{
try
{
try
{
const
res
=
uniCloud
.
callFunction
({
const
res
=
uniCloud
.
callFunction
({
name
:
'
user-center
'
,
name
:
'
todo
'
,
data
:
{
data
:
{
method
:
'
login
'
,
method
:
'
add
'
,
params
:
{
params
:
{
username
:
'
dc
'
,
title
:
'
title demo
'
,
password
:
'
123456
'
content
:
'
content demo
'
}
}
}
}
})
})
...
@@ -63,18 +64,18 @@ async function login () {
...
@@ -63,18 +64,18 @@ async function login () {
}
=
res
.
result
}
=
res
.
result
if
(
errCode
)
{
if
(
errCode
)
{
uni
.
showModal
({
uni
.
showModal
({
title
:
'
登录
失败
'
,
title
:
'
创建
失败
'
,
content
:
errMsg
,
content
:
errMsg
,
showCancel
:
false
showCancel
:
false
})
})
return
return
}
}
uni
.
showToast
({
uni
.
showToast
({
title
:
'
登录
成功
'
title
:
'
创建
成功
'
})
})
}
catch
(
e
)
{
}
catch
(
e
)
{
uni
.
showModal
({
uni
.
showModal
({
title
:
'
登录
失败
'
,
title
:
'
创建
失败
'
,
content
:
e
.
message
,
content
:
e
.
message
,
showCancel
:
false
showCancel
:
false
})
})
...
@@ -86,40 +87,42 @@ async function login () {
...
@@ -86,40 +87,42 @@ async function login () {
```
js
```
js
// 使用云对象的写法-云对象代码
// 使用云对象的写法-云对象代码
// 云对象名:
user-center
// 云对象名:
todo
// 云对象入口index.obj.js内容如下
// 云对象入口index.obj.js内容如下
module
.
exports
=
{
module
.
exports
=
{
login
(
username
,
password
)
{
add
(
title
,
content
)
{
if
(
!
username
)
{
title
=
title
.
trim
()
content
=
content
.
trim
()
if
(
!
title
||
!
content
)
{
return
{
return
{
errCode
:
'
INVALID_
USERNAME
'
,
errCode
:
'
INVALID_
TODO
'
,
errMsg
:
'
用户名不正确
'
errMsg
:
'
TODO标题或内容不可为空
'
}
}
}
}
// ...
登录
逻辑
// ...
其他
逻辑
return
{
return
{
errCode
:
0
,
errCode
:
0
,
errMsg
:
'
登录
成功
'
errMsg
:
'
创建
成功
'
}
}
}
}
}
}
// 使用云对象的写法-客户端代码
// 使用云对象的写法-客户端代码
const
userCenter
=
uniCloud
.
importObject
(
'
user-center
'
)
const
todo
=
uniCloud
.
importObject
(
'
todo
'
)
async
function
login
()
{
async
function
addTodo
()
{
try
{
try
{
const
res
=
await
userCenter
.
login
(
'
dc
'
,
'
123456
'
)
const
res
=
await
todo
.
add
(
'
title demo
'
,
'
content demo
'
)
uni
.
showToast
({
uni
.
showToast
({
title
:
'
登录
成功
'
title
:
'
创建
成功
'
})
})
}
catch
(
e
)
{
}
catch
(
e
)
{
// 此形式响应符合uniCloud响应体规范中的错误响应,自动抛出此错误
// 此形式响应符合uniCloud响应体规范中的错误响应,自动抛出此错误
// {
// {
// errCode: 'INVALID_
USERNAME
',
// errCode: 'INVALID_
TODO
',
// errMsg: '
用户名不正确
'
// errMsg: '
TODO标题或内容不可为空
'
// }
// }
uni
.
showModal
({
uni
.
showModal
({
title
:
'
登录
失败
'
,
title
:
'
创建
失败
'
,
content
:
e
.
errMsg
,
content
:
e
.
errMsg
,
showCancel
:
false
showCancel
:
false
})
})
...
@@ -129,59 +132,233 @@ async function login () {
...
@@ -129,59 +132,233 @@ async function login () {
可以看到大量的业务无关代码被简化掉,开发效率UP。此外通过
`ObjectName.MethodName`
的方式调用云函数和云端写法完全一致,心智负担大幅减小。请阅读以下内容深入了解云对象
可以看到大量的业务无关代码被简化掉,开发效率UP。此外通过
`ObjectName.MethodName`
的方式调用云函数和云端写法完全一致,心智负担大幅减小。请阅读以下内容深入了解云对象
##
规范
##
快速上手
云对象和云函数都在cloudfunctions目录下,但是不同于云函数,云对象的入口为
`index.obj.js`
,而云函数则是
`index.js`
。
**为正确区分两者uniCloud做出了限制,云函数内不可存在index.obj.js,云对象内也不可存在index.js。**
一个标准的云对象入口应导出一个对象,如下:
### 创建云对象
对象内每个键值对是一个处理方法
和创建云函数一样,在
`cloudfunctions`
目录右键即可输入云对象名称创建云对象,此处以云对象todo为例,创建的云对象包含一个
`index.obj.js`
。内容如下
```
js
```
js
//
user-center
/index.obj.js
//
cloudfunctions/todo
/index.obj.js
module
.
exports
=
{
module
.
exports
=
{
login
:
async
function
(
username
,
password
)
{
console
.
log
(
username
,
password
)
}
// login方法
}
}
```
```
云对象也可以引用公共模块或者npm上的包,引用方式和云函数完全一致
。
默认云对象模板是不包含任何方法的,我们为此对象添加一个add方法作为示例
。
### 客户端调用@call-by-client
```
js
// cloudfunctions/todo/index.obj.js
module
.
exports
=
{
add
:
function
(
title
=
''
,
content
=
''
)
{
title
=
title
.
trim
()
content
=
content
.
trim
()
if
(
!
title
||
!
content
)
{
return
{
errCode
:
'
INVALID_TODO
'
,
errMsg
:
'
TODO标题或内容不可为空
'
}
}
// ...其他逻辑
return
{
errCode
:
0
,
errMsg
:
'
创建成功
'
}
}
}
```
客户端通过
`uniCloud.importObject`
方法获取云对象的实例。用法如下
至此云对象todo已经有了一个可以访问的方法了。接下来看如何使用客户端调用此云对象内的方法
### 客户端调用
客户端通过
`uniCloud.importObject`
方法获取云对象的实例,并可以通过此实例调用云对象内的方法。用法如下
```
js
```
js
const
userCenter
=
uniCloud
.
importObject
(
'
user-center
'
)
const
todo
=
uniCloud
.
importObject
(
'
todo
'
)
const
res
=
await
userCenter
.
login
(
'
dc
'
,
'
123456
'
)
// 传入参数 username 和 password,参数和云对象内的方法完全一致
const
res
=
await
todo
.
add
(
'
title demo
'
,
'
content demo
'
)
```
```
##
# 云函数或云对象内调用@call-by-cloud
##
云对象的API@api
云函数或云对象内也可以调用同一服务空间内的云对象,用法和客户端调用云对象一致
云对象的方法内可以通过this上的一些接口获取一些信息
### 获取客户端信息@get-client-info
**接口形式**
`this.getClientInfo()`
**示例:**
```
js
```
js
const
userCenter
=
uniCloud
.
importObject
(
'
user-center
'
)
module
.
exports
=
{
const
res
=
await
userCenter
.
login
(
'
dc
'
,
'
123456
'
)
// 传入参数 username 和 password,参数和云对象内的方法完全一致
add
:
function
()
{
const
clientInfo
=
this
.
getClientInfo
()
// clientInfo = {
// os,
// appId,
// locale,
// clientIP,
// userAgent,
// platform,
// deviceId,
// uniIdToken
// }
}
}
```
```
### 跨服务空间调用云对象@call-by-cloud-cross-space
**返回值**
云端或者客户端均有uniCloud.init方法可以获取其他服务空间的uniCloud实例,使用此实例的importObject可以调用其他服务空间的云对象,参考:
[](
uniCloud/concepts/space.md?id=multi-space
)
|参数名 |类型 |必备 |说明 |
|-- |-- |-- |-- |
|os |string |是 |客户端系统 |
|appId |string |是 |客户端DCloud AppId |
|locale |string |是 |客户端语言 |
|clientIP |string |是 |客户端ip |
|userAgent |string |是 |客户端ua |
|platform |string |是 |客户端平台,app,mp-weixin等 |
|deviceId |string |是 |客户端deviceId,目前同getSystemInfo内的deviceId|
|uniIdToken |string |是 |客户端用户token |
客户端无论腾讯阿里均支持。云端
`uniCloud.init`
方法仅腾讯云支持,且仅能获取同账号下的腾讯云服务空间的uniCloud实例。
**注意**
**示例代码**
-
与云函数内获取客户端platform稍有不同,云函数未拉齐vue2、vue3版本app平台的platform值,vue2为
`app-plus`
,vue3为
`app`
。云对象无论客户端是vue2还是vue3,在app平台获取的platform均为
`app`
。这一点在使用uni-id时需要特别注意,详情见:
[
uni-id文档 preferedAppPlatform
](
uniCloud/uni-id.md?id=prefered-app-platform
)
### 获取云端信息@get-cloud-info
**接口形式**
`this.getCloudInfo()`
**示例**
```
js
```
js
const
mycloud
=
uniCloud
.
init
({
module
.
exports
=
{
provider
:
'
tencent
'
,
add
:
function
(){
spaceId
:
'
xxx
'
const
cloudInfo
=
this
.
getCloudInfo
()
})
// cloudInfo = {
const
userCenter
=
mycloud
.
importObject
(
'
user-center
'
)
// provider,
const
loginRes
=
await
mycloud
.
login
(
'
dc
'
,
'
123456
'
)
// spaceId
// }
}
}
```
**返回值**
|参数名 |类型 |必备 |说明 |
|-- |-- |-- |-- |
|provider |string |是 |服务空间供应商 |
|spaceId |string |是 |服务空间Id |
### 获取客户端token@get-uni-id-token
**接口形式**
`this.getUniIdToken()`
**示例**
```
js
module
.
exports
=
{
add
:
function
(){
const
token
=
this
.
getUniIdToken
()
}
}
```
```
### 云对象的返回值@return-value
### 获取当前调用的方法名@get-method-name
**接口形式**
`this.getMethodName()`
**示例**
```
js
module
.
exports
=
{
_before
:
function
()
{
// _before的用法请看后续章节
const
methodName
=
this
.
getMethodName
()
// add
}
}
```
### 获取当前参数列表@get-params
**接口形式**
`this.getParams()`
**示例**
```
js
module
.
exports
=
{
_before
:
function
()
{
// _before的用法请看后续章节
const
params
=
this
.
getParams
()
// ['title demo', 'content demo']
}
}
```
## 预处理与后处理@before-and-after
### 预处理 _before@before
云对象内可以创建一个特殊的方法_after用来在调用方法之前进行一些额外的操作
请看以下示例:
```
js
// todo/index.obj.js
module
.
exports
=
{
_before
:
function
(){
const
methodName
=
this
.
getMethodName
()
if
(
methodName
===
'
add
'
&&
!
this
.
getUniIdToken
())
{
throw
new
Error
(
'
token不存在
'
)
}
},
add
:
function
(
title
=
''
,
content
=
''
)
{
return
{
errCode
:
0
,
errMsg
:
'
创建成功
'
}
}
}
```
### 后处理 _after@after
云对象内可以创建一个特殊的方法_after用来处理本次调用方法的返回结果或者抛出的错误
请看以下示例:
```
js
// todo/index.obj.js
module
.
exports
=
{
_before
:
function
(){
this
.
startTime
=
Date
.
now
()
// 在before内记录开始时间并在this上挂载,以供后续流程使用
},
add
:
function
(
title
=
''
,
content
=
''
)
{
if
(
title
===
'
abc
'
)
{
throw
new
Error
(
'
abc不是一个合法的todo标题
'
)
}
return
{
errCode
:
0
,
errMsg
:
'
创建成功
'
}
},
_after
(
error
,
result
)
{
if
(
error
)
{
throw
error
// 如果方法抛出错误,也直接抛出不处理
}
result
.
timeCost
=
Date
.
now
()
-
this
.
startTime
return
result
}
}
```
## 云对象的返回值@return-value
客户端拿到云对象的响应结果后,会自动进行结果的处理。
客户端拿到云对象的响应结果后,会自动进行结果的处理。
...
@@ -201,40 +378,88 @@ const loginRes = await mycloud.login('dc', '123456')
...
@@ -201,40 +378,88 @@ const loginRes = await mycloud.login('dc', '123456')
详见以下示例:
详见以下示例:
```
js
```
js
//
user-center
/index.obj.js
//
todo
/index.obj.js
module
.
exports
=
{
module
.
exports
=
{
login
:
async
function
(
username
,
password
)
{
add
:
async
function
(
title
=
''
,
content
=
''
)
{
if
(
!
username
)
{
title
=
title
.
trim
()
content
=
content
.
trim
()
if
(
!
title
||
!
content
)
{
return
{
return
{
errCode
:
'
INVALID_
USERNAME
'
,
errCode
:
'
INVALID_
TODO
'
,
errMsg
:
'
登录失败
'
errMsg
:
'
TODO标题或内容不可为空
'
}
}
}
}
// ...其他逻辑
return
{
return
{
errCode
:
0
,
errCode
:
0
,
errMsg
:
'
登录
成功
'
errMsg
:
'
创建
成功
'
}
}
}
}
}
}
// 客户端代码
// 客户端代码
const
userCenter
=
uniCloud
.
importObject
(
'
user-center
'
)
const
todo
=
uniCloud
.
importObject
(
'
todo
'
)
try
{
try
{
// 不传
username
,云函数返回错误的响应
// 不传
title、content
,云函数返回错误的响应
await
userCenter
.
login
()
await
todo
.
add
()
}
catch
(
e
)
{
}
catch
(
e
)
{
// e.errCode === 'INVALID_
USERNAME
'
// e.errCode === 'INVALID_
TODO
'
// e.errMsg === '
登录失败
'
// e.errMsg === '
TODO标题或内容不可为空
'
// e.detail === {errCode: 'INVALID_
USERNAME',errMsg: '登录失败
'}
// e.detail === {errCode: 'INVALID_
TODO',errMsg: 'TODO标题或内容不可为空
'}
// e.requestId === 'xxxx'
// e.requestId === 'xxxx'
}
}
try
{
try
{
const
res
=
await
userCenter
.
login
(
'
dc
'
,
'
123456
'
)
const
res
=
await
todo
.
add
(
'
title demo
'
,
'
content demo
'
)
// res = {errCode: 0,errMsg: '
更新
成功'}
// res = {errCode: 0,errMsg: '
创建
成功'}
}
catch
(
e
)
{}
}
catch
(
e
)
{}
```
```
## 调用云对象
### 客户端调用@call-by-client
客户端通过
`uniCloud.importObject`
方法获取云对象的实例。用法如下
```
js
const
todo
=
uniCloud
.
importObject
(
'
todo
'
)
const
res
=
await
todo
.
add
(
'
title demo
'
,
'
content demo
'
)
```
### 云函数或云对象内调用@call-by-cloud
云函数或云对象内也可以调用同一服务空间内的云对象,用法和客户端调用云对象一致
```
js
const
todo
=
uniCloud
.
importObject
(
'
todo
'
)
const
res
=
await
todo
.
add
(
'
title demo
'
,
'
content demo
'
)
```
### 跨服务空间调用云对象@call-by-cloud-cross-space
云端或者客户端均有uniCloud.init方法可以获取其他服务空间的uniCloud实例,使用此实例的importObject可以调用其他服务空间的云对象,参考:
[](
uniCloud/concepts/space.md?id=multi-space
)
客户端无论腾讯阿里均支持。云端
`uniCloud.init`
方法仅腾讯云支持,且仅能获取同账号下的腾讯云服务空间的uniCloud实例。
**示例代码**
```
js
const
mycloud
=
uniCloud
.
init
({
provider
:
'
tencent
'
,
spaceId
:
'
xxx
'
})
const
todo
=
mycloud
.
importObject
(
'
todo
'
)
const
res
=
await
todo
.
add
(
'
title demo
'
,
'
content demo
'
)
```
## 注意事项
-
云对象和云函数都在cloudfunctions目录下,但是不同于云函数,云对象的入口为
`index.obj.js`
,而云函数则是
`index.js`
。
**为正确区分两者uniCloud做出了限制,云函数内不可存在index.obj.js,云对象内也不可存在index.js。**
-
所有
`_`
开头的方法都是私有方法,客户端不可访问
-
云对象也可以引用公共模块或者npm上的包,引用方式和云函数完全一致。
## 本地运行@run-local
## 本地运行@run-local
云对象无法直接本地运行,可以通过其他云函数调用本地云对象(在调用云对象的云函数右键本地运行),或者客户端调用本地云对象的方式来实现云对象的本地运行。
云对象无法直接本地运行,可以通过其他云函数调用本地云对象(在调用云对象的云函数右键本地运行),或者客户端调用本地云对象的方式来实现云对象的本地运行。
\ No newline at end of file
docs/uniCloud/jql.md
浏览文件 @
c7ad6776
...
@@ -695,6 +695,9 @@ limit
...
@@ -695,6 +695,9 @@ limit
foreignKey
// foreignKey自 HBuilderX 3.3.7版本支持
foreignKey
// foreignKey自 HBuilderX 3.3.7版本支持
where
where
field
// 关于field的使用限制见下方说明
field
// 关于field的使用限制见下方说明
groupBy
// HBuilderX 3.4.0起支持
groupField
// HBuilderX 3.4.0起支持
distinct
// HBuilderX 3.4.0起支持
orderBy
orderBy
skip
skip
limit
limit
...
...
docs/uniCloud/send-sms.md
浏览文件 @
c7ad6776
...
@@ -7,6 +7,8 @@ keyword: 短信,sms
...
@@ -7,6 +7,8 @@ keyword: 短信,sms
> 自`HBuilderX 3.3.0`起,本接口支持传入phoneList参数批量发送短信,其他参数均于发送单条短信相同
> 自`HBuilderX 3.3.0`起,本接口支持传入phoneList参数批量发送短信,其他参数均于发送单条短信相同
> 自`HBuilderX 3.4.0`起云函数需启用uni-cloud-sms之后才可以调用sendSms接口,详细说明见:[云函数使用短信扩展库](#extension)
自HBuilderX 2.8.1起,uniCloud内置了短信发送API。给开发者提供更方便、更便宜的短信发送能力。
自HBuilderX 2.8.1起,uniCloud内置了短信发送API。给开发者提供更方便、更便宜的短信发送能力。
该服务类似小程序的模板消息,在一个固定模板格式的文字里自定义某些字段,而不是所有文字都可以随便写。
该服务类似小程序的模板消息,在一个固定模板格式的文字里自定义某些字段,而不是所有文字都可以随便写。
...
@@ -36,6 +38,23 @@ keyword: 短信,sms
...
@@ -36,6 +38,23 @@ keyword: 短信,sms
-
如果使用uni-id发送短信,请参考
[
uni-id发送短信验证码
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=sendsmscode
)
-
如果使用uni-id发送短信,请参考
[
uni-id发送短信验证码
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=sendsmscode
)
#### 云函数使用短信扩展库@extension
自HBuilderX 3.4.0起,短信相关功能移至扩展库
`uni-cloud-sms`
内。在一段时间内无论开发者是否使用扩展库云函数都可以正常使用
`uniCloud.sendSms`
。预计于2022年3月初发布的HBuilderX内强制使用扩展库,即使用在此时间点后发布的HBuilderX上传云函数时如果没有指定使用
`uni-cloud-sms`
扩展库的云函数将无法调用uniCloud.sendSms接口。
关于扩展库的说明见:
[
云函数扩展库
](
uniCloud/cf-functions.md?id=extension
)
在云函数的package.json内添加
`uni-cloud-sms`
的引用即可为云函数启用此扩展,无需做其他调整,完整的package.json示例如下:
```
js
{
"
name
"
:
"
uni-sms
"
,
"
extensions
"
:
{
"
uni-cloud-sms
"
:
{}
// 启用uni-cloud-jql扩展,值为空对象即可
}
}
```
#### 参数templateId说明@smstemplate
#### 参数templateId说明@smstemplate
按照国家法律和运营商要求,每个要发送短信的应用,需要备案其短信模板,并且经过运营商的审核。通过审核的模板,会得到一个templateId。
按照国家法律和运营商要求,每个要发送短信的应用,需要备案其短信模板,并且经过运营商的审核。通过审核的模板,会得到一个templateId。
...
...
docs/uniCloud/uni-id.md
浏览文件 @
c7ad6776
...
@@ -467,15 +467,15 @@ function hasPermission(token, permission) {
...
@@ -467,15 +467,15 @@ function hasPermission(token, permission) {
用法:
`uniID.createInstance(Object CreateInstanceParams);`
用法:
`uniID.createInstance(Object CreateInstanceParams);`
CreateInstanceParams内可以传入云函数context
CreateInstanceParams内可以传入云函数context
,自
`uni-id 3.3.13`
起,也可以传入clientInfo参数,作用和context类似。方便在云对象内获取clientInfo后直接传入,
[
什么是云对象?
](
uniCloud/cloud-obj.md
)
。
```
js
```
js
// 云函数代码
// 云函数代码
,传入context
const
uniID
=
require
(
'
uni-id
'
)
const
uniID
=
require
(
'
uni-id
'
)
exports
.
main
=
async
function
(
event
,
context
)
{
exports
.
main
=
async
function
(
event
,
context
)
{
context
.
APPID
=
'
__UNI__xxxxxxx
'
// 替换为当前客户端的APPID,通过客户端callFunction请求的场景可以使用context.APPID获取
context
.
APPID
=
'
__UNI__xxxxxxx
'
// 替换为当前客户端的APPID,通过客户端callFunction请求的场景可以使用context.APPID获取
context
.
PLATFORM
=
'
h5
'
// 替换为当前客户端的平台类型,通过客户端callFunction请求的场景可以使用context.PLATFORM获取
context
.
PLATFORM
=
'
h5
'
// 替换为当前客户端的平台类型,通过客户端callFunction请求的场景可以使用context.PLATFORM获取
context
.
LOCALE
=
'
zh-Hans
'
// 替换为当前客户端的语言代码,通过客户端callFunction请求的场景可以使用context.LOCALE获取
context
.
LOCALE
=
'
zh-Hans
'
// 替换为当前客户端的语言代码,通过客户端callFunction请求的场景可以使用context.LOCALE获取
const
uniIDIns
=
uniID
.
createInstance
({
// 创建uni-id实例,其上方法同uniID
const
uniIDIns
=
uniID
.
createInstance
({
// 创建uni-id实例,其上方法同uniID
context
:
context
,
context
:
context
,
// config: {} // 完整uni-id配置信息,使用config.json进行配置时无需传此参数
// config: {} // 完整uni-id配置信息,使用config.json进行配置时无需传此参数
...
@@ -484,11 +484,26 @@ exports.main = async function(event,context) {
...
@@ -484,11 +484,26 @@ exports.main = async function(event,context) {
if
(
payload
.
code
)
{
if
(
payload
.
code
)
{
return
payload
return
payload
}
}
const
res
=
await
uniIDIns
.
updateUser
({
const
res
=
await
uniIDIns
.
updateUser
({
uid
:
payload
.
uid
,
uid
:
payload
.
uid
,
nickname
:
'
user nickname
'
nickname
:
'
user nickname
'
})
})
return
res
return
res
}
// 云对象代码传入clientInfo
const
uniID
=
require
(
'
uni-id
'
)
module
.
exports
=
{
_before
()
{
const
clientInfo
=
this
.
getClientInfo
()
this
.
uniID
=
uniID
.
createInstance
({
// 创建uni-id实例,其上方法同uniID
clientInfo
})
},
login
()
{
// ...
// this.uniID.login()
}
}
}
```
```
...
...
docs/uniCloud/univerify.md
浏览文件 @
c7ad6776
...
@@ -9,12 +9,33 @@ univerify 是DCloud 推出的一键登录产品,通过与运营商深度合作
...
@@ -9,12 +9,33 @@ univerify 是DCloud 推出的一键登录产品,通过与运营商深度合作
univerify是替代短信验证登录的下一代登录验证方式,能消除现有短信验证模式等待时间长、操作繁琐和容易泄露的痛点。
univerify是替代短信验证登录的下一代登录验证方式,能消除现有短信验证模式等待时间长、操作繁琐和容易泄露的痛点。
## 重要调整
### 云函数使用一键登录扩展库@extension
自
`HBuilderX 3.4.0`
起,一键登录相关功能移至扩展库
`uni-cloud-verify`
内。在一段时间内无论开发者是否使用扩展库云函数都可以正常使用
`uniCloud.getPhoneNumber`
。预计于2022年3月初发布的HBuilderX内强制使用扩展库,即使用在此时间点后发布的HBuilderX上传云函数时如果没有指定使用
`uni-cloud-verify`
扩展库的云函数将无法调用uniCloud.getPhoneNumber接口。
关于扩展库的说明见:
[
云函数扩展库
](
uniCloud/cf-functions.md?id=extension
)
在云函数的package.json内添加
`uni-cloud-verify`
的引用即可为云函数启用此扩展,无需做其他调整,完整的package.json示例如下:
```
js
{
"
name
"
:
"
univerify
"
,
"
extensions
"
:
{
"
uni-cloud-verify
"
:
{}
// 启用uni-cloud-jql扩展,值为空对象即可
}
}
```
## 客户端@client
## 客户端@client
客户端如何使用一键登录请参考此文档:
[
univerify 使用指南
](
/univerify
)
客户端如何使用一键登录请参考此文档:
[
univerify 使用指南
](
/univerify
)
## 云函数@cloud
## 云函数@cloud
> 自`HBuilderX 3.4.0`起云函数需启用uni-cloud-verify之后才可以调用getPhoneNumber接口,详细说明见:[云函数使用一键登录扩展库](#extension)
客户端调用一键登录接口会获取如下结果
客户端调用一键登录接口会获取如下结果
```
js
```
js
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录