开发中发现小程序一些API调用有限制导致程序不能正常流程走,下面记录一些常见的,开发时注意预防。
一、调用限制问题
接口调用频率规范
文档有几点优化方法:
1.获取定位信息 wx.getLocation
最开始是程序中多个页面拿到准确的定位地址,用的这个所以报错了。
还有使用了腾讯地图的地址逆解析(qqmap-wx-jssdk1.min.js),里面逻辑也有调用wx.getLocation。
var QQMapWX = require('./qqmap-wx-jssdk1.min.js');
var qqmapsdk = new QQMapWX({
key: key
});
qqmapsdk.reverseGeocoder({
location:point,//当没有传入经纬度的时候就会调用wx.getLocation
complete:res=>{}
})
基于上面的,就会出现多次调用wx.getLocation,然后就遇见了报错,该api走了fail;官方文档有写:
官方建议使用监听地理位置变化wx.onLocationChange拿经纬度,这样就不用频繁调用wx.getLocation来获取经纬度。
实际按照这个文档,30s的时间可以在存储的时候加上时间戳,下次调用的时候先判断一下间隔时间再调也行,间隔时间内拿上次的正常也没关系,因为1min内能走到哪儿呢,但是印象中好像调试的时候超过了30s调用了,依然有问题。可自行尝试。
使用上面的wx.onLocationChange有要求,小程序类目需要符合需求,且成功通过该API申请,否则提正式版审核会被拒绝。
2.获取微信信息
报错信息:wx.getUserProfile too frequently
之前用的wx.getUserInfo获取用户微信信息,后面发现微信做了更新,所以切换wx.getUserProfile获取用户微信信息,测试同事真机发现了这个报错。
小程序登录、用户信息相关接口调整说明
这种情况就可以参考文档的优化,可缓存微信信息,在一段时间内都取缓存,通常昵称跟头像更新频率也不是很高,所以一段时间取缓存没有问题。
通常,有很多程序会将获取微信放在登录前或登录页面做,给后台传递昵称头像等存储,建议产品设计的时候不做必须存储该信息,例如在个人中心展示,可在进入个人中心的时候再进行授权并存储信息。