微信小程序

开始

网站:https://mp.weixin.qq.com/
开发工具:微信自己的IDE、HbuilderX
HbuilderX 在选择开发库的时候 Uni-app

在微信管理平台中的:开发菜单

开发设置:开发者ID,密码不能随意公开

服务器域名:如果是请求或者文件上传下载:都必须是HTTPS协议(必须是80端口)

socket:必须是WSS (webSocket SSL协议)

微信开发入门 微信程序开发_微信开发入门


HTTP协议加了SSL、TLS就是HTTPS

小程序:去掉用户安装环节,手机桌面管理复杂度,减少内存使用
第三点不一定正确,具体说应该是减少的是安装内存,SD卡
利用微信的推广

开发界面类似于Chrome的界面

关闭HTTPS校验
详情——本地设置——不校验合法域名…要把他勾上

微信小程序开发包

app.js 启动文件
app.json 配置当前小程序的启动路由(文件),小程序启动的首页为pages的第一个

"pages":{
    //千万不要加后缀名,因为他要找四个文件
    "pages/welcome/welcome",//小程序启动的首页
    "pages/index/index",
    "pages/logs/logs"
    //在这里输入一个,就会自动生成一个文件夹,里面包含四个文件
},
"window":{
     "backgroundTextStyle":"light",//dark和light
     "navigationBarBackgroundColor": "#fff",//导航栏颜色
    "navigationBarTitleText": "Weixin",//标题文字
    "navigationBarTextStyle":"black"//标题字体颜色
},
//底部导航栏
"tabBar":{
    //list最少两项
    "list":[
        {
        "pagePath":"pages/index/index",
        "text":"首页",
        "iconPath":"images/home-icon.png",
        "selectedIconPath":"images/home-act-icon.png",
        },
        {
        "pagePath":"pages/logs/logs",
        "text":"日志",
        "iconPath":"images/movie-icon.png",
        "selectedIconPath":"images/movie-act-icon.png",
        },
    ]
}

在小程序文档的小程序代码构成,JSON配置里看

新建文件夹images,把图标放进去
tabBar:底部菜单栏配置项

注意:不要改文件名称
超时配置最好不要配置,因为有些用户手机不是很好

预览
二维码预览,自动预览

调试
二维码真机联调
自动真机联调

小程序开发规范
每一个功能:需要新建一个文件夹(所有子文件与功能名字最好保证一致)

  1. 功能的JS文件,如(index.js)
    文件必须包含一个:Page({}) 声明此文件为微信小程序的一个页面文件
    微信小程序也是一个框架,也有生命周期
  2. 功能配置文件JSON,如(index.json)
{
  "navigationBarBackgroundColor": "#ffffff",
  "navigationBarTextStyle": "black",
  "navigationBarTitleText": "首页",
  "backgroundColor": "#eeeeee",
  "backgroundTextStyle": "light"
}
  1. 样式文件wxss文件,如(index.wxss)—— 就是普通的css文件,直接编写css样式
  2. 页面文件wxml,如(index.wxml) —— weixin XML 配置文件

微信小程序全局生命周期

onLaunch 小程序启动第一个生命周期
1、程序初始化数据:登录用户信息,wx.login,获取当前用户登录信息,wx.getSetting
获取手机号:获取用户绑定手机号,需要调用wx.login接口
2、在开发过程中,最好不要直接获取用户手机号,容易导致小程序封号
onShow 在小程序从后台切换到当前的时候调用(回调)
onHide 在小程序从前台切换到后台的时候调用(回调)

微信小程序页面生命周期

onLoad 页面启动在内存中加载时调用,可以获取路由中传递的数据
onReady 页面首次渲染完后调用
onUnload 页面卸载生命周期,可以对定时器,监听器,播放视频进行清除
data 用于定义页面数据

wx-updata 使用方式
将方法直接挂载到 Page 构造函数上,这样就可以在 Page 实例中像使用 setData 一样使用 upData 了

// app.js 中挂载 
import { updataInit } from './miniprogram_npm/wx-updata/index' // 你的库文件路径 

App({ 
    onLaunch() { 
        Page = updataInit(Page, { debug: true }) 
    } 
}) 
// 页面代码中使用方式 
this.upData({ 
    info: { height: 155 }, 
    desc: [{ age: 13 }, '帅哥'], 
    family: [, , [, , , { color: '灰色' }]] 
})

微信小程序API
wx.login(object)
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。

小程序免登录实现
1、第一次登录的时候会去获取用户的openID:

https://api.weixin.qq.com/sns/jscode2session
?appid=APPID                                  //开发者
&secret=SECRET                                //开发密码
&js_code=JSCODE                               //每次wx.login登录成功后的code
&grant_type=authorization_code

2、后端会用用户的openID去数据库查找此用户是否在一个个时间段内有登录过
3、小程序启动 => wx.login 获取code => 调用后端获取openID接口获取到用户的openID => 调用后端的免登录接口 => 成功/失败

这个openID一般都是后端给的,不然不安全,请求地址里有APPID和密钥

wx.request(object)
发起 HTTPS 网络请求。
请求接口地址要在服务器域名这里配置
多跨平台ID:是后端搞得UNIID
成功success,失败fail,无论成功还是失败complete

wx.getSetting(object)
获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限

wx.getSetting({
    withSubscriptions:true,//是否同时获取用户订阅消息的订阅状态
    success(data) {
        //用户成功授权之后在调用获取用户信息的方法
        if(data.authSetting['scope.userInfo']) {
            wx.getUserInfo({
                lang:'zh_CN',
                success(d) {
                    //缓存用户信息
                    wx.setStorageSync('user_info,d.rawData)
                    //给本页面的data赋值
                    _this.setData(d.userInfo)
                }
            })
        }
    }
})

wx.getUserInfo(object)
获取用户信息

数据缓存
wx.setStorage/setStorageSync
小程序本地存储,常用后面这个
单个key可以存储1M,所有的本地缓存不能超过10M

wx.showLoading(object)
加载框

像素单位
rpx: 可以根据屏幕宽度进行自适应
例如:定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素
750rpx = 375px = 750物理像素
1rpx = 0.5px = 1物理像素
px:

事件绑定
bindtap

<view id="tapTest" data-hi="Weixin" bindtap="tapName"> Click me! </view>

audiio
wx.createInnerAudioContext()

// 使用 wx.createAudioContext 获取 audio 上下文 context
this.audio = wx.createAudioContext('myAudio')
this.audio.src = "../../audio/nusic.mp3"
this.audio.play()
注意:跳转页面仔onUnload生命周期销毁
this.audio.destroy()

路由
wx.navigateTo(object)

保留当前页面,跳转到对应的页面,不能跳转到一个tabBar页面,会出现一个返回按钮

wx.redriectTo(object)
不保留当前页面,跳转到对应的页面,不能跳转到一个tabBar页面,会出现一个首页按钮

wx.switchTab(object)
跳转到tabBar页面,并关闭其他所有非 tabBar 页面

微信小程序里的导入导出
遵循commonJS规范
module.exports/require

微信小程序轮播图
swiper组件
滑块视图容器。其中只可放置swiper-item组件,否则会导致未定义的行为。

<swiper autoplay={{true}}>
    <swiper-item 
        wx:for="{{bannerList}}" 
        wx:for-item="it"//取别名
        wx:for-index="idx"
        wx:key="idx"
    >
        <image src="{{it}}" mode="aspectFit"></image>
    </swiper-item>
</swiper>
autoplay:自动播放
interval:自动切换时间间隔
indicator-dots:是否显示面板指示点

注意:在页面上如果是一个属性,必须要用{{}},不然这个属性会是一个字符串
页面上不能直接使用数据,要在data这里

传参
获取DOM节点上的属性值,必须使用data-开头进行参数传递

<view bindTap="toDetail" data-postId="{{item.postId}}"></view>
//获取
//最后获取会把他弄成小写
evt.target.dataset.postid
//或者
evt.currentTarget.dataset.postid

路由传参

url: 'index-detail/index-detail?id=' + id,
//获取
// 通过路由传递过来的参数在onLoad方法中可以接收到
// 或则通过onLoad方法中的this.options也可以获取到

模板
wxml引入有import和include两种

<template name="msgItem"></template>
//使用
//name和is要一样
<import src="item.wxml"/>
<template is="indexItem" data="{{item}}"></template>

开发流程

1、下载一个微信开发者工具
2、新建项目
AppID是自己申请账号会有的
选择不使用云服务
语言:JavaScript

3、目录
app.json全局配置
pages的第一个元素就是项目启动的页面
小程序的页签(tabBar)是配置出来的
list 必须要两项以上

app.wxss全局样式
小程序样式优先级:行内样式 > 页面样式 > 全局样式

小程序发布
在微信开发者工具里,上传代码,输入版本号,到后台系统的管理,版本管理,提交审核,勾上条款,下一步,下一步,审核成功就可以使用了,个人都是体验版,公司的就是正式版本