1

微信小程序环境共享,多个小程序共享一个云开发数据库

 2 years ago
source link: https://blog.51cto.com/u_14368928/5043695
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我们在做小程序开发时,有时候需要多个小程序公用一个数据库,比如我们做一个外卖小程序,要配套一个骑手小程序,这个时候就要两个小程序公用一个云开发环境,公用一个数据库了。所以今天来教下大家如何多个小程序共享一个云开发环境和数据库。

其实官方给的文档很详细了,但是一个细节官方没有讲到,所以就会导致好多同学做多个小程序共享一个云开发环境时,遇到各种各样的问题。
比如下面这样的问题

微信小程序环境共享,多个小程序共享一个云开发数据库_云开发

明明感觉自己按照官方要求,该配置的都配置了啊,但是为啥就是出错呢。所以我这里再带大家完整的配置一遍,把里面的一些注意事项也给大家好强调下。

一,准备条件

1-1,必须同一个主体

首先看官方文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/resource-sharing/

微信小程序环境共享,多个小程序共享一个云开发数据库_数据库_02

要共享云开发资源可以 ,但是必须是同一个主体。什么是同一个主体呢,就是两个小程序必须都是你自己的,或者是你公司的。
如果不是同一个主体,会报如下错误

微信小程序环境共享,多个小程序共享一个云开发数据库_开发环境_03

1-2,最新的基础库,最新版开发工具

这里记得调到最新的基础库,开发者工具也尽量用最新的

微信小程序环境共享,多个小程序共享一个云开发数据库_云开发_04

开发者工具这里官方是有要求的

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_05

二,开通环境共享

我这里以两个小程序共享一个数据库为例
小程序A

微信小程序环境共享,多个小程序共享一个云开发数据库_数据库_06

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_07

大家这里记得我们是小程序A 共享数据库给小程序B

2-1,开通环境共享

开通,使用 1.03.2009140 或以上版本的开发者工具,进入云控制台,到 “设置 - 拓展能力 - 环境共享” 点击开通即开通环境共享能力

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_08

2-2,开通后授权给别的小程序

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_09

环境共享开通后将在顶部tab显示环境共享功能,进入 “环境共享” 的页面,点击“添加共享”,即可授权同主体下其他小程序/公众号使用当前小程序下的云开发资源

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_10

这里填写你要共享小程序的appid,我们这里取小程序B的appid

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_11

授权,选择共享的云环境,默认选中所有环境操作权限,可根据实际使用场景自定义授权。这里建议保持默认即可

微信小程序环境共享,多个小程序共享一个云开发数据库_开发环境_12

比如我这里分享给小程序B(编程小石头)

微信小程序环境共享,多个小程序共享一个云开发数据库_开发环境_13微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_14

2-3,使用共享的云开发环境

我们上面操作好以后,就可以在小程序B的云开发后台看到共享的云开发环境了。将我们的云开发环境切换下就可以查看和使用共享的资源了。

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_15

可以看到小程序B(编程小石头)可以查看小程序A的数据库了

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_16

三,请求共享的数据库

我们接下来就在小程序B里调用小程序A的数据库了。官方提示的是调用之前要在小程序A里创建一个如下的云函数,但是我在测试的时候发现不用创建也可以的。

微信小程序环境共享,多个小程序共享一个云开发数据库_开发环境_17

所以我们就先不创建cloudbase_auth 云函数,来看看能不能调取到数据。

3-1,初始化云开发环境

我们小程序B想使用小程序A的云开发环境,这里要注意,初始化的时候要如下面注释里写的一样,用小程序A的appid和云开发环境id

微信小程序环境共享,多个小程序共享一个云开发数据库_数据库_18

3-2,调用资源方数据

初始化以后不能想正常调用云开发数据库那样了,会报错

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_19

所以我们这里要改变下使用方法。如下

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_20

这时候还会报错,是因为我们忽略了官方的一个要求:“ 跨账号调用,必须等待 init 完成”,所以我们必须给init加一个await语法,如下,记得await要结合着async一起使用。

微信小程序环境共享,多个小程序共享一个云开发数据库_数据库_21

可以看到我们成功的请求到了小程序A的数据。直接get的时候记得改下数据库权限奥。

微信小程序环境共享,多个小程序共享一个云开发数据库_数据库_22

代码贴出来给大家,记得改成自己的配置

Page({
async onLoad() {
// 声明新的 cloud 实例
var c1 = new wx.cloud.Cloud({
// 资源方 小程序A的 AppID
resourceAppid: 'wx7c54942dfc87f4d8',
// 资源方 小程序A的 的云开发环境ID
resourceEnv: 'test-ec396a',
})

// 跨账号调用,必须等待 init 完成
// init 过程中,资源方小程序对应环境下的 cloudbase_auth 函数会被调用,并需返回协议字段(见下)来确认允许访问、并可自定义安全规则
await c1.init()

// wx.cloud.database().collection('xiaoshitou').get()
c1.database().collection('xiaoshitou').get()
.then(res => {
console.log('共享环境请求数据成功', res)
})
}
})

四,调用共享环境的云函数

4-1,调用资源方里的云函数

我们这里在小程序B(编程小石头)里调用小程序A里的云函数试试。
如小程序A里有一个xiaoshitou的云函数

微信小程序环境共享,多个小程序共享一个云开发数据库_开发环境_23

可以看到我们可以成功的调用小程序A里的xiaoshitou云函数

微信小程序环境共享,多个小程序共享一个云开发数据库_小程序_24

是不是很简单。今天就给大家讲到这里了,欢迎关注,后面会分享更多小程序开发的知识给大家。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK