最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何优雅的获取用户授权

    正文概述 掘金(muchan92)   2021-02-24   1484

    言而有信,这篇文章来啦~

    小程序 只有在需要时才获取用户授权
    这是一个很普遍、很合理的可以提高用户体验的需求,但是一般实现起来却并不简单,不知道大家都是怎么处理的,是否愉快,反正我第一次面对小程序的 API 时,是非常难受的。

    幸好,经过一番思考,找到了一种优雅的实现方案。(绝对 muchan92 风格)
    代码如诗,这个方案优雅到不必赘述,直接看代码就好了。

    <template>
      <view>
        <button :open-type="xdata.requireUser" @getuserinfo="getuserinfo"
          @click="clockin">打卡(演示小程序获取授权)</button>
      </view>
    <template>
    
    <script>
    export default {
      data() {
        return {
        }
      },
      methods: {
        async clockin() {
          // 如果没有授权过,会自动唤起授权,
          // 同时,如果用户同意授权,那么会一并执行后续的逻辑(用户不再需要点击两次)
          // #ifdef MP-WEIXIN
          if (await uni.$requireUser()) {
            return
          }
          // #endif
    
          // TODO: 调用接口等
          uni.showToast({ title: '打卡成功' })
        },
      },
    }
    </script>
    

    代码如诗,自述实现。

    // #ifdef MP-WEIXIN
    let requireUserPromise = null
    let requireUserResolve = null
    uni.$requireUser = async () => {
      return requireUserPromise = requireUserPromise || new Promise((resolve) => {
        requireUserResolve = resolve
        // 已经授权过(适用于第一次调用)
        if (!uni.$xdata.requireUser) {
          resolve(false)
        }
      })
    }
    // #endif
    
    uni.$xdata = {
      requireUser: 'getUserInfo', // TODO: 第一次应该根据后台数据,判断是否已经授权过,若已授权则应设置为 ''
    }
    
    Vue.use(function (Vue, options) {
      Vue.mixin({
        data() {
          return {
            xdata: uni.$xdata,
          }
        },
      })
    
      Object.assign(Vue.prototype, {
        // #ifdef MP-WEIXIN
        async getuserinfo({ detail }) {
          uni.$requireUser()
          if (detail.errMsg == 'getUserInfo:ok') {
            // TODO: 同步用户信息 detail.userInfo
            uni.$xdata.requireUser = '' // 标记无需再次获取授权
            requireUserResolve(false)
          } else {
            requireUserPromise = null // 置空,以便可以再次唤起授权
            requireUserResolve(true)
          }
        },
        // #endif
      })
    })
    

    关注作者,会有更多 muchan92 风格

    相关链接

    上一篇 《你欠我一个全局组件,咋办?》


    起源地下载网 » 如何优雅的获取用户授权

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元