目前小程序的问题或限制

截止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

  1. 网上支持HTTP2的服务器:HTTPs://www.snel.com:443
  2. 在Chrome上查看该服务器为 HTTP2

    WechatIMG11

  3. 在模拟器上请求该接口,请求头的HTTP版本为HTTP1.1,模拟器不支持HTTP2

    WechatIMG12

  1. 由于小程序线上环境需要在项目管理里配置请求域名,而这个域名不是我们需要的请求域名,没必要浪费一个域名位置,所以打开不验证域名,TSL 等选项请求该接口,通过抓包工具表现与模拟器相同

    WechatIMG14

HTTP2服务器需要对小程序做兼容性适配

由上可以看出,在真机与模拟器都不支持 HTTP2,但是都是成功请求的,并且 响应头 里的 HTTP 版本都变成了HTTP1.1 版本,说明服务器对 HTTP1.1 做了兼容性适配。

  1. 本地新启一个 node 服务器,返回 JSON 为请求的 HTTP 版本

    WechatIMG16

  2. 如果服务器只支持 HTTP2,在模拟器请求时发生了一个 ALPN 协议的错误。并且提醒使用适配 HTTP1

    WechatIMG8

  3. 当把服务器的 allowHTTP1,设置为 true,并在请求时处理相关相关请求参数后,模拟器能正常访问接口,并打印出对应的 HTTP 请求版本

    WechatIMG15