今天在博客开了个新栏,记录一下自己的小程序开发历程。每天大概的内容就是记录一下开发过程遇到的BUG,以及解决方法。还有自己学到的新东西。到时候写完了应该也能学到很多东西吧,内心当然是非常希望这个项目能写在简历上为自己的项目经验加加分。

大致说一下自己的小程序项目设计:

初衷是这样的,用户打开小程序,在里面设定一些定时提醒的项目,比如提醒自己去参加某些会议,提醒自己什么时候该去哪里上课,想法还是挺美好的,但是后面发现,这个想法在微信上并不能行得通(至少以我目前的情况是)。

先说一下发现这个想法行不通的历程吧

  1. 首先自然是浅浅的学习一下小程序的设计。看了一遍小程序设计文档前面几章,然后就开始打算一块一块,一小部分一小部分的完成需要完成的工作。

  2. 于是了解到了订阅消息

    订阅消息包括两种:

    一次性订阅消息

    一次性订阅消息用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。

    长期订阅消息

    一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。

    目前长期性订阅消息向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。

简单来说,就是个人开发者只能使用一次性订阅消息。而且订阅一次发一条,这就很操蛋了。连订阅一周的课表提醒都做不到,除非一个学期就一节课。

  1. 然后我开始转换思路,有没有可能使用在小程序上操作之后转到公众号上进行提醒?公众号上的消息提醒是怎样的?

    公众号模板消息,向认证后的服务号开放。所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限。

看起来似乎还行。但是其实有个坑在里面,就是我上面加粗的部分。只有服务号才可以发送模板消息。公众号有分为订阅号和服务号。看看这俩的描述
图片说明
再一打探。服务号需要有企业资质和营业执照,每年需要交300块钱费用。
而订阅号发送的消息,统一都收在了订阅号消息里面。不手动点进订阅号里面,就收不到订阅号发来的消息。即便收到了,也会被下一条公众号文章所覆盖。
所以博主基本没有在微信上做课表提醒功能的可能了。

  1. 确定目标。在经过以上历程之后,我算是知道之前的提醒为啥突然要收费了。也是要恰饭的嘛。
    所以只能做一个提醒工具了。而且也用不上公众号了。直接在小程序上操作。到时候发过来的通知也是会发在服务通知里,虽然只有一次,虽然被服务通知收纳了。但最起码可以出现在消息列表里,可以有一个小红点,如果用户将其置顶的话,到时候是可以被提醒到的。好吧,也只能这样了。

  2. 开始实际操作。操作之前先规划一下,用户使用这个小程序的流程大致模拟一下。

大致会有增删改查CRUD操作。

  1. 增加 用户登录->点击我的->点击添加订阅消息按钮->输入订阅消息的具体事项->用户确认订阅消息->将消息存入后台(数据库)->到了规定时间调用发送消息接口->消息发送完成。
  2. 更改 用户登录->点击我的->点击已经存在的订阅消息->修改订阅消息的具体事项->用户确认修改订阅消息->在后台修改数据(剩下同上)
  3. 删除 用户登录->点击我的->点击已经存在的订阅消息旁边的删除按钮->确认删除->后台删除数据
  4. 用户登录->点击我的->以列表的方式查看自己设置的强提醒。

于是就开始操刀怎么做这个项目了。前端我学的还是比较少的,感觉会有点麻烦。
第一步自然是各种准备项目,比如申请小程序,然后下载小程序开发工具,然后创建项目。勾选云开发,申请一个appid就可以开始了。

甭管啥,先整俩网页上去。在pages下面新建一个helloWorld文件夹再新建page表示首页,一个aboutMy文件夹新建page表示关于我的。
图片说明
接着打开app.json里加个tabbar.

"tabBar": {
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "初始"
      },
      {
        "pagePath": "pages/helloWorld/helloWorld",
        "text": "首页"
      },
      {
        "pagePath": "pages/aboutMy/aboutMy",
        "text": "我的"
      }
    ]
  }

然后底下就有了类似这样的东西。点了点,嗯看来实现了。迈出了成功第一步
图片说明
接着先写写订阅好了。
在aboutMy.wxml里写一个按钮。

<view class="uploader">
  <button bindtap="requestMessage">我要订阅消息</button>
</view>

大概就是这样的
图片说明
然后aboutMy.js里写这个按钮的功能。

  requestMessage: function(event) {
    console.log("我要订阅消息")
    console.log(event)
    if(event.type=="tap"){
      console.log("用户点击了按钮")
    }
  }

<stron>
图片说明
成功咯!
说一下这其中遇到的小插曲(也算是要注意的点)。</stron>

一开始我以为event要填写对应的事件类型,于是我改成了touchend。表示触摸结束的时候触发事件。后面发现并不是我想的这样,而是点击的时候就把事件传进来了,而且不管我怎么拖动和点击,传来的type都是tap。这是一个有待考究的地方,先放着。

之后就需要写对应的事件了。今天也就做了个按钮,感觉进度还是有点慢的,明天再来研究怎么发消息。
各位也要早点睡觉咯!