分类 Bmob后端云 下的文章

  • 源码交易介绍
  • 如何购买?
  • 如何读取到之前应用的数据?
  • 如何上线?

1. 源码交易介绍

解决问题:

  1. 对于开发者。
    开发者应用未盈利,或提交市场审核不通过,代码丢弃又可惜。可以发布到此交易市场,赚一些成本回来。
  2. 对于企业
    经常会有一些个人或企业团体需要做个跟某某APP或小程序一样的东西,如果已经有了这样的东西,可以很好的降低成本。
  3. 代码来源:主要开发者

2. 如何购买?

  1. 打开购买网址:https://www.bmob.cn/shop/index
  2. 选择自己需要的应用
  3. 支付

备注:购买后并不会立刻在自己账户下创建此应用功能的响应数据库结构,请看下一步。


家教小程序

image.png


3. 如何读取到之前应用的数据?

  1. 我们点击立刻查看进入购买项目列表https://www.bmob.cn/shop/getBuyProject
  2. 创建应用,看下面截图,此处创建的应用会复制购买的应用数据表结构。

image.png

如何上线?

  1. 在购买项目列表下载代码
  2. 使用微信开发者工具打开
  3. 修改app.js 初始化appid,改为自己的appid。
  4. Bmob平台设置自己微信appid,AppSecret
  5. 微信开发者工具发布上线

image.png


参数说明

  • AppID,小程序ID,填写后可通过Bmob服务端获取该值
  • AppSecret,小程序密钥,填写后可通过Bmob服务端获取该值
  • MchID,商户号,小程序开发接入微信支付需填写此项
  • Key,商户支付密钥,小程序开发接入微信支付需填写此项

计划录制一整套视频教程,主要讲如何对接后端到上线,从开发工具介绍到,项目提交上线,总计1小时。每个视频控制10分钟左右,总计6个视频。也可以称为60分钟学会小程序开发到上线。

小程序视频目录


1.微信开发工具介绍

2.小程序后端介绍

3.开发相关准备工作

4.小程序首页开发

5.小程序列表详细开发

6.发布、显示评论以及上线


1.第一节:微信开发工具介绍

这节主要针对0基础,可能连开发工具都没摸过的童鞋,没开发过小程序可以可以看下。

注册成为微信公众平台开发者
安装开发者工具
小程序开发工具介绍
    目录介绍
    项目app.js相关目录
    文件介绍
    逻辑层
    视图层
    数据层
学习技能
    DIV+CSS
    JavaScript
    小程序文档

如有任何疑问,可在本文章下留言。

视频地址:https://www.bilibili.com/video/av17914778/?from=search&seid=5983525011627926771

小程序云实现原理分析

小程序基于最新的Serverless架构,无论官方称之为什么,特征都属于Baas或者Serverless服务。

整个小程序云服务,包含了,客户端嵌入SDK,封装云函数上传命令,服务端主要在Faas云函数内部封装了openid、文件存储请求全局系统对象,方便大家请求微信与腾讯云接口, 云函数数据库操作,沿用了客户端SDK,由于JavaScript跨平台特性,js代码可以直接放到node里面执行,云函数里的wx-server-sdk,其实就是客户端的SDK。 客户端wx.cloud, 相当于微信开发工具写入了全局变量wx.cloud=wx-server-sdk库。

我们从客户端到服务端的顺序分析

客户端-》中间层-》数据库

1.客户端SDK

目前客户端大家是不需要自己引入的,直接写入开发工具对象,只要微信基础库版本到达 2.2.3 或以上的就可以使用

其实还有个服务端SDK,在云函数。

看不见的wx.cloud对象,cloud对象,是一个js SDK,通过jssdk赋值给全局对象, 由于云函数的数据库操作方法写法与客户端一致,我们可以猜测,客户端SDK,与云函数的wx-server-sdk库 是同一个库。

我们对比下2者的代码

  1. 客户端 (小程序开发工具)
db.collection('todos').doc('<some-todo-id>').get().then(res => {
  // res.data 包含该记录的数据
  console.log(res.data)
})
  1. 服务端 (Faas)
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
exports.main = async (event, context) => {
  try {
    return await db.collection('todos').doc('<some-todo-id>').get()
  } catch(e) {
    console.error(e)
  }
}

核心代码

客户端
db.collection('todos').doc('<some-todo-id>').get()

服务端
return await db.collection('todos').doc('<some-todo-id>').get()

可以看到2者操作是相同的,只不过服务端用了es7的await异步对象,可以return 拿到结果集合。而客户端使用了 Promise风格,如果反编译微信开发工具,在wx.cloud对象里面,一定是可以找到大量与wx-server-sdk一模一样的代码。

2. 中间层封装

当我们开发登陆的时候,第一步需要拿到openid,客户端会请求云函数,云函数请求微信接口,最终返回openid,可我们看到云函数里面并不需要我们去请求微信的接口,而是直接event.userInfo.openId返回了openid。

看代码

exports.main = (event, context) => {
  console.log(event)
  console.log(context)

  // 可执行其他自定义逻辑
  // console.log 的内容可以在云开发云函数调用日志查看

  return {
    openid: event.userInfo.openId,
  }
}

这里帮我们省略了很多代码,原本的流程是需要通过客户端code换区openid

接口地址:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

抓包看下,测试出来,只要访问这个地址,即可访问openid

https://servicewechat.com/wxa-qbase/qbasecheckresult?event_id=HKnup_IMP8wWCsHwx0UyYsJMU0YPQm7u8eERg7Ll0wGB9CMSBtppMnu4P6Ytr6DFG2Vl_EGZS3nyEBw15OPCERLEi4Ok0HWC6g

返回结果

{
    "base_resp": {
        "ret": 0
    },
    "status": 1,
    "content": "{\"openid\":\"oWPQH0WVoCkpiw3ErLYAIVnudjfA\"}",
    "service_errcode": 0,
    "service_errmsg": "",
    "func_req_id": "0f9c7a3f-b63c-11e8-b8ac-525400e8849e"
}

可以看到, 只要带一个参数event_id,就可以拿到openid, 云函数return的内容,会在返回的content字段表现。

在请求从客户端,到达服务器之后,服务器获取到openid,记得这个openid比较特殊里有个情况是, 任何请求到服务器,都会获取openid, 第一次会从微信接口获取,写入到内存,第二次会直接从内存取。 这里用redis的情况可能性比较大。第二次请求直接取redis 值就可以了。 取到后写入event.userInfo对象。

所以在任何云函数里,只要event.userInfo.openId,你都可以拿到openid。授权后,event.userInfo还包含头像等其他信息。

其他云函数的操作,都封装在wx-server-sdk 这个代码,大家可以在每个云函数的依赖node_modules目录找到, 大家开发时遇到错误,也不要急,这里有个看错误技巧。

以 6 开始的是由微信服务器侧产生的错误码
以 5 开始的是由腾讯云侧产生的错误码
以 4 开始的是本地 SDK 产生的错误

3.数据库

文档很多地方使用了,文档,集合概念,操作数据库传入参数也是mongodb的风格,很明显的使用了非关系类型,Mongodb数据库。 每个应用一个Collection。 云数据相当于Mongodb UI控制台。连显示结构也没改。


相比之前的Wafer套件,可以说这次是一个全新的解决思路。跟Bmob一样实现一个人全栈小程序开发,唯一效率比Bmob低的是,这个人必须掌握nodejs,Bmob的服务如果做小程序,相比小程序云,大部分需求是不需要掌握nodejs。

总结:

整套可以理解为mongodb+Faas的结合,封装了数据存储操作SDK。 与阿里的Serverless服务一样,以Faas为核心, Faas目前内置只封装了openid,去掉了定时任务,网关等功能,任何功能自己通过faas去实现,但只限定小程序内调用。相比阿里的Serverless 更贴地气,因为这次有了客户端SDK,再加云函数SDK,让Serverless找了到落地的可能。


最后脑洞问题:能否自己用阿里云Serverless 搭建一个小程序云?

答案是可以

mongodb+Faas目前阿里的都有,并且目前阿里Faas功能更强大,唯一差个小程序客户端操作数据库的SDK。未来有机会,可以出个教程如何使用Faas实现一套自己的小程序-云

普及小程序 Serverless 云开发 【一】

什么是小程序 Serverless ?

之前跟大家介绍过Serverless由Baas+Faas 组成,听着很高深,其实很好理解。可以理解为为你提供了开发过程中后端服务+自定义后端服务。你不需要去管什么后端语言,什么后端数据库,什么后端攻击,什么后端架构,什么后端维护等,只要做好客户端UI,连接上后端就好了。

Bmob 作为国内第一家Serverless服务商,提供移动后端云服务。在这块已经服务了大量APP很多年。

这里解释下之前叫Baas 为啥现在叫Serverless,这是因为大家对Serverless的形式有不一样的认可,一部分人认为Serverless = Faas+各种服务。 一部分人认为Serverless+Baas。

大家的共同认知都是无服务器计算。未来不再需要去购买任何服务器去提供API,也不需要操作关心任何并发维护等问题。

由于不需要写后端,不需要购买服务器,这块在APP领域,可操作性极高。我们从13年成立,就有大量APP开发者使用我们服务,到今天,已经接近30w开发者,涉及各行各业。 客户服务展现形式也是非常丰富,单片机、智能家居、智能手表、无人售货机柜、商场资讯地图引导柜机,机器人,共享单车、游戏,APP,小程序等等客户。

除了Bmob Serverless外,国内2大云厂商也建立自己Serverless体系

阿里云的Serverless就是 Faas+各种服务(数据库、网关、负载均衡等等)从Faas 里面调用各种服务,通过官网暴露给客户端。

腾讯云的Serverless偏向于Baas+Faas 可以看下腾讯云Serverless的相关文章http://www.cnblogs.com/qcloud1001/p/9486751.html

所以这也出现了2个例子:

阿里Serverless开发一个微信红包小程序应用教程

https://blog.csdn.net/zhoushuntian/article/details/79289215

腾讯出的小程序云开发一个小程序教程

https://zhuanlan.zhihu.com/p/42327375

在熟悉Faas情况下,阿里的比传统小程序PHP API开发,在运维上与硬件成本上,有着明显优势。

由于大家理念不同,腾讯小程序云,他是直接建立了一套Baas与小程序结合,跟Bmob后端云一样,即使你完全不懂Faas,也能开发大部分常用的小程序。 明显这种方式更简单实用。

为什么是常用的应用可以用Baas做,而不是所有,因为有些特别应用,需要一些特别操作。

例子一:

小程序.png

http://www.91ud.com/app/15895.html

这个基于Serverless开发的一个例子,是基于Bmob后端云小程序,开发的一个小程序,叫趣猫。他的业务是一个淘宝客的业务,搜索跟推荐分成是他主要的功能, 其中搜索,如果不配合Faas,是没法实现, 因为他的搜索,其实是搜索淘宝客API的数据,整个淘宝推广的商品都可以搜索出来,有token授权,需要Faas访问淘宝API,返回数据给小程序客户端。

例子2:

纸塘

第二个基于Serverless开发的一个例子,小程序纸塘壁纸最近增加了一个功能,壁纸更新提醒通知,当后台有壁纸更新了, 会自动发送一条模板消息给我。这个也是基于Faas,单纯的Baas是没法实现这个功能。 当然,Bmob之前的Baas服务是包含了Faas服务,只是这2年Faas比较炒作的比较火。大家都把他(Faas)单独领了出来,作为Serverless架构的核心。我们则认为Baas与Faas同样重要。

之前我有文章写过,阿里的Faas 推广力度,与体验领先于腾讯的Faas , 由于阿里与腾讯的理解不一样,这次在Serverless领域,个人认为腾讯云一定会超过阿里的Serverless。

阿里云的Serverless就是 Faas+各种服务,不是玩微服务这个领域的人,很多人都不知道阿里的Serverless怎么结合到自己业务上。腾讯云理解为Baas+Faas,Baas有客户端的存在,更容易落地。大家理解的Serverless不一致,做的事情也不一致。

像阿里Faas+各种服务(今天去看阿里官方还不断在给Faas增加可调用的服务,到目前阿里Faas几乎可以操作阿里云的大部分产品,数据库,redis,云存储等等服务),并不断在宣传Faas是如何去调用这些服务。

腾讯云的行动告诉你什么叫Serverless(Baas+Faas),这次推出小程序云,以产品的形式告诉大家他眼中的Serverless服务。

image.png

按照2018年7月份微信小程序官方公布的数据,目前注册开发者以及到达了150W+,这150w的开发者,大部分是一些小的cp厂商,这些小的CP厂商,大有可能接下来新开发的小程序都基于Serverless开发,而整个Serverless 市场,会比目前大很多倍。

Serverless虽然好用,按照阿里的策略,很多人是看不懂无服务函数是干嘛的,为什么我要用它,而不是用云主机。因为设置太复杂了,概念很多,甚至好多人到今天还没搞懂计费原理。

腾讯云的策略,由于有了小程序Baas与客户端打通,大部分情况不用自己去Faas里面写接口,使用非常简单,在Serverless这块领域,很快腾讯云就会超过阿里云,由于很多初级开发者都不会用,很难推广开来,这次小程序云对国内整个行业来说,都是一个很好的教育。算得上是国内推广Serverless行业的又一次里程碑,未来Serverless会像目前云主机一样普及。

到底怎么使用?

有些前端对Serverless与小程序云的关系可能不太能理解,我下面用小程序云来代替Serverless这个词。

前期准备:

  1. 申请公测资格 网址:
  2. 下载bate版开发工具

控制台操作:

  1. 打开小程序云控制台,在bate版小程序开发工具上传的左侧有个按钮。

  1. 点开后,看到一个类似这样的界面

image.png

  1. 点击数据库,创建一个自己前端想显示的数据结构。例如这里建个team表

image.png

代码操作:

我们把这条数据在小程序内显示? 这里我跟Bmob后端云做个对比

  1. 初始化

    微信

wx.cloud.init({
  env: 'test-x1dzi'
})

Bmob后端云

app.js 引入

var Bmob = require('../dist/Bmob-1.0.1.min.js');
wx.Bmob.initialize("你的Application ID", "你的REST API Key", "你的MasterKey");

2.第二步,查team表,打印出返回的数据

微信

db.collection('team').get().then(res => {
  // res.data 是一个包含集合中有权限访问的所有记录的数据,不超过 20 条
  console.log(res.data)
})

Bmob后端云

//构建team表对象
const query = Bmob.Query("team");
//查询数据
query.find().then(res => {
    //res 集合中所有数据,默认100条
    console.log(res)
});

可以看到,除了需要引入SDK , 2个在使用上几乎一致。小程序云开发与使用Bmob开发几乎雷同。

文档地址:

https://bmob.github.io/hydrogen-js-sdk/#/?id=%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8-1

关于定价:

腾讯云,最低版本

API 3w 天

数据库 1G

存储 5G

目前还不知道腾讯云的最低基础版上线是否收费,如果免费,那就很赞了。按照经验,这个额度大部分小应用都够了。

Bmob小程序云 最低版本(免费)

API 100w 月

数据库 表行 10w

存储 免费20G

流量 每月送20G

这个套餐免费,基本够用,收费套餐,大部分小程序都很难用得完。

目前小程序云还缺乏解决2个问题:

1.关于更好的功能实用性:

目前小程序云暂时比不上,Bmob后端云,像导入导出,生成小程序二维码、解密手机号,运动步数,支付,退款,短信,这些基础Baas服务端封装,小程序云暂时都还没有。然后就是数据安全与稳定性了,目前暂时没看到有任何关于备份的介绍,应用受到CC、DDOS 等攻击,这个费用是谁来承担,腾讯云之前的业务是客户自己解决,Bmob等 Baas 都是无需用户去承担这个费用的。

2.服务售后

我们都知道Baas 跟业务有深度关系,不像传统的云主机,我只保证云主机不死机就好了。基本卖出去就等着收月租。Baas领域开发者会遇到各种问题,你可以说你平台是标准的,文档都有,那么多技术人员在用,可开发者技术能力,理解能力参差不齐,就很难解决一些问题。 所以在传统的Baas 服务,都很重视问题反馈,像Bmob 就有几十个QQ解答群,加上工单。其他所有的Baas几乎没有哪家没工单服务的,有些工单还收几百块/月,大量工单,技术人员有限,这是没办法的,很多人问的问题,明显是技术基础不过关,对自己业务逻辑理解不够,就使劲提工单,而有些业务与Baas结合问题工单比较难形容,不知道Baas是否可以实现,所以有时候就用上了即时通讯,QQ,微信等来协助开发者解决问题。 所以这也是腾讯小程序云待解决的问题。

总结:

目前小程序云刚出来,还需要完善,对国内Serverless 市场来说,是一次里程碑式的意义。有望让中小企业普及Serverless 技术。

快应用使用教程

Bmob 简介

提供完整的后端解决方案,我们提供轻量级的SDK开发包,让开发者以最小的配置最快的速度,开发自己所想的应用。

账号信息

网址:https://www.bmob.cn
账号:zhongguovu@gmail.com
密码:123456

应用信息

应用名称:快应用演示
Application ID:069d5548a354cc9eff9161fdbdd126d7
REST API Key:e9c907e7bcd09680e3621dc7afed1386

数据表

开发文档地址

https://github.com/bmob/hydrogen-js-sdk/

开源SDK地址

https://github.com/bmob/hydrogen-js-sdk/

压缩SDK下载地址

https://github.com/bmob/hydrogen-js-sdk/blob/master/dist/Bmob-1.6.1.min.hap.js

基于实现账号密码登陆Demo 地址

image.png

运行效果:
image.png

https://github.com/bmob/quick-app

核心代码文件:

quick-app/src/Demo/index.ux
//引入SDK
import Bmob from '../assets/js/Bmob-hap.1.1.1.min.js'
//初始化
Bmob.initialize(
    '39ee83f92ff3a195130596a4eaec5ddf',
    'a1223fca87f5d229953817f5c2493446'
  )
  
//点击登陆执行
Bmob.User.login(this.u, this.p).then(res => {
        if (res.code) {
          console.log('登陆失败', JSON.stringify(res))
          return
        }
        console.log('登陆成功,并跳转...')
        router.push({
          uri: '/DemoDetail'
        })

      }).catch(err => {
        console.log('登陆失败', err)
      });

快速测试

为了大家快速测试,上面测试账号帮大家建好应用(快应用)与表(test),大家也可以用上面账号自己建立

实现功能输出表所有数据

准备操作:打开华为快应用开发工具,新建一个项目,下载SDKBmob-1.6.1.min.hap.js

步骤一:引入SDK

//这里目录按照自己实际目录
import Bmob from '../assets/js/Bmob-1.6.1.min.hap.js'

步骤二:初始化

Bmob.initialize("069d5548a354cc9eff9161fdbdd126d7", "e9c907e7bcd09680e3621dc7afed1386");

步骤三:输出Test表,title与content字段

const query = Bmob.Query("test");
query.find().then(res => {
    console.log(res)
});

按照这三部操作即可看到效果,更多的数据库增删改查,文件上传等等操作,请看文档,有任何问题,请联系我,微信:zhongguovu

https://bmob.github.io/hydrogen-js-sdk/