zoukankan      html  css  js  c++  java
  • 微信小程序开发总结

    微信小程序开发总结

    1. 微信公众号的账户和微信小程序的账户是分离的,并不是同一个,需要使用一个新的邮箱来注册小程序。

    2. 正式环境必须使用https协议,测试环境配置工具中可以设置为不校验http协议。

    1. 第三方框架 wepympvue 的区别:

    wepy

    腾讯官方开发的类vue框架,但是实际使用和vue还是有不小的区别的,总的来说比直接用原生开发体验上要好很多,如果是新项目建议用wepy开发,不能使用div、ul等html标签,而必须使用小程序的view、text等基础组件。

    mpvue

    美团基于vue开发的框架,最大的优点就是符合vue的使用习惯,熟悉vue开发的同学,可以很快适应,比较适用于从原有vue项目迁移过来。

    1. wepyvue 的异同

    相同点:

    Props、 Mixin、 computed、 slot、组件化开发

    不同点:

    methods里只能写template里绑定的事件、脏数据检查需要手动调用方法触发

    1. 微信小程序的第三方UI框架,目前各方面相对比较好用的是 iview weapp,不过还是存在比较多的坑,建议iview只是作为参考,另外自己实现组件体验和稳定性上来说会更好。

    2. 微信小程序的http封装

    默认是get方法,post方法只接受表单传值。

      // http.js
      export const API_URI = 'https://test.faceke.com/api/v2'
      import util from "./util"
      let token = ""
      function fetch(url, params, method, header, resolve, reject) {
         let _header = {
          ...header,
          'client': 'miniapp',
          'Authorization': "Bearer " + token
       }
       wx.request({
          url: `${API_URI}/${url}`,
          data: params,
          method: method,
          header: _header,
          success: res => {
          if (res.statusCode === 200 || res.statusCode === 201 || res.statusCode === 202 || res.statusCode 
          === 204) {
           resolve(res)
         } else if (res.statusCode === 401) {
           console.log("token过期重新登录")
           wx.removeStorage({
             key: 'token',
             success(res) {
               console.log(res.data)
             }
           })
           setTimeout(() => {
             wx.reLaunch({
               url: 'index'
             })
           }, 600);
         } else {
           reject(res)
         }
       },
       fail: err => {
         console.log(err)
       }
     })
     }
    
      const http = function (url, params, method, header) {
     if (!token) {
       wx.getStorage({
         key: 'token',
         success(res) {
           token = res.data
           console.log(res.data)
         }
       })
     }
     return new Promise((resolve, reject) => {
       if (!token) {
         setTimeout(() => {
           fetch(url, params, method, header, resolve, reject)
         }, 300);
       } else {
         fetch(url, params, method, header, resolve, reject)
       }
     })
     }
    
     module.exports = {
     baseUrl: function () {
       return API_URI
     },
     get: function (url, params) {
       return http(url, params, "GET", {
         'content-type': 'application/json'
       })
     },
     delete: function (url, params) {
       return http(url, params, "DELETE", {
         'content-type': 'application/json'
       })
     },
     post: function (url, params) {
       let formData = util.json2Form(params)
       return http(url, formData, "POST", {
         'content-type': 'application/x-www-form-urlencoded'
       })
     }
     }
    
    

    封装一个json格式数据转form格式数据的方法

    function json2Form(json) {
     let str = [];
     for (let p in json) {
       str.push(encodeURIComponent(p) + "=" + encodeURIComponent(json[p]));
     }
     return str.join("&");
    }
    
    module.exports = {
     json2Form,
    }
    
    1. 小程序/公众号登录涉及到两个最关键的用户标识:

    OpenId 是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户。

    UnionId 是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定相同账号的主体。开发者可通过UnionId,实现多个小程序、公众号、甚至APP 之间的数据互通了。

    1. wx.getUserInfo用户信息在wx.login之后再获取
      wx.login({
       success(res) {
         if (res.code) {
           that.code = res.code
           wx.getUserInfo({
             success: function (res) {
               console.log("获取微信用户信息", res)
               let data = res
               http.post("miniLogin", {
                 code: that.code,
                 encryptedData: data.encryptedData,
                 iv: data.iv
               }).then(({
                 data
               }) => {
                 console.log("登录", data)
               })
             }
           })
         }
       }
     })
    
    1. 小程序模板消息推送获取formId

    突破微信小程序模板消息限制,实现无限制主动推送

    模板消息

    这里的button必须用原生的button, 如果用iview的i-buttton会获取不到formId。

      <template>
        <form @submit="getFormId" report-submit="true">
          <button form-type="submit" @submit="getFormId">开关</button>
        </from>
      </template>
      <script>
       import wepy from 'wepy'
       export default class XXX extends wepy.component {
          methods = {
            getFormId(e) {
               let formId = e.detail.formId
               // to do sth
            }
          }
       }
      </script>
    
    1. template中{{}}直接写js不起效

    有时候我们在vue中习惯写{{ item.label.substr(0,2) }}来处理字符串,但是在wepy中这种写法有时候会不起效,为了使程序更稳定,我们可以在onLoad中直接处理好。

    1. wx.navigateTo 和 wx.reLaunch

    wx.navigateTo 会保留当前页面然后跳转,当用户按返回按钮后不会触发onLoad等事件,导致无法更数据。

    wx.reLaunch 会关闭所有页面再跳转。

    使用时需要根据实际业务选择合适的api。

    1. 微信开发者工具的bug

    当发现输入框不能输入或者工具的按钮点不动时,关掉微信开发者工具,然后重新打开即可。

    1. 发布审核流程

    提交体验版,内部测试审核通过后 -> 提交审核(1~3天,本次项目审核时间2个小时)-> 提交发布

    注意,提交审核后,还需要手动去提交发布,否则是不算上线的。提交发布成功后,大概需要5分钟左右的时间,就可以在微信里搜索到小程序了。

    1. 右上角的转发/分享按钮

    默认右上角是没有转发按钮的,需要自己手动在需要转发分享的页面onLoad里添加以下代码。

    wx.showShareMenu({
        withShareTicket: false
    })
    
  • 相关阅读:
    洛谷1026 统计单词个数
    洛谷1381 单词背诵
    Manacher(hdu3068最长回文)
    洛谷P1078 文化之旅
    HDU1269 迷宫城堡
    codevs1020 孪生蜘蛛
    洛谷P1027 Car的旅行路线
    楼房 洛谷1382 && codevs2995
    Picture poj1177
    排列组合
  • 原文地址:https://www.cnblogs.com/unclefang/p/10408098.html
Copyright © 2011-2022 走看看