评论

关于新版隐私协议接口wx.onNeedPrivacyAuthorization的解读以及实现代码(二)

关于新版隐私协议接口wx.onNeedPrivacyAuthorization的解读以及实现代码(二),添加了针对昵称输入框input的type="nickname"的代码

官方公告地址:

https://developers.weixin.qq.com/community/develop/doc/00042e3ef54940ce8520e38db61801

目前,开发工具或者体验版的小程序,调试基础库改成3.0.0可以适配测试,线上版本9月15日之后生效,所以这之前需要尽快改完,发布一版,否则到了9月15号之后 线上就会生效报错了。


这是官方的Demo地址,也是每个页引用一个全局的组件,个人感觉太过于繁琐了,可以参考以下我整理的代码。

https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html


其实改起来也很简单,以下是实现步骤和代码:

1、首先看一下这个网址,里边包含涉及到的隐私的接口,这些接口都要适配一下

https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/miniprogram-intro.html

在以上接口用到的页面,需要画一下类似上边的弹窗(这个弹窗可以全局定义个组件,方便多个页面共用),然后里边蓝字可以点击后调用wx.openPrivacyContract(Object object)接口即可,会自动跳转打开隐私协议页面。

拒绝按钮可以加一个点击事件,然后在事件里这样写,官方demo里也没有加id。

<button class="btn-refuse" catch:tap="clickRefuse">拒绝</button>
refuse() {
    this.resolvePrivacyAuthorization({
      event: 'disagree'
    })
  },


同意按钮比较特殊,布局需要用button这样写,记得给button加一个Id

<button id="agree-btn" class="btn-agree" open-type="agreePrivacyAuthorization"
 bindagreeprivacyauthorization="handleAgreePrivacyAuthorization">同意</button>


然后在handleAgreePrivacyAuthorization里就可以获取到点击事件,这样写

handleAgreePrivacyAuthorization() {
    this.resolvePrivacyAuthorization({
      buttonId'agree-btn',
      event'agree'
    })
  },


2、然后每个有隐私接口的页面引用自己的组件,代码如下

{
  "usingComponents": {
    "agreement""/components/agreement/agreement"
  }
}


布局引用

<!-- 隐私授权弹窗 -->
<agreement id="agreement" frameTitle="温馨提示" bind:refuse="refuse" bind:agree="agree"></agreement>


让组件弹窗显示,这样写: this.selectComponent('#agreement').show();


3、最后需要在用到隐私接口的页面的onShow里加上以下监听代码,在这里边让自定义的隐私弹窗显示出来即可。

  onShow: function () {
    let that = this;
    if (wx.onNeedPrivacyAuthorization) {
      wx.onNeedPrivacyAuthorization(resolve => {
        this.selectComponent('#agreement').show();//这里是让组件弹窗显示
        this.resolvePrivacyAuthorization = resolve
      })
    }
    }


以上代码加上就可以了,如果业务逻辑用到了需要判断是否授权过,可以加上 wx.getPrivacySetting(Object object)去获取是否授权过,用不到可以不加这个判断。

//=======================以下是针对昵称输入框input的type="nickname"的代码===========================

注意:以下代码只是针对input另外加的,上边提到的代码也都要加上才能正常弹出弹窗

布局,在input的外层View加touch事件,然后加一个focus动态控制焦点。

<view catch:touchstart="handleTouchInput">
    <input type="nickname" class="text" bindinput="listenerContent" placeholder="输入名称" maxlength="10"
     value='{{name}}' focus="{{focus}}" />
</view>


然后,touch事件:

 handleTouchInput() {
    let that = this
    if (wx.getPrivacySetting) {
      wx.getPrivacySetting({//获取是否需要弹出
        successres => {
          if (res.needAuthorization) {
            wx.requirePrivacyAuthorize({//该接口请求隐私协议,会自动触发上边的wx.onNeedPrivacyAuthorization
              success() => {
                that.setData({
                  focustrue,
                })
              },
              fail() => {},
              complete() => {}
            })
          } else {
            that.setData({
              focustrue,
            })
          }
        },
        fail() => {},
        complete() => {}
      })
    } else {
      this.setData({
        focustrue
      })
    }
  },


这样就可以了,记得把上边提到的监听代码都加上。

最后一次编辑于  2023-08-23  
点赞 6
收藏
评论

37 个评论

  • 一笑皆春
    一笑皆春
    2023-08-24

    记得在 app.json 中配置 __usePrivacyCheck__: true ,才能启用隐私协议接口的验证。

    2023-08-24
    赞同 4
    回复 9
    • 17167101167
      17167101167
      2023-08-31
      后台还需要配置什么吗?
      2023-08-31
      回复
    • 一笑皆春
      一笑皆春
      2023-09-11回复17167101167
      最新补充,可以在首页的onShow里这样写,一次性请求,就不用每个页面都加了
       if (wx.onNeedPrivacyAuthorization) {
            wx.onNeedPrivacyAuthorization(resolve => {
              this.selectComponent('#agreement').show();
              this.resolvePrivacyAuthorization = resolve
            })
            wx.requirePrivacyAuthorize({
              success: res => {},
              fail: () => {},
              complete: () => {}
            })
          }
      2023-09-11
      1
      回复
    • 焦糖布丁
      焦糖布丁
      2023-09-11回复一笑皆春
      为什么我的编辑器显示 this.resolvePrivacyAuthorization 不是一个function啊
      2023-09-11
      回复
    • 一笑皆春
      一笑皆春
      2023-09-11回复焦糖布丁
      onShow里初始化 wx.onNeedPrivacyAuthorization了嘛
      2023-09-11
      回复
    • 〖〗
      〖〗
      2023-09-11
      我的也是这个报错,但是我看我的 wx.onNeedPrivacyAuthorization好像没有触发,所以resolvePrivacyAuthorization没有赋值
      2023-09-11
      回复
    查看更多(4)
  • momo
    momo
    2023-08-24

    有碰到调用getPhoneNumber弹隐私,同意后还是下面错误的吗?

    getPhoneNumber:fail privacy permission is not authorized,errno:104

    再点一次才弹申请获取并验证手机号页面

    2023-08-24
    赞同 2
    回复 8
    • Serendipity
      Serendipity
      2023-09-05
      可能是,你没有用reslove正确的上报给小程序
      2023-09-05
      回复
    • momo
      momo
      2023-09-05回复Serendipity
      之前确实是不行,应该是官方后面有改。 现在是可以了
      2023-09-05
      回复
    • Serendipity
      Serendipity
      2023-09-06回复momo
      我也用到了这个 getPhoneNumber 第一次点拒绝会在控制台报你上面发的错误 “getPhoneNumber:fail privacy permission is not authorized,errno:104”,怎么规避不让他报错呀?
      2023-09-06
      回复
    • momo
      momo
      2023-09-06回复Serendipity
      都拒绝了,肯定会 报。
      2023-09-06
      回复
    • Monica
      Monica
      2023-09-06回复momo
      铁子,我想问下他官方那个示例demo怎么打开啊,你们能打开吗?我点开页面就显示:"请打开工具手动导入,若未安装可点击下载",开发者工具也是打开了的,也是稳定版,就很无语。。
      2023-09-06
      回复
    查看更多(3)
  • MIN
    MIN
    2023-08-30

    反馈一个bug:

    开发工具调试基础库改成3.0.1 ,bindagreeprivacyauthorization 就无法调用了,切换回 3.0.0 正常

    2023-08-30
    赞同 1
    回复
  • Orchid
    Orchid
    03-07

    官方出弹筐了,我要怎么在首页页面加载完成的第一时间就让隐私协议的弹框弹出呀?

    03-07
    赞同
    回复 1
    • 一笑皆春
      一笑皆春
      03-07
      如果用官方的弹窗,就不需要改任何东西,在调用接口的时候会自动弹出,如果想在首页就弹出,那么就得自定义弹窗
      03-07
      回复
  • 平常心
    平常心
    2023-10-28

    官方隐私协议弹框支持进站就弹不 ?如果可以实现的话,提审官方能通过不?

    2023-10-28
    赞同
    回复
  • 章妮
    章妮
    2023-10-17

    官方提供的开发者自主获取用户《隐私指引》授权的能力有问题,在通过自定义弹窗获取用户《隐私指引》授权后,当发起用户隐私信息调用时,依然弹出了微信官方的隐私指引授权弹窗,又弹一次,有人遇到一样的问题吗???

    2023-10-17
    赞同
    回复 4
    • 一笑皆春
      一笑皆春
      2023-10-17
      可能
      2023-10-17
      回复
    • 房东的猫
      房东的猫
      2023-10-25回复一笑皆春
      什么情况下会有两个弹窗呢,我理解的是适配了就会展示自己的弹窗。没适配展示官方的弹窗呀
      2023-10-25
      回复
    • 一笑皆春
      一笑皆春
      2023-10-25回复房东的猫
      正常情况下是这样的,他们出现两个弹窗是因为集成的不对
      2023-10-25
      回复
    • X
      X
      2023-11-13回复一笑皆春
      用官方的弹窗点了同意怎么进入了空白页面
      2023-11-13
      回复
  • Daemon
    Daemon
    2023-09-26

    现在是不是不用开发了,微信自动适配?

    2023-09-26
    赞同
    回复 2
    • 一笑皆春
      一笑皆春
      2023-09-27
      嗯是的,但是小程序隐私协议还是要更新的
      2023-09-27
      回复
    • Daemon
      Daemon
      2023-09-28回复一笑皆春
      那昵称和头像的微信是怎么适配的?点击有open_type的button先弹?
      2023-09-28
      回复
  • 火山哥哥🎃
    火山哥哥🎃
    2023-09-22

    官方隐私弹窗马上就要出来了,啥都不用干

    2023-09-22
    赞同
    回复 1
    • Lucky
      Lucky
      2023-10-20
      哎,刚出这要求的时候我就觉得这活官方来干多方便,害的我吭哧吭哧改了几十个小程序,现在不知道要不要改回去还是就用自己的算了。
      2023-10-20
      回复
  • Serendipity
    Serendipity
    2023-09-16

    官方出弹框了,让咱们白忙活一场啊,淦

    2023-09-16
    赞同
    回复 3
    • Joy
      Joy
      2023-09-21
      怎么使用呢? 官方文档写得太TM烂了
      2023-09-21
      回复
    • Serendipity
      Serendipity
      2023-10-07回复Joy
      开发者不用管了吧
      2023-10-07
      回复
    • 泾河
      泾河
      2023-10-09
      应该都不用配置了,官方自己搞定了
      2023-10-09
      回复
  • ℡浅念
    ℡浅念
    2023-09-14

    我是用uniapp 开发的 wx.getPrivacySetting一直返回false怎么办,在真机上调试也返回false,也有配置 "__usePrivacyCheck__": true

    2023-09-14
    赞同
    回复 2
    • 。
      2023-09-23
      我也是你解决不得
      2023-09-23
      回复
    • Daemon
      Daemon
      2023-09-28
      需要在编译后的小程序代码都app.json配置__usePrivacyCheck__": true哦
      2023-09-28
      回复

正在加载...

登录 后发表内容