跳至正文

小游戏使用云开发的经验分享:多个游戏如何共用同一环境

在微信小游戏中,即使是最简单的超休闲游戏,也需要具备用户数据存储和排行榜功能。如果因为没有服务器,而把数据存在本地,不仅不安全,也无法实现跨设备的排行榜。

微信云开发正好解决了这个问题——无需自建服务器,就能轻松实现这些功能。

云开发实际是一系列后端能力的集合,包括:云函数、云数据库、云存储等。最简单来说,就是无需自建服务器,小游戏前端中直接调用云函数(运行在云端的一段代码),把用户数据存储到云端,避免设备切换或数据丢失的风险,从而实现后续的排行榜等功能。

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

一、基础要点

1. 开通云开发环境

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

2. 小游戏端初始化

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

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

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

3. 简单的云函数示例

云函数就是运行在云端的代码,例如一个获取用户openid的功能:

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  return {
    openid: wxContext.OPENID,
  }
}

小游戏前端通过以下代码调用:

wx.cloud.callFunction({
  name: 'getOpenid',
  success: res => {
    console.log('用户openid:', res.result.openid)
  }
})

微信云开发提供了便捷的后端服务,详细的开发步骤,建议参考官方文档: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: {},
});

注意:小游戏B调用 c1.init() 的时候,云开发后台会自动触发资源方提供方的 cloudbase_auth 函数,所以必须有。
资源提供方(小游戏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. 云函数是无状态的

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

4. 后台登录使用微信公众平台账号

云开发后台的完整名称是 腾讯云 CloudBase,登录时有两种选择:使用腾讯云账号登录使用微信公众平台账号登录(适用于小程序/小游戏),这是两个不同的账号主体,记住一定要选后者。

四 联系作者

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

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

发表回复

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