提交 c7ad6776 编写于 作者: D DCloud_LXH

Merge branch 'master' into vuepress

此差异已折叠。
......@@ -49,6 +49,7 @@ mapContext
- nvue没有`$getAppMap()`,请使用`createMapContext`
- `uni-app`中使用原生地图无需提供占位div,得到`$getAppMap()`后直接js使用即可。
**getCenterLocation 的 OBJECT 参数列表**
|参数|类型|必填|说明|
......@@ -185,6 +186,20 @@ mapContext
|complete |function | |否 |接口调用结束的回调函数(调用成功、失败都会执行) |
**mapContext (地图服务商差异)**
|属性 |说明 |高德是否支持 |google地图是否支持 |
|:---- |:---- |:---- |:---- |
|setLocMarkerIcon |设置定位点图标,支持网络路径、本地路径、代码包路径 |已支持 |不支持 |
|moveAlong |沿指定路径移动 marker,用于轨迹回放等场景 |已支持(不支持autoRotate属性) |已支持 |
|addCustomLayer |添加个性化图层 |不支持 |不支持 |
|removeVisualLayer |移除可视化图层 |不支持 |不支持 |
|fromScreenLocation |获取屏幕上的点对应的经纬度,坐标原点为地图左上角 |不支持 |不支持 |
|removeCustomLayer |移除个性化图层 |不支持 |不支持 |
|setCenterOffset |设置地图中心点偏移,向后向下为增长,屏幕比例范围(0.25~0.75) |不支持 |不支持 |
|toScreenLocation |获取经纬度对应的屏幕坐标,坐标原点为地图左上角。 |不支持 |不支持 |
**MapContext.on()** (app-nvue、微信小程序支持)
`markerClusterCreate`
......
......@@ -44,7 +44,7 @@ package.json扩展配置用法:
Tips:
- `UNI_PLATFORM`仅支持填写`uni-app`默认支持的基准平台,目前仅限如下枚举值:`h5``mp-weixin``mp-alipay``mp-baidu``mp-toutiao``mp-qq`
- `browser` 仅在`UNI_PLATFORM``h5`时有效,目前仅限如下枚举值:`chrome``firefox``id``edge``safari``hbuilderx`
- `browser` 仅在`UNI_PLATFORM``h5`时有效,目前仅限如下枚举值:`chrome``firefox``ie``edge``safari``hbuilderx`
- `package.json`文件中不允许出现注释,否则扩展配置无效
- `vue-cli`需更新到最新版,HBuilderX需升级到 2.1.6+ 版本
......
......@@ -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)
**注意事项**
......
此差异已折叠。
......@@ -31,8 +31,8 @@
|enable-play-gesture|Boolean|false|是否开启播放手势,即双击切换播放/暂停|微信小程序、快手小程序|
|auto-pause-if-navigate|Boolean|true|当跳转到其它小程序页面时,是否自动暂停本页面的视频|微信小程序|
|auto-pause-if-open-native|Boolean|true|当跳转到其它微信原生页面时,是否自动暂停本页面的视频|微信小程序|
|vslide-gesture|Boolean|false|在非全屏模式下,是否开启亮度与音量调节手势(同 page-gesture)|微信小程序、快手小程序|
|vslide-gesture-in-fullscreen|Boolean|true|在全屏模式下,是否开启亮度与音量调节手势|微信小程序、快手小程序|
|vslide-gesture|Boolean|false|在非全屏模式下,是否开启亮度与音量调节手势(同 page-gesture)|微信小程序、App(3.4.0+)、快手小程序|
|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)|微信小程序|
|poster-for-crawler|String||用于给搜索等场景作为视频封面展示,建议使用无播放 icon 的视频封面图,只支持网络地址|微信小程序|
|codec|String|hardware|解码器选择,hardware:硬解码(硬解码可以增加解码算力,提高视频清晰度。少部分老旧硬件可能存在兼容性问题);software:ffmpeg 软解码;|App-Android 3.1.0+|
......
......@@ -459,7 +459,9 @@ uniCloud.callFunction({
## 云函数中调用云函数@callbyfunction
用法同客户端调用云函数,不支持callback形式。**云函数本地运行时使用callFunction会调用云端的云函数而不是本地云函数,连接本地云函数调试时云函数内的callFunction会调用本地云函数**
用法同客户端调用云函数,不支持callback形式。
`HBuilderX 3.4.0`版本之前**云函数右键本地运行时使用callFunction会调用云端的云函数而不是本地云函数,连接本地云函数调试时云函数内的callFunction会调用本地云函数**`HBuilderX 3.4.0`及之后的版本**连接本地云函数或运行本地云函数时,如果在云函数内调用同一服务空间下的云函数会直接调用本地云函数。**
#### 请求参数
......
......@@ -10,7 +10,7 @@
```js
// 传统方式调用云函数-云函数代码
// 云函数名:user-center
// 云函数名:todo
// 云函数入口index.js内容如下
'use strict';
exports.main = async (event, context) => {
......@@ -19,22 +19,23 @@ exports.main = async (event, context) => {
params
} = event
switch(method) {
case 'login': {
const {
username,
password
case 'add': {
let {
title,
content
} = params
// 简化演示逻辑,此处不演示token校验
if(!username) {
title = title.trim()
content = content.trim()
if(!title || !content) {
return {
errCode: 'INVALID_USERNAME',
errMsg: '用户名不正确'
errCode: 'INVALID_TODO',
errMsg: 'TODO标题或内容不可为空'
}
}
// ...省略其他逻辑
return {
errCode: 0,
errMsg: '登录成功'
errMsg: '创建成功'
}
}
}
......@@ -45,15 +46,15 @@ exports.main = async (event, context) => {
};
// 传统方式调用云函数-客户端代码
async function login () {
async function addToDo () {
try {
const res = uniCloud.callFunction({
name: 'user-center',
name: 'todo',
data: {
method: 'login',
method: 'add',
params: {
username: 'dc',
password: '123456'
title: 'title demo',
content: 'content demo'
}
}
})
......@@ -63,18 +64,18 @@ async function login () {
} = res.result
if(errCode) {
uni.showModal({
title: '登录失败',
title: '创建失败',
content: errMsg,
showCancel: false
})
return
}
uni.showToast({
title: '登录成功'
title: '创建成功'
})
} catch (e) {
uni.showModal({
title: '登录失败',
title: '创建失败',
content: e.message,
showCancel: false
})
......@@ -86,40 +87,42 @@ async function login () {
```js
// 使用云对象的写法-云对象代码
// 云对象名:user-center
// 云对象名:todo
// 云对象入口index.obj.js内容如下
module.exports = {
login(username, password) {
if (!username) {
add(title, content) {
title = title.trim()
content = content.trim()
if(!title || !content) {
return {
errCode: 'INVALID_USERNAME',
errMsg: '用户名不正确'
errCode: 'INVALID_TODO',
errMsg: 'TODO标题或内容不可为空'
}
}
// ...登录逻辑
// ...其他逻辑
return {
errCode: 0,
errMsg: '登录成功'
errMsg: '创建成功'
}
}
}
// 使用云对象的写法-客户端代码
const userCenter = uniCloud.importObject('user-center')
async function login () {
const todo = uniCloud.importObject('todo')
async function addTodo () {
try {
const res = await userCenter.login('dc', '123456')
const res = await todo.add('title demo', 'content demo')
uni.showToast({
title: '登录成功'
title: '创建成功'
})
} catch (e) {
// 此形式响应符合uniCloud响应体规范中的错误响应,自动抛出此错误
// {
// errCode: 'INVALID_USERNAME',
// errMsg: '用户名不正确'
// errCode: 'INVALID_TODO',
// errMsg: 'TODO标题或内容不可为空'
// }
uni.showModal({
title: '登录失败',
title: '创建失败',
content: e.errMsg,
showCancel: false
})
......@@ -129,59 +132,233 @@ async function login () {
可以看到大量的业务无关代码被简化掉,开发效率UP。此外通过`ObjectName.MethodName`的方式调用云函数和云端写法完全一致,心智负担大幅减小。请阅读以下内容深入了解云对象
## 规范
## 快速上手
云对象和云函数都在cloudfunctions目录下,但是不同于云函数,云对象的入口为`index.obj.js`,而云函数则是`index.js`**为正确区分两者uniCloud做出了限制,云函数内不可存在index.obj.js,云对象内也不可存在index.js。**一个标准的云对象入口应导出一个对象,如下:
### 创建云对象
对象内每个键值对是一个处理方法
和创建云函数一样,在`cloudfunctions`目录右键即可输入云对象名称创建云对象,此处以云对象todo为例,创建的云对象包含一个`index.obj.js`。内容如下
```js
// user-center/index.obj.js
// cloudfunctions/todo/index.obj.js
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
const userCenter = uniCloud.importObject('user-center')
const res = await userCenter.login('dc', '123456') // 传入参数 username 和 password,参数和云对象内的方法完全一致
const todo = uniCloud.importObject('todo')
const res = await todo.add('title demo', 'content demo')
```
### 云函数或云对象内调用@call-by-cloud
## 云对象的API@api
云函数或云对象内也可以调用同一服务空间内的云对象,用法和客户端调用云对象一致
云对象的方法内可以通过this上的一些接口获取一些信息
### 获取客户端信息@get-client-info
**接口形式**
`this.getClientInfo()`
**示例:**
```js
const userCenter = uniCloud.importObject('user-center')
const res = await userCenter.login('dc', '123456') // 传入参数 username 和 password,参数和云对象内的方法完全一致
module.exports = {
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
const mycloud = uniCloud.init({
provider: 'tencent',
spaceId: 'xxx'
})
const userCenter = mycloud.importObject('user-center')
const loginRes = await mycloud.login('dc', '123456')
module.exports = {
add: function(){
const cloudInfo = this.getCloudInfo()
// cloudInfo = {
// provider,
// 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')
详见以下示例:
```js
// user-center/index.obj.js
// todo/index.obj.js
module.exports = {
login: async function(username, password) {
if(!username) {
add: async function(title = '', content = '') {
title = title.trim()
content = content.trim()
if(!title || !content) {
return {
errCode: 'INVALID_USERNAME',
errMsg: '登录失败'
errCode: 'INVALID_TODO',
errMsg: 'TODO标题或内容不可为空'
}
}
// ...其他逻辑
return {
errCode: 0,
errMsg: '登录成功'
errMsg: '创建成功'
}
}
}
// 客户端代码
const userCenter = uniCloud.importObject('user-center')
const todo = uniCloud.importObject('todo')
try {
// 不传username,云函数返回错误的响应
await userCenter.login()
// 不传title、content,云函数返回错误的响应
await todo.add()
} catch (e) {
// e.errCode === 'INVALID_USERNAME'
// e.errMsg === '登录失败'
// e.detail === {errCode: 'INVALID_USERNAME',errMsg: '登录失败'}
// e.errCode === 'INVALID_TODO'
// e.errMsg === 'TODO标题或内容不可为空'
// e.detail === {errCode: 'INVALID_TODO',errMsg: 'TODO标题或内容不可为空'}
// e.requestId === 'xxxx'
}
try {
const res = await userCenter.login('dc', '123456')
// res = {errCode: 0,errMsg: '更新成功'}
const res = await todo.add('title demo', 'content demo')
// res = {errCode: 0,errMsg: '创建成功'}
} 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
云对象无法直接本地运行,可以通过其他云函数调用本地云对象(在调用云对象的云函数右键本地运行),或者客户端调用本地云对象的方式来实现云对象的本地运行。
\ No newline at end of file
......@@ -695,6 +695,9 @@ limit
foreignKey // foreignKey自 HBuilderX 3.3.7版本支持
where
field // 关于field的使用限制见下方说明
groupBy // HBuilderX 3.4.0起支持
groupField // HBuilderX 3.4.0起支持
distinct // HBuilderX 3.4.0起支持
orderBy
skip
limit
......
......@@ -7,6 +7,8 @@ keyword: 短信,sms
> 自`HBuilderX 3.3.0`起,本接口支持传入phoneList参数批量发送短信,其他参数均于发送单条短信相同
> 自`HBuilderX 3.4.0`起云函数需启用uni-cloud-sms之后才可以调用sendSms接口,详细说明见:[云函数使用短信扩展库](#extension)
自HBuilderX 2.8.1起,uniCloud内置了短信发送API。给开发者提供更方便、更便宜的短信发送能力。
该服务类似小程序的模板消息,在一个固定模板格式的文字里自定义某些字段,而不是所有文字都可以随便写。
......@@ -36,6 +38,23 @@ keyword: 短信,sms
- 如果使用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。
......
......@@ -467,15 +467,15 @@ function hasPermission(token, permission) {
用法:`uniID.createInstance(Object CreateInstanceParams);`
CreateInstanceParams内可以传入云函数context
CreateInstanceParams内可以传入云函数context,自`uni-id 3.3.13`起,也可以传入clientInfo参数,作用和context类似。方便在云对象内获取clientInfo后直接传入,[什么是云对象?](uniCloud/cloud-obj.md)
```js
// 云函数代码
// 云函数代码,传入context
const uniID = require('uni-id')
exports.main = async function(event,context) {
context.APPID = '__UNI__xxxxxxx' // 替换为当前客户端的APPID,通过客户端callFunction请求的场景可以使用context.APPID获取
context.PLATFORM = 'h5' // 替换为当前客户端的平台类型,通过客户端callFunction请求的场景可以使用context.PLATFORM获取
context.LOCALE = 'zh-Hans' // 替换为当前客户端的语言代码,通过客户端callFunction请求的场景可以使用context.LOCALE获取
context.APPID = '__UNI__xxxxxxx' // 替换为当前客户端的APPID,通过客户端callFunction请求的场景可以使用context.APPID获取
context.PLATFORM = 'h5' // 替换为当前客户端的平台类型,通过客户端callFunction请求的场景可以使用context.PLATFORM获取
context.LOCALE = 'zh-Hans' // 替换为当前客户端的语言代码,通过客户端callFunction请求的场景可以使用context.LOCALE获取
const uniIDIns = uniID.createInstance({ // 创建uni-id实例,其上方法同uniID
context: context,
// config: {} // 完整uni-id配置信息,使用config.json进行配置时无需传此参数
......@@ -484,11 +484,26 @@ exports.main = async function(event,context) {
if (payload.code) {
return payload
}
const res = await uniIDIns.updateUser({
const res = await uniIDIns.updateUser({
uid: payload.uid,
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()
}
}
```
......
......@@ -9,12 +9,33 @@ univerify 是DCloud 推出的一键登录产品,通过与运营商深度合作
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
客户端如何使用一键登录请参考此文档:[univerify 使用指南](/univerify)
## 云函数@cloud
> 自`HBuilderX 3.4.0`起云函数需启用uni-cloud-verify之后才可以调用getPhoneNumber接口,详细说明见:[云函数使用一键登录扩展库](#extension)
客户端调用一键登录接口会获取如下结果
```js
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册