使用uniapp搭建了一个企业微信的微应用,根据需求需要实现获取用户定位功能,需要用到企业微信的定位接口,根据企业微信开发者文档的流程,先鉴权后获取定位。
uniapp在企业微信上的ios端鉴权失败
原因,uniapp内置了个全局变量wx,所以在uniapp上得通过jWeixin来调用,但在ios端依然是wx,如代码所示,通过navigator来区分。
if (/(Android)/i.test(navigator.userAgent)) {
Vue.prototype.jwx = jWeixin
}
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
Vue.prototype.jwx = wx
}
鉴权是写在main.js上并调用,并在其它页面调用定位接口,在本地环境上测试并无问题。
uniapp在企业微信上的ios端偶现无法调用sdk接口(定位接口不准)
上传到用户环境后,发现在ios端定位跟实际定位相差太大,特别是在网络卡顿的时候,但在安卓端并无问题。通过排查,ios端使用了IP定位。
通过排查使用vconsole输出在需要调用定位接口的页面上输出jwx(jWeixin),发现ios端跟安卓端的输出不同。iOS端的jwx(wx)为uniapp内置的wx。
遂在苹果端依然用jweixin,在该页面输出的jwx跟安卓端一致了,但此时离谱的是在main.js上的鉴权会偶尔失败,特别是在网络卡顿的时候。
最后的解决方法是把鉴权方法搬到需要调用sdk的页面,在main.js上统一用jWeixin不再区分,推测可能跟鉴权时机和脚本加载有关系,具体问题具体分析,如图下所示根据实际情况使用wx或者jWeixin,在实际应用中可通过vconsole来做移动端的问题排查。