小程序API文档地址:

https://developers.weixin.qq.com/miniprogram/dev/

微信小程序

小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。

小程序开发流程

第1步,注册成为开发者:

https://mp.weixin.qq.com/wxopen/waregister?action=step1

第2步,进入注册邮箱,激活开发者帐号

第3步,填写开发者身份信息

其间会打开微信,扫描一次页面上的二维码

第4步, 下载开发者工具 (IDE)

https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html?t=201861

第5步, 进入小程序后台管理页面,填写一个新建的小程序介绍信息

https://mp.weixin.qq.com/wxopen/initprofile?action=home&lang=zh_CN&token=1980399937

第6步, 在小程序管理页面,为新建的小程序,添加开发者环境(如服务器地址等, 没有的话,可以暂时先忽略)

https://mp.weixin.qq.com/wxopen/initprofile?action=home&lang=zh_CN&token=1980399937

第7步, 现在就可以在[设置]-[开发设置]中看到小程序ID等信息了

第8步, 打开小程序开发者工具,用微信扫码登录开发者工具,准备开发第一个小程序!

选择 新建项目,选择小程序项目,设置好项目保存路径

并且填写上面申请过appid

整个IDE界面如下:

第1次,编译后,点击 获取用户头像按钮时, 会申请授权

下面的内容是IDE中工程文件的作用的详细介绍   以及API 介绍 (技术的关键点)

如图所示:

在上一章中,我们通过开发者工具快速创建了一个 QuickStart 项目。你可以留意到这个项目里边生成了不同类型的文件:

  1. .json 后缀的 JSON 配置文件
  2. .wxml 后缀的 WXML 模板文件
  3. .wxss 后缀的 WXSS 样式文件
  4. .js 后缀的 JS 脚本逻辑文件

接下来我们分别看看这4种文件的作用。

JSON 配置

我们可以看到在项目的根目录有一个 app.json 和 project.config.json,

此外在 pages/logs 目录下还有一个 logs.json,

我们依次来说明一下他们的用途。

小程序配置 app.json

app.json 是对当前小程序的全局配置,

包括了小程序的所有页面路径、界面配色、网络超时时间、底部 tab、顶部导航标题(背景色、前景色、文本) 等。

QuickStart 项目里边的 app.json 配置内容如下:

{"pages":["pages/index/index","pages/logs/logs"],"window":{"backgroundTextStyle":"light","navigationBarBackgroundColor": "#fff","navigationBarTitleText": "收藏单词","navigationBarTextStyle":"black"}
}

我们简单说一下这个配置各个项的含义:

  1. pages字段 —— 用于描述当前小程序所有页面路径,这是为了让微信客户端知道当前你的小程序页面定义在哪个目录。
  2. window字段 —— 小程序所有页面的顶部背景颜色,文字颜色定义在这里的。

其他配置项细节可以参考文档 小程序的配置 app.json 。

工具配置 project.config.json

通常大家在使用一个工具的时候,都会针对各自喜好做一些个性化配置,例如界面颜色、编译配置等等,

当你换了另外一台电脑重新安装工具的时候,你还要重新配置。

考虑到这点,小程序开发者工具在每个项目的根目录都会生成一个 project.config.json,

你在工具上做的任何配置都会写入到这个文件,当你重新安装工具或者换电脑工作时,

你只要载入同一个项目的代码包,开发者工具就自动会帮你恢复到当时你开发项目时的个性化配置,

其中会包括编辑器的颜色、代码上传时自动压缩等等一系列选项。

其他配置项细节可以参考文档 开发者工具的配置 。

页面配置 page.json  ???

这里的 page.json 其实用来表示 pages/logs 目录下的 logs.json 这类和小程序页面相关的配置。

如果你整个小程序的风格是蓝色调,那么你可以在 app.json 里边声明顶部颜色是蓝色即可。

实际情况可能不是这样,可能你小程序里边的每个页面都有不一样的色调来区分不同功能模块,

因此我们提供了 page.json,让开发者可以独立定义每个页面的一些属性,例如刚刚说的顶部颜色、是否允许下拉刷新等等。

其他配置项细节可以参考文档 小程序的配置 page.json 。

WXML 模板

从事过网页编程的人知道,网页编程采用的是 HTML + CSS + JS 这样的组合,

其中 HTML 是用来描述当前这个页面的结构,CSS 用来描述页面的样子,JS 通常是用来处理这个页面和用户的交互。

同样道理,在小程序中也有同样的角色,其中 WXML 充当的就是类似 HTML 的角色。

打开 pages/index/index.wxml,你会看到以下的内容:

<view class="container"><view class="userinfo"><button wx:if="{{!hasUserInfo && canIUse}}"> 获取头像昵称 </button><block wx:else><image src="{{userInfo.avatarUrl}}" background-size="cover"></image><text class="userinfo-nickname">{{userInfo.nickName}}</text></block></view><view class="usermotto"><text class="user-motto">{{motto}}</text></view>
</view>

和 HTML 非常相似,有标签、属性等等构成。

但是也有很多不一样的地方,我们来一一阐述一下:

  1. 标签名字有点不一样 往往写 HTML 的时候,经常会用到的标签是 div, p, span,

  2. 开发者在写一个页面的时候可以根据这些基础的标签组合出不一样的组件,例如日历、弹窗等等。

  3. 换个思路,既然大家都需要这些组件,为什么我们不能把这些常用的组件包装起来,大大提高我们的开发效率。

  4. 从上边的例子可以看到,小程序的 WXML 用的标签是 view, button, text 等等,这些标签就是小程序给开发者包装好的基本能力,

  5. 我们还提供了地图、视频、音频等等组件能力 更多详细的组件讲述参考下个章节 小程序的能力

  6. 多了一些 wx:if 这样的属性以及 {{ }} 这样的表达式  在网页的一般开发流程中,我们通常会通过 JS 操作 DOM (对应 HTML 的描述产生的树),以引起界面的一些变化响应用户的行为。例如,用户点击某个按钮的时候,JS 会记录一些状态到 JS 变量里边,同时通过 DOM API 操控 DOM 的属性或者行为,进而引起界面一些变化。当项目越来越大的时候,你的代码会充斥着非常多的界面交互逻辑和程序的各种状态变量,显然这不是一个很好的开发模式,因此就有了 MVVM 的开发模式(例如 React, Vue),提倡把渲染和逻辑分离。简单来说就是不要再让 JS 直接操控 DOM,JS只需要管理状态即可,然后再通过一种模板语法来描述状态和界面结构的关系即可。 小程序的框架也是用到了这个思路,如果你需要把一个 Hello World 的字符串显示在界面上。 WXML 是这么写 :

    <text>{{girl.girlName}}</text>
    

    JS 只需要管理状态即可:

    this.setData({ girl: {girlName: "面码", girlAge: 15} })
    

    通过 {{ }} 的语法把一个变量绑定到界面上,我们称为数据绑定。仅仅通过数据绑定还不够完整的描述状态和界面的关系,还需要 if/else, for等控制能力,在小程序里边,这些控制能力都用 wx: 开头的属性来表达。 更详细的文档可以参考 WXML

WXSS 样式

WXSS 具有 CSS 大部分的特性,小程序在 WXSS 也做了一些扩充和修改。

  1. 新增了尺寸单位。在写 CSS 样式时,开发者需要考虑到手机设备的屏幕会有不同的宽度和设备像素比,采用一些技巧来换算一些像素单位。WXSS 在底层支持新的尺寸单位 rpx ,开发者可以免去换算的烦恼,只要交给小程序底层来换算即可,由于换算采用的浮点数运算,所以运算结果会和预期结果有一点点偏差。
  2. 提供了全局的样式和局部样式。和前边 app.json,    page.json 的概念相同,你可以写一个 app.wxss 作为全局样式,会作用于当前小程序的所有页面,局部页面样式 page.wxss 仅对当前页面生效。
  3. 此外 WXSS 仅支持部分 CSS 选择器

更详细的文档可以参考 WXSS 。

JS 交互逻辑

一个服务仅仅只有界面展示是不够的,还需要和用户做交互:响应用户的点击、获取用户的位置等等。

在小程序里边,我们就通过编写 JS 脚本文件来处理用户的操作。

bindtap属性绑定事件

<view>{{ msg }}</view>
<button bindtap="btnClicked">点击我</button>

点击 button 按钮的时候,我们希望把界面上 msg 显示成 "Hello Beyond",

于是我们在 button 上声明一个属性: bindtap ,在 JS 文件里边声明了 clickMe 方法来响应这次点击操作:

Page({btnClicked: function() {this.setData({ msg: "Hello Beyond" })}
})

响应用户的操作就是这么简单,更详细的事件可以参考文档 WXML - 事件 。

此外你还可以在 JS 中调用小程序提供的丰富的 API,利用这些 API 可以很方便的调起微信提供的能力,

例如获取用户信息、本地存储、微信支付等。

在前边的 QuickStart 例子中,

在 pages/index/index.js 就调用了 wx.getUserInfo 获取微信用户的头像和昵称,最后通过 setData 把获取到的信息显示到界面上。

更多 API 可以参考文档 小程序的API 。

通过这个章节,你了解了小程序涉及到的文件类型以及对应的角色,

在下个章节中,我们把这一章所涉及到的文件通过 “小程序的框架” 给 “串” 起来,让他们都工作起来。

上一章中我们把小程序涉及到的文件类型阐述了一遍,

我们结合 QuickStart 这个项目来讲一下这些文件是怎么配合工作的。

小程序的启动

微信客户端在打开小程序之前,会把整个小程序的代码包下载到本地。

紧接着通过 app.json 的 pages 字段就可以知道你当前小程序的所有页面路径:

{"pages":["pages/index/index","pages/logs/logs"]
}

这个配置说明在 QuickStart 项目定义了两个页面,分别位于 pages/index/index 和 pages/logs/logs 目录。

而写在 pages 字段的第一个页面就是这个小程序的首页(打开小程序看到的第一个页面)。

于是微信客户端就把首页的代码装载进来,通过小程序底层的一些机制,就可以渲染出这个首页。

小程序启动之后,在 app.js 定义的 App 实例的 onLaunch 回调会被执行:

App({onLaunch: function () {// 小程序启动之后 触发}
})

整个小程序只有一个 App 实例,是全部页面共享的,更多的事件回调参考文档 注册程序 App 。

接下来我们简单看看小程序的一个页面是怎么写的。

程序与页面

你可以观察到 pages/logs/logs 下其实是包括了4种文件的,

微信客户端会首先根据 logs.json 配置生成一个界面,顶部的导航的颜色和文字你都可以在这个 json 文件里边定义好。

紧接着客户端就会装载这个页面的 WXML 结构和 WXSS 样式。

最后客户端会装载 logs.js,

你可以看到 logs.js 的大体内容就是:

Page({data: { // 参与页面渲染的数据logs: []},onLoad: function () {// 页面渲染后 执行}
})

Page 是一个页面构造器,这个构造器就生成了一个页面。

在生成页面的时候,小程序框架会把 data 数据和 index.wxml 一起渲染出最终的结构,于是就得到了你看到的小程序的样子。

在渲染完界面之后,页面实例就会收到一个 onLoad 的回调,你可以在这个回调处理你的逻辑。

有关于 Page 构造器更多详细的文档参考 注册页面 Page 。

组件

小程序提供了丰富的基础组件给开发者,开发者可以像搭积木一样,组合各种组件拼合成自己的小程序。

就像 HTML 的 div, p 等标签一样,

在小程序里边,你只需要在 WXML 写上对应的组件标签名字就可以把该组件显示在界面上,

例如,你需要在界面上显示地图,你只需要这样写即可:

<map></map>

使用组件的时候,还可以通过属性传递值给组件,让组件可以以不同的状态去展现,

例如,我们希望地图一开始的中心的经纬度是厦门,那么你需要声明地图的 longitude(中心经度) 和 latitude(中心纬度) 两个属性:

<map longitude="厦门经度" latitude="厦门纬度"></map>

组件的内部行为也会通过事件的形式让开发者可以感知,

例如用户点击了地图上的某个标记,你可以在 js 编写 markertap 函数来处理:

bindmarkertap属性绑定用户点击事件

<map bindmarkertap="markertap" longitude="广州经度" latitude="广州纬度"></map>

当然你也可以通过 style 或者 class 来控制组件的外层样式,以便适应你的界面宽度高度等等。

更多的组件可以参考 小程序的组件 。

API

为了让开发者可以很方便的调起微信提供的能力,

例如获取用户信息、微信支付等等,小程序提供了很多 API 给开发者去使用。

要获取用户的地理位置时,只需要:

wx.getLocation({type: 'wgs84',success: (res) => {var latitude = res.latitude // 经度var longitude = res.longitude // 纬度}
})

补充一下wgs84坐标:

参考链接: https://cnodejs.org/topic/564c0a27e4766d487f6fe38d

当前互联网地图的坐标系现状

地球坐标 (WGS84)

  • 国际标准,从专业GPS 设备中取出的数据的坐标系
  • 国际地图提供商使用的坐标系
  • WGS84:World Geodetic System 1984,是为GPS全球定位系统使用而建立的坐标系统。

火星坐标 (GCJ-02)也叫国测局坐标系

  • 中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系
  • 国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。

百度坐标 (BD-09)

  • 百度标准,百度 SDK,百度地图,Geocoding 使用
  • (百度在火星坐标上二次加密)

开发过程需要注意的事

  • 从设备获取经纬度(GPS)坐标

     如果使用的是百度sdk那么可以获得百度坐标(bd09)或者火星坐标(GCJ02),默认是bd09如果使用的是ios的原生定位库,那么获得的坐标是WGS84如果使用的是高德sdk,那么获取的坐标是GCJ02
  • 互联网在线地图使用的坐标系

    火星坐标系:iOS 地图(其实是高德)Gogole地图搜搜、阿里云、高德地图
    百度坐标系:当然只有百度地图
    WGS84坐标系:国际标准,谷歌国外地图、osm地图等国外的地图一般都是这个

调用微信扫一扫能力,只需要:

wx.scanCode({success: (res) => {console.log(res)}
})

需要注意的是:多数 API 的回调都是异步,你需要处理好代码逻辑的异步问题。

更多的 API 能力见 小程序的API 。

通过这个章节你已经大概了解了小程序运行的一些基本概念,

当你开发完一个小程序之后,你就需要发布你的小程序。

在下个章节,你会知道发布前需要做什么准备。

提前准备一些发布事项

用户身份

一个团队进行小程序的开发,那么团队成员的身份管理是很有必要的。

管理员可在小程序管理后台统一管理项目成员(包括开发者、体验者及其他成员)、设置项目成员的权限,

包括:开发者/体验者权限、登录小程序管理后台、开发管理、查看小程序数据分析等。

管理入口位于:小程序管理后台 - 用户身份 – 成员管理

权限 说明
开发者权限 可使用小程序开发者工具及开发版小程序进行开发
体验者权限 可使用体验版小程序
登录 可登录小程序管理后台,无需管理员确认
数据分析 使用小程序数据分析功能查看小程序数据
开发管理 小程序提交审核、发布、回退
开发设置 设置小程序服务器域名、消息推送及扫描普通链接二维码打开小程序
暂停服务设置 暂停小程序线上服务

预览

使用开发工具可以预览小程序,帮助开发者检查小程序在移动客户端上的真实表现。

点击开发者工具顶部操作栏的预览按钮,开发工具会自动打包当前项目,并上传小程序代码至微信的服务器,

成功之后会在界面上显示一个二维码

使用当前小程序开发者的微信扫码即可看到小程序在手机客户端上的真实表现。

上传代码

同预览不同,上传代码是用于提交体验或者审核使用的。

点击开发者工具顶部操作栏的上传按钮,填写版本号以及项目备注

需要注意的是,这里版本号以及项目备注是为了方便管理员检查版本使用的,开发者可以根据自己的实际要求来填写这两个字段。

上传成功之后,登录小程序管理后台 - 开发管理 - 开发版本 就可以找到刚提交上传的版本了。

可以将这个版本设置 体验版 或者是 提交审核


小程序的版本

版本 说明
开发版本 使用开发者工具,可将代码上传到开发版本中。 开发版本只保留每人最新的一份上传的代码。点击提交审核,可将代码提交审核。开发版本可删除,不影响线上版本和审核中版本的代码。
审核中版本 只能有一份代码处于审核中。有审核结果后可以发布到线上,也可直接重新提交审核,覆盖原审核版本。
线上版本 线上所有用户使用的代码版本,该版本代码在新版本代码发布后被覆盖更新。

可以使用  小程序开发者助手  方便快捷的  预览和体验  线上版本、体验版本、开发版本。

在下个章节,我们来看看如何发布一个小程序,让你的成果被所有的微信用户所使用到。

开发和测试完成之后,就需要将小程序发布给用户来使用了。

提交审核

为了保证小程序的质量,以及符合相关的规范,小程序的发布是需要经过审核的

在开发者工具中上传了小程序代码之后,

登录 小程序管理后台 - 开发管理 - 开发版本  找到提交上传的版本。

在开发版本的列表中,点击 提交审核 按照页面提示,填写相关的信息,即可以将小程序提交审核。

需要注意的是,请开发者严格测试了版本之后,再提交审核, 过多的审核不通过,可能会影响后续的时间。

发布

审核通过之后,管理员的微信中会收到小程序通过审核的通知,

此时登录 小程序管理后台 - 开发管理 - 审核版本。中可以看到通过审核的版本。

请点击发布,即可发布小程序。

运营数据

有两种方式可以方便的看到小程序的 运营数据

方法一:

登录 小程序管理后台 - 数据分析

点击相应的 tab 可以看到相关的数据。

方法二:

使用 小程序数据助手,在微信中方便的查看运营数据

官方提供的演示Demo

下载地址: https://developers.weixin.qq.com/miniprogram/dev/demo.html

然后解压

然后,新建一个项目,填写appid,指定工程路径为 解压后的目录,

如图所示:

然后,点击右上方的 [预览]按钮,生成二维码,使用微信扫描后,即可在手机上浏览

然后打开手机上的微信,扫描二维码,即可 预览 实际的运行效果

组件模块:

API 模块:

随便点击一个项目进去看下demo的效果:

在后面的章节里,我们将详细学习一下小程序中的-框架-组件-API-工具

未完待续,下一章节,つづく

微信小程序_文档_01_入门相关推荐

  1. 微信小程序_文档_04_框架_视图层_WXS_WXSS

    WXS WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构. 注意 wxs 不依赖于运行时的基础库版本,可以在所有版本的小程序中运行. wxs 与 jav ...

  2. 微信小程序_文档_05_框架_组件_插件_多线程_兼容_优化

    基础组件 框架为开发者提供了一系列基础组件,开发者可以通过组合这些基础组件进行快速开发. 详细介绍请参考组件文档 自定义组件 从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程.所有自定 ...

  3. 微信小程序_文档_08_组件_媒体组件_地图_画布_开放能力

    audio 注意:1.6.0 版本开始,该组件不再维护.建议使用能力更强的 wx.createInnerAudioContext 接口 音频. 属性名 类型 默认值 说明 id String   au ...

  4. 微信小程序常用文档地址(自用常更新)

    微信开放文档: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 阿里云oss文档 https://he ...

  5. 微信小程序 -- (1)文档说明、配置项

    微信小程序 1. 介绍 微信公众平台由腾讯提供,基于腾讯微信的服务器,为广大企业.组织.个人提供用户管理或咨询服务的平台.微信公众平台提供了3种账号类型: 服务号.订阅号.小程序 服务号: -类似:中 ...

  6. 微信小程序学习文档指南

    一.开发前准备 1.开发工具下载. 2.微信小程序设计指南 3.首先要通读一遍官方文档,看看都有哪些东西,都能干什么. 二.目录结构 1.components 小程序自定组件 (组件生命周期,组件间通 ...

  7. 第5节:开发微信小程序之文档详解

    前言 前面4节,我们讲解了为什么要开这一个专栏,以及第一个小程序Hello World,与其说第一个小程序,不如说微信开发者工具为我们创建了一个基础工程项目!然后,又开发了一个真正实现突破0的小程序- ...

  8. 微信小程序接口文档PHP,微信小程序API 导航

    微信小程序API 导航 一.wx.navigateTo(OBJECT) 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面. OBJECT 参数说明: 示例代码: ...

  9. 微信小程序之文档管理系统(含源码+论文+答辩PPT等)

    项目功能简介: 该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序做的论文管理系统前台和Java做的后台管理系统: 微信小程序--论文管理系统前台涉及技术:W ...

最新文章

  1. react 错误边界_React with GraphQL和错误边界中的自定义错误页面
  2. MySQL主从同步问题集
  3. javascript 之clientHeight、scrollHeight、offsetHeight
  4. python白名单验证-Python中XSS白名单过滤的实现
  5. 软件工程结对开发作业02
  6. xstream不映射字段_Mybatis_day03:输入映射和输出映射
  7. Cadence复用电路原理图及其PCB布局
  8. 更改chrome临时目录(可举一反三)
  9. 在VS2019发布独立程序与单一执行程序
  10. TemplateSyntaxError at XXXX或页面样式未生效
  11. 飞鸽传书2007 一个自己开发的软件
  12. 嵌入式培训经验分享——网络编程项目实战(在线电子词典)
  13. axios安装与基本方法
  14. Android获取外网和内网ip地址
  15. 理解图像中基本概念:色调、色相、饱和度、对比度、亮度
  16. Python查询物理机硬盘、主板、BIOS序列号(用于认证Windows设备)
  17. 第一篇 安卓系统的介绍及特点
  18. 01 【Sass的安装使用】
  19. rtl8811au黑苹果10.15_黑苹果10.15Catalina硬件选择+完美配置指南【接入智能家居】...
  20. DIY背景美化生成器微信小程序源码

热门文章

  1. canva五角星空html,使用canvas绘制一个五角星
  2. 收藏不迷路 —— Flutter 转场动效大合集
  3. R-squared居然是负数
  4. 关于iOS的自动弹出键盘问题
  5. Linux即时通讯软件都有哪些?政企要怎么挑选?
  6. uni-app实战之社区交友APP(4)首页开发
  7. 企业知识管理平台的作用及功能
  8. 微信支付网页授权域名只能填1个,怎么破,教你一招搞定
  9. matlab 大学物理,Matlab在大学物理课程教学中的应用
  10. 【c/c++编程】数学类问题:同余模、最大公约数、最小公倍数、素数判定