目前小程序的问题或限制
截止20180810
包含但不限于:
小程序仍然使用 WebView 渲染,并非原生渲染。(部分原生)
服务端接口返回的头无法执行,比如:Set-Cookie。
依赖浏览器环境的 JS 库不能使用。
不能使用 npm,但是可以自搭构建工具或者使用 mpvue。(未来官方有计划支持)
不能使用 ES7,可以自己用babel+webpack自搭或者使用 mpvue。
不支持使用自己的字体(未来官方计划支持)。
可以用 base64 的方式来使用 iconfont。
小程序不能发朋友圈(可以通过保存图片到本地,发图片到朋友前。二维码可以使用B接口)。
获取二维码/小程序接口的限制。
- B 接口 scene 最大32个可见字符。
- AC 接口总共生成的码数量限制为 100,000,请谨慎调用。
- 真机扫描二维码只能跳转到线上版本,所以测试环境下只可通过开发者工具的通过二维码编译进行调试。
- 没有发布到线上版本的小程序页面路径会导致生成二维码失败,需要先将添加了页面的小程序发布到线上版本。
小程序推送只能使用“服务通知” 而且需要用户主动触发提交 formId,formId 只有7天有效期。(现在的做法是在每个页面都放入form并且隐藏以此获取更多的 formId。后端使用原则为:优先使用有效期最短的)
小程序大小限制 2M,分包总计不超过 8M
转发(分享)小程序不能拿到成功结果,原来可以。链接(小游戏造的孽)
拿到相同的 unionId 必须绑在同一个开放平台下。开放平台绑定限制:
- 50个移动应用
- 10个网站
- 50个同主体公众号
- 5个不同主体公众号
- 50个同主体小程序
- 5个不同主体小程序
公众号关联小程序,链接
- 所有公众号都可以关联小程序。
- 一个公众号可关联10个同主体的小程序,3个不同主体的小程序。
- 一个小程序可关联500个公众号。
- 公众号一个月可新增关联小程序13次,小程序一个月可新增关联500次。
一个公众号关联的10个同主体小程序和3个非同主体小程序可以互相跳转
品牌搜索不支持金融、医疗
小程序授权需要用户主动点击
小程序不提供测试 access_token
安卓系统下,小程序授权获取用户信息之后,删除小程序再重新获取,并重新授权,得到旧签名,导致第一次授权失败
开发者工具上,授权获取用户信息之后,如果清缓存选择全部清除,则即使使用了wx.checkSession,并且在session_key有效期内,授权获取用户信息也会得到新的session_key
小程序HTTP2支持情况
HTTP2支持情况:模拟器与真机均不支持
为了验证小程序对HTTP的支持适配情况,我找了两个服务器做测试,一个是网上搜索到支持HTTP2的服务器,一个是我本地起的一个HTTP2服务器。测试中所有请求方法均使用 wx.request
。
- 网上支持HTTP2的服务器:
HTTPs://www.snel.com:443
在Chrome上查看该服务器为 HTTP2
在模拟器上请求该接口,
请求头
的HTTP版本为HTTP1.1,模拟器不支持HTTP2
由于小程序线上环境需要在项目管理里配置请求域名,而这个域名不是我们需要的请求域名,没必要浪费一个域名位置,所以打开不验证域名,TSL 等选项请求该接口,通过抓包工具表现与模拟器相同
HTTP2服务器需要对小程序做兼容性适配
由上可以看出,在真机与模拟器都不支持 HTTP2,但是都是成功请求的,并且 响应头
里的 HTTP 版本都变成了HTTP1.1 版本,说明服务器对 HTTP1.1 做了兼容性适配。
本地新启一个 node 服务器,返回 JSON 为请求的 HTTP 版本
如果服务器只支持 HTTP2,在模拟器请求时发生了一个
ALPN
协议的错误。并且提醒使用适配 HTTP1当把服务器的
allowHTTP1
,设置为true
,并在请求时处理相关相关请求参数后,模拟器能正常访问接口,并打印出对应的 HTTP 请求版本