跳至正文

微信云开发实战经验分享:从入门到环境共享

在微信小游戏中,即使是最简单的超休闲游戏,也需要用户数据存储和排行榜功能。如果因为没有服务器,而把数据存在本地,不仅不安全,也无法实现跨设备的排行榜。微信云开发正好解决了这个问题——无需自建服务器,就能轻松实现这些功能。

本文基于实际开发经验,总结了微信云开发的基础要点和常见问题,希望帮助有同样需求的开发者少走一点弯路。

一、基础要点

1. 开通云开发环境

在微信开发者工具中,点击左侧工具栏的"云开发"按钮,按照提示开通云开发服务并创建云环境。目前最低收费为 19.9元/月/环境。

2. 小游戏端初始化

在代码中调用 wx.cloud.init 指定云环境ID:

wx.cloud.init({ env: 'your-env-id' });

初始化完成后,就可以使用 wx.cloud.callFunction 调用云函数了。

详细的开发步骤建议参考官方文档(最好的教程):https://developers.weixin.qq.com/minigame/dev/wxcloud/basis/quickstart.html

二、多游戏共享同一云环境

不是每一个小游戏都必须开通一个云环境。如果一个小游戏的云环境额度用不完,可以将其共享给同一主体下的其他小游戏使用,省钱又省心。

环境共享的官方文档:https://developers.weixin.qq.com/minigame/dev/wxcloud/guide/resource-sharing/introduce.html

共享环境配置示例

假设小游戏A已开通云环境(资源提供方),要共享给小游戏B使用:

小游戏B的初始化代码:

// 声明新的 cloud 实例
var c1 = new wx.cloud.Cloud({
  // 资源提供方 AppID
  resourceAppid: 'wxe0e2656d74f0bff3',
  // 资源提供方环境 ID
  resourceEnv: 'test-f96b31',
});

// 跨账号调用,必须等待 init 完成
// init 过程中,资源方小程序对应环境下的 cloudbase_auth 函数会被调用
await c1.init();

// 正常使用云资源
await c1.callFunction({
  name: '函数名',
  data: {},
});

资源提供方(小游戏A)的 cloudbase_auth 云函数:

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  // 获取来源方信息
  console.log(wxContext.FROM_APPID)    // 来源方 AppID
  console.log(wxContext.FROM_OPENID)   // 来源方用户 OpenID
  console.log(wxContext.FROM_UNIONID)  // 同主体下用户 UnionID

  return {
    errCode: 0,
    errMsg: '',
    auth: JSON.stringify({
      // 自定义安全规则
      x: 1,
    }),
  }
}

三、实战经验总结

1. 获取用户信息的正确方式

在共享环境下,获取用户openid必须使用 wxContext.FROM_OPENID,而不是常规的 wxContext.OPENID

2. 必须配置 cloudbase_auth 函数

共享环境必须配置 cloudbase_auth 云函数,否则小游戏初始化会报错。我一开始没有仔细看官方文档,就卡在这里了。

3. 云函数是无状态的

云函数每次调用都是全新的实例,不要尝试在其中做状态存储。我曾经在云函数中为排行榜做缓存功能,后来发现这是无效的。

微信云开发为小游戏开发者提供了便捷的后端服务,特别是环境共享功能,让资源利用更加高效。希望这些经验对你有帮助,欢迎交流讨论!

四 联系作者

作者的公众号和博客会不定期分享一些游戏开发技巧和上线实战经验,欢迎关注,共同进步!

作者同时创建了一个游戏开发交流群,供朋友们技术交流、学习合作、问题求助等,感兴趣的朋友可以关注我的公众号,并留言加群

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注