ios系统微信小程序onShow或onLoad中唤起扫码的问题

这个问题可能很多人之前都碰到过,但是后来其实官方解决了这个问题,可以在onShow或onLoad中使用wx.scanCode唤起扫码,所以后期应该不会有这个问题,但是出于兼容旧版本微信和ios系统,其实还是应该想想办法。

今天这里要说的是一个以然存在问题还没有被解决的问题,以然是ios系统,也是在onShow或onLoad中唤起扫码的问题,不同的是,如果你把扫码放到一个公用的方法里面,比如放在了app.js中,那么在onShow或onLoad中调用这个函数100%不能唤起扫码。

造成上述两个不同场景下的同一个问题的原因,估计是在onShow或onLoad的时候,系统还没有来得及加载必要的东西进来。

解决方法:

setTimeout(function(){
//调用的公有方法或者wx.scanCode
},500);

小程序无法获取昵称和头像的解决办法

最近一个小程序的项目,做到一半的时候突然发现新用户无法正常获取到用户的昵称、头像等开放数据,非常郁闷,虽然只是开发版,但是遇到这种情况上线肯定不行,只能找解决办法。
无意中在微信开发工具的控制台看到这样一段话:

VM7110:1 获取 wx.getUserInfo 接口后续将不再出现授权弹窗,请注意升级

好吧,微信这么重大的升级,尽然不知道,看文档:

wx.getUserInfo(OBJECT)

注意:此接口有调整,使用该接口将不再出现授权弹窗,请使用 <button open-type=”getUserInfo”></button> 引导用户主动进行授权操作

  1. 当用户未授权过,调用该接口将直接报错
  2. 当用户授权过,可以使用该接口获取用户信息

现在,聪明人都知道是什么问题了,话说官方这样做真的提高用户体验了吗?

解决办法:

1.在页面中检查用户是不是授权,如果没有授权,那么引导授权,最好的办法是跳转到一个新的专门授权的页面中,示例代码如下。

<!--wxml-->
<!-- 如果只是展示用户头像昵称,可以使用 <open-data /> 组件 -->
<open-data type="userAvatarUrl"></open-data>
<open-data type="userNickName"></open-data>
<!-- 需要使用 button 来授权登录 -->
<button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权登录</button>
<view wx:else>请升级微信版本</view>

2.在页面的js文件的onload中,检查是不是授权,没有授权,跳转到授权页授权:

Page({
  data: {
    canIUse: wx.canIUse('button.open-type.getUserInfo')//检查有没有使用权限
  },
  onLoad: function() {
    // 查看是否授权
    wx.getSetting({
      success: function(res){
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称
          wx.getUserInfo({
            success: function(res) {
              console(res.userInfo)
            }
          })
        }
      }
    })
  },
  bindGetUserInfo: function(e) {
    console.log(e.detail.userInfo)
  }
})

3.授权之后,就可以正常使用wx.getUserInfo获取用户数据了,获取成功后,跳转回之前的页面。