云开发现在比较流行,但是我对它并不是很感兴趣,因为它的优点很明显,但是它的缺点也很致命。
不需要自己购买服务器或者域名认证,也不用担心服务器过期的问题,节省了很多时间。
初期容量免费,基本够用。
缺点就是不能跨平台,这个很伤人,我们不能只在一个平台上开发游戏!虽然我们可以在所有具备云开发能力的平台上进行开发,但是还有很多平台没有云开发能力!
不过世界排行榜等功能还是可以使用的,最多没有云开发能力的平台不会显示排行榜功能。
我利用这个云开发能力打造了一个比较完整的交易系统,进入这个系统之后所有的数据都是通过网络获取的,离开这个系统就可以使用单机的玩法,所以没有云开发能力的平台只能体验单机部分。
开始
这里我以微信云开发为例:
开通服务时注意不能使用测试ID,否则你的云开发按钮将无法点击。开通后你将获得一个环境ID。
初始化
wx.cloud.init({
env: 'test-x1dzi'
})
将上一步获取到的环境ID传入init函数中就完成了初始化工作,此方法没有返回值。
调用云函数
wx.cloud.callFunction({
name: 'add',
data: {
a: 12,
b: 19
}
}).then(console.log)
基本上小程序端的重点就是这些了。你看完几个支持云开发的平台的描述文档之后,就会发现他们在小程序端的使用方式其实都是一样的,只是命名空间不同而已。所以小程序端支持多平台还是很容易的。剩下的就是写云函数了。微信云其实就是一个服务器,你可以把每个云函数看成是路由之后被后端调用的一个函数,只是调试和上传的方式不一样而已。
这里的调试比较难受,首先打包完之后云函数目录会被清理,如果把函数目录放在-,无法像在微信开发者工具中那样及时看到效果,不能直接在开发者工具中改完然后复制到-。由于我的系统没有那么复杂,目前每次打包完后都会下载自己需要的云函数。其实可以写个插件,在打包前把云函数存放到某个地方,打包完再放回去。
开发方法
我的开发方式比较简单,直接把小程序端的云函数调用写成服务,添加到我的网络框架中,就像我用长链接、短链接一样使用就可以了。
文章网址:
扩展的方式很简单
定义一个新的链接方法。
定义类,实现接口,这里的url就是环境id,协议号就是云函数名,类中的接收方式可以随意更改。
export default class WXCloudService extends Service {
/**
* 由于init函数无返回值,所以直接通知链接成功
* @param url 相当于环境ID
* @param port 无用
*/
connect(url: string, port?: number) {
super.connect(url);
console.log("WXCloudService connect url ", url)
wx.cloud.init({
env: url
})
this.emit(NetConfig.OPEN, url);
}
sendData(message: SendMessage) {
let self = this;
let protoID = message.getProtoID();
let data = message.getData();
console.log("WXCloudService sendData protoID ", protoID,' data ',data)
wx.cloud.callFunction({
// 需调用的云函数名
name: protoID,
// 传给云函数的参数
data: data,
success: function (res) {
console.log('WXCloudService success res ', res)
self.onData(res.result, protoID);
},
fail: function (res) {
console.log('WXCloudService fail res ', res)
self.onError(message);
},
complete: function (res) { },
})
}
isReady() {
return true;
}
}
在工厂中创建
使用先前定义的。
如何使用我在《一个可以阻断长链接和短链接的网络模块》这篇文章中已经讲过了,这里就不再赘述了。
防范措施
云函数的创建在后台创建和在开发者工具中创建是不一样的,我最终选择使用开发者工具创建然后上传。
本地调试的时候有时候没发现什么错误,调试就启动失败了,我把云函数删了,重新下载,再启动,就好了。
云函数上传后记得打包,不然你的函数就白写了。所以最好用自己熟悉的方法,在打包的时候多加点小技巧。
doc函数已弃用,它仅支持传入_id。
结论
以上就是我这几天使用云开发的心得,也是最重要的部分,当然还是建议大家看文档,比较详细。