• 微信小程序拒绝授权后重新拉起授权窗口


    问题:

    在首次进入小程序时,我们常常会收到一些获取权限的申请,比如「获取地理位置权限」、需要微信登录时请求「获得你的公开信息(昵称、头像等)」。对于这些权限申请,开发者当然希望获得所有权限,而用户拒绝授权的情况不免存在。那么作为开发人员在考虑「用户拒绝授权」这类异常情况出现时,应该提前做好未获得授权时的兼容处理,以及用户希望授权时的再次提醒。

    查看官方文档:

    授权

    部分接口需要经过用户授权同意才能调用。我们把这些接口按使用范围分成多个scope,用户选择对 scope来进行授权,当授权给一个scope之后,其对应的所有接口都可以直接使用。此类接口调用时:

    • 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
    • 如果用户已授权,可以直接调用接口;
    • 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。

    ......

    授权有效期

    一旦用户明确同意或拒绝过授权,其授权关系会记录在后台,直到用户主动删除小程序。

    最佳实践

    在真正需要使用授权接口时,才向用户发起授权申请,并在授权申请中说明清楚要使用该功能的理由。

    分析:

    官方文档,并没有给出明显的说明和解决示例,但是我们还是可以通过上面这句话得到解决方式,当用户拒绝授权后调用授权弹窗接口 wx.authorize,不会再次出现弹窗,但是会进入接口的fail回调,那我们就可以在fail回调里想办法再次进行授权操作,肯定不能调用 wx.authorize,那应该怎么办呢?通过查资料我们发现,微信小程序其实是有一个设置功能界面的,在设置界面里面我们可以对小程序进行再次授权。然而,通过官方文档我们可以知道,有一个API可以实现打开设置界面的功能,就是wx.openSetting,可以调起客户端小程序设置界面,返回用户设置的操作结果。但是设置界面只会出现小程序已经向用户请求过的权限,我们可以按照这个思路解决问题。

    示例代码:

    // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
        wx.getSetting({
          success(res) {
            console.log(!res.authSetting['scope.userLocation']);
            if (!res.authSetting['scope.userLocation']) {
              wx.authorize({
                scope: 'scope.userLocation',
                success() {
                  // 用户已经同意
                  //其他操作...
                  console.log("用户已经同意位置授权");
                },
                fail(){
                  console.log("用户已经拒绝位置授权");
                  that.openConfirm();//如果拒绝,在这里进行再次获取授权的操作
                }
              })
            }
           //其他操作..
          }
        });
    
    //再次获取授权
    //当用户第一次拒绝后再次请求授权
      openConfirm: function () {
        wx.showModal({
          content: '检测到您没打开此小程序的定位权限,是否去设置打开?',
          confirmText: "确认",
          cancelText: "取消",
          success: function (res) {
            console.log(res);
            //点击“确认”时打开设置页面
            if (res.confirm) {
              console.log('用户点击确认')
              wx.openSetting({
                success: (res) => { }
              })
            } else {
              console.log('用户点击取消')
            }
          }
        });
      }
  • 相关阅读:
    Codeforces 220C
    Codeforces 697D
    HDU 4417
    Codeforces 396C
    Codeforces 246C
    HDU 6333
    HDU 3389
    总结:树上启发式合并
    HDU 6319
    Codeforces 1009G
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/11762288.html
Copyright © 2020-2023  润新知