分类 Bmob后端云 下的文章

遇到问题核心调试技巧

调试网络是开发小程序核心技巧,把网络调试学会,能解决新手90%的问题,经常遇到大家说没取到数据,或者页面空白等。查看network 网络返回,刷新下页面,是否有数据,网络状态是多少,一般200是正常,400开头,500之类的错误是请求异常或服务器错误。

用户表没有自动新增用户

Bmob自动新增用户功能,是需要在后台应用配置,授权微信id,填写微信小程序AppSecret,才可拿到用户openid等信息。

电脑端可以预览手机端不显示数据

这个错误一般是合法域名的问题,查看他报的错误提示,把提示域名填写到微信。 如果是基于Bmob开发,则在Bmob应用配置里找到对应的合法域名填写到微信。 这里注意的是,修改了微信平台域名后重启下开发工具才会生效。

new Date跨平台兼容性问题

在Andriod使用new Date(“2018-01-01 00:00:00”) 没问题 ,在苹果端,是不支持这种格式,必须用 2018/01/01 00:00:00格式。可以使用js字符串替换,将短横替换为斜杠。var iosDate= date.replace(/-/g, '/');。

域名TLS错误

如果你确信自己域名没有错,一般来说,你重启下开发工具即可。

生成小程序二维码

这里需要注意的是微信有a、b、c方案,其中B方案二维码,需要大家的页面路径上线后才可生成。

wx.getUserInfo

2018年5月份,腾讯彻底废弃单纯使用js获取用户昵称头像等资料,必须使用页面按钮来让用户自己点击获取信息,如提示这个函数报错,请去掉相关代码。

小程序开发目前市场主要三种方案:

  1. 基于某个语言开发或者某款开源系统开发后端API接口
  2. 基于腾讯云官方方案
  3. 基于Baas 平台开发。

WordPress.png

1. 基于某个语言开发或者某款开源系统开发后端API接口

PHP领域很多人喜欢用discuz、WordPress等开源程序搭建小程序,他优点是如果你本身博客是基于这类系统,只需要开启API配置好https接口就可以基于此系统开发。

缺点也非常明显、移植性能差,出问题的几率高,并发低,安全相对比较低。前端新手上手困难等。

image.png

2. 腾讯云官方方案

优点:官方方案相对来说相关套件比较完善,懂前后端相关技术的人一键部署,基本在配置,然后一键上传,遇到几个小服务器问题,很快解决。
缺点:如果对整个后端不是很熟悉的人,就会比较麻烦。一个服务器问题部分人几天也解决不了,官方人员很难联系到效率低。例如下面这位开发者的遭遇
腾讯云小程序官方群.png

3. 基于Baas 平台开发

一、小程序Baas有什么用?

它可以免去小程序开发中服务器搭建、域名备案、https、API接口等,简单一句形容:专心写自己想要的页面就好了,其他Baas都帮你做好。

二、小程序你为何要使用BAAS ?

  1. 简单易用(由于封装了SDK,一行代码实现支付、客服消息不再是问题)
  2. 高效 (除了后端不用写代码、基础备案都免除了,可以想象效率)
  3. 低开发成本(降低开发与硬件基础设施的部署和维护成本。)
  4. 好维护(完全不用维护后端问题)
  5. 降低应用扩展(scaling)成本,当你有100W并发时会遇到性能瓶颈。目前老牌的BAAS平台如Bmob、AVcloud,都可以支持动态的自动扩张。

三、哪些企业使用了BAAS ?

相比小程序,在App行业早就赶上了Baas的快车,国内像华为、腾讯、知乎等知名企业都在使用Baas,华为、百度甚至对外推出过Baas产品,由于Baas产品对用户积累与服务要求比较高,目前听说华为的Baas只给内部项目使用,百度的Baas推出没多久由于内部问题关闭了。

4. 举个例子常规操作

想象一下,我们在一个小程序论坛,看到一份喜欢的源码,发觉还不错,下载源码,想发布上线审核。

传统上线例子:

PS:为了体现出传统也很快,这里暂且默认你公司有些积累之前一些准备工作都有,包含域名、备案、https、服务器、以及这套源码的运行环境。

第一步
把数据库导入到线上数据库。
第二步
把代码传到线上环境。
第三步
调试小程序代码。
第四步
提交上线审核

这里经常遇到的问题是很多小程序源码代码不全,只放了小程序源码,没有数据库相关信息。导入上去后代码与小程序之间有些认证机制,你可能要稍微阅读下代码,知道这套代码的实现原理(如果要进行修改,可能就需要知道这个后端系统的整个流程,由于没有文档,很多情况下是盲人摸象),进行调试发布上线。

Bmob后端云.png

小程序 Baas上线例子

下载源码后不需要配置,搭建,设置服务器,解析域名。 直接创建一个应用,发布上线。

第一步
Baas平台创建应用。
第二步
修改小程序appkey。
第三步
提交上线审核

这里每一步都相对简单,只要你发布过小程序,基本三分钟内能发布上线。即使应用个别数据表缺失也不是问题,比如没有留言表,或者反馈表。你只需要反馈页面反馈一下,系统会判断是否存在此表,如果不存在,则默认创建。

可以看出,在这种API接口模式开发的应用,使用Baas服务有绝对的优势,目前已有几千小程序开发者从腾讯转向Bmob移动后端云,将有更多的移动开发者加入到Baas的队伍中。

在项目上线后,可能会遇到一些人需要在线咨询,腾讯给予的解决方案是内置客服,一般可以分为2种使用方式。
  • 第一种内置在平台设置客服,在网页登陆客服处理消息
  • 第二种则是自己开发,微信会提供客服消息回调url,我们在此URl处理客服消息。

第一种微信平台使用方式

1. 微信控制台添加客服人员

image.png

2.使用方式

image.png

3.未处理消息会超时

超时的消息

  • 优点:无需任何开发,添加即可使用
  • 缺点:使用端被限制,经常要登陆查看消息,容易遗漏消息、容易出现超时。

第二种自有平台使用方式

注意事项

  • 服务端回调地址必须https
  • 2种方式只能2选1(启用并设置消息推送配置后,用户发给小程序的消息以及开发者需要的事件推送,都将被微信转发至该服务器地址中)

1. 设置回调服务器处理地址

此处使用Bmob 云逻辑功能,可以实现免服务器实现自己需要的服务端逻辑(比如支付回调,公众号回调,客服消息回调等等。。)

一、登陆 www.bmob.cn,点击应用>找到云逻辑

创建方法

创建方法.png

找到服务器调用URL地址

调用URL.png

填写到微信消息推送地址

image.png

写入微信回调验证代码

备注:微信公众号与小程序回调加密验证一直,我们可以直接复制公众号的验证代码,地址:https://docs.bmob.cn/cloudcode/WEB/d_cloudcodeweixin/doc/index.html#微信公众平台的开发,复制此页面代码

文档代码
image.png

复制到云函数

image.png

代码


function onRequest(request, response, modules) {
    var token = "weixin";         //这里的值必须与在微信公众号后台填入的token值一致
    var crypto = modules.oCrypto; //使用加解密模块
    var httptype = request.method; //获取调用云端逻辑的是post或者get方式
    var xml2js = modules.oXml2js; //实现xml和js格式之间的相互转换
    var db = modules.oData;         //数据库对象
    if ("GET" == httptype) {
         //是get方法,则是微信验证回调的url是否有效
          var oriStr = [token, request.query.timestamp, request.query.nonce].sort().join('')
          var code = crypto.createHash('sha1').update(oriStr).digest('hex');
          if (code == request.query.signature) { //验证通过,输出
              response.end(request.query.echostr);
          } else {
              response.end("Unauthorized");
          }
    } else {
           //是post,接收定阅者发送过来的消息后返回,把反馈意见存储表“message”中,或做一些其他操作都可以。
         


    }
}

这里的 else 可以做的事情可多了,例如:

  • 发送个短信或邮件给你的客服人员,告知有人来问什么问题了,客服人员觉得重要可以回复,不重要可以忽略。
  • 实现与用户交互(例如回复1.话费问题 回复2.流量问题。。。)
  • 接入第三方只能聊天助手,例如小娜这种。
  • 实现自动回复,第一次提示XXX欢迎你咨询本小程序,第二提醒你反馈的信息已经收到。
  • 写入到数据表,再小程序端查出来,实现最新微信官方小程序:公众平台助手一样的功能。直接手机回复客服消息
  • 等等。。。

文档有提供写入数据表代码

//是post,接收定阅者发送过来的消息后返回,把反馈意见存储表“message”中。
            db.insert({
              "table":"message",             //表名
              "data":{"userId":request.body.xml.FromUserName,"content":request.body.xml.Content}           
            },function(err,data){    
           //写入数据库成功处理代码                 
                         });

比如我这实现个简单例子

image.png

公开免费接口实现微信消息主动推送
image.png


image.png

云逻辑里面调用另外一个云逻辑代码

文档地址
https://docs.bmob.cn/cloudcode/WEB/b_developdoc/doc/index.html#云端逻辑对象
var functions = modules.oFunctions;
functions.run({
               "name": "reply",
               "data":{"userId":request.body.xml.FromUserName,"content":content}
            },function(err,data){
               //回调函数
               if(request.body.xml.Content!=undefined){
                   functions.run({
                       "name": "sendMaster",
                       "data":{"userId":request.body.xml.FromUserName,"content":request.body.xml.Content}
                    },function(err,data){
                       //回调函数
                       
                    });    
               }
            });    

主动发送消息代码

//云端逻辑方法名:reply

function onRequest(request, response, modules) {

        var content = request.body.content || '你好。';
        var userId = request.body.userId || 'ocBzs0I9fkcJ6kq1_xSxtN5dj7bI';
    
        //获取Http模块
        var http = modules.oHttp;
        
        var options = {
          "url": 'https://api.bmob.cn/1/wechatApp/getAccessToken',
          "headers": {
            "x-bmob-application-id": "xx",
                    "x-bmob-rest-api-key": "xx",
            'Content-Type': 'application/json'
          }
        };
        http.get(options, function(error, res, body) {
            var result = JSON.parse(body)
            // response.send(result.access_token);
            
            
             /**
            *主动发起消息给用户请求
            */
            //获取Http模块
            var http = modules.oHttp;
            
            var options = {
              "url": 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='+result.access_token,
              "body":JSON.stringify({"touser":userId,"msgtype":"text","text":{"content":content}})
            };
            // response.end(options.url);
            http.post(options, function(error, res, body) {
                console.log(body);
                response.send(body);
            });
        });
        
       
}                                                                                    

总结

前面截图指的微信回调地址选json Bug的问题是返回的头部不符合http标准。返回json格式header头应该是Content-Type:application/json,而微信的选json还是Content-Type:text/xml,如果将来微信改正过来,则支持选json格式。
无服务函数已经越来越受开发者欢迎,无需购买主机,搭建环境。不到10行代码,实现微信服务器返回回调授权。这是未来微型服务端的发展方向在线编程。腾讯云的无服务函数也已经公侧,个人测式暂时还是Bmob的功能实用很多。

无服务函数.png

这一节本身正常是没有的,由于确实遇到了,这里描述下

开发第三天到晚上下班调试还好好,早上开机手机调试进入无响应模式,具体就是点击开始调试弹出一下图
image.png

没说具体错误,控制台也没错误。把之前写的代码都删了,折腾了好久好久,没解决。

过了一周没理他,看他会不会神奇的好过来,然而并没有。

就这事,问了华为负责快应用的同事, 华为那边反馈是这块开发工具是联盟那边的, 建议用华为内侧的开发工具。实在是解决不了,也没说明白什么错误,然后就下载了华为的开发快应用工具。

下载安装后,由于内测中的开发工具,调试复杂,工具功能比较少,需要插线安装ADB驱动, 不支持调试接口,预览也是不行,基本可以理解为一个基于vscode开源的编辑器,还未调通。
image.png

又过了几天,已经把之前的代码重写删掉,重新用联盟的开发工具,再次运行,希望能调试,开发一个小应用出来。

重新初始新建一份代码,再次运行,这次可以预览,只是开发工具好像再也不能打印调试日志了,自身的运行日志也不再显示出来
image.png

到这一步,已经不知道具体怎么把这个日志,让他显示出来。

然后经过重新搭建,仔细阅读,想起了,原生配置是不提供这个日志输出,需要大家自己打开日志
/src/manifest.json中config配置代码如下:

{
 "config": {
    "logLevel": "debug"
  }
}

修改后,又可以慢慢得调试了

公众号不能个人注册,昨天小程序开始支持个人开发者申请,以后个人可以申请小程序玩玩。说明未来会比公众号还多的小程序。今天给大家分享个人如何免费拥有发布线上的小程序

既然申请资质可以免费申请,那就缺一个后端存放接口跟数据库。目前这块解决方案无非2种,一种自己买主机,另一种用后端云服务。

自己买主机是需要收费的,然后各种环境搭建非常复杂。

前端门槛减低了

图片资源大小降低