评论

隐私协议相关接口实际使用方式

隐私协议相关接口实际使用方式

隐私协议相关接口官方在回滚了多天之后终于滚回来并且提供了demo。

我这边实际研究demo后总结了实际的三种使用方法

首先要在设计到隐私协议相关功能的页面中增加隐私协议弹窗,wxml代码如下,wxss可以参考官方的demo

<view wx:if="{{showPrivacy}}" class="privacy">
  <view class="popup">
    <view>隐私弹窗内容....</view>
    <view bindtap="openPrivacyAgreement">点击查看隐私协议</view>
    <button id="disagreeBtn" bindtap="disagreePrivacy">不同意</button>
    <button id="agreeBtn" open-type="agreePrivacyAuthorization" bindagreeprivacyauthorization="agreePrivacy">同意</button>
  </view>
</view>

1、全局控制

页面加载时自动弹窗,同意后可以使用对应功能,不同意退出页面或者隐藏相关功能。
这种情况下,需要在onLoad里使用wx.getPrivacySetting获取隐私授权情况,没授权时弹出隐私弹窗。完整代码如下

Page({
  data: {
    showPrivacy: false // 控制隐私弹窗是否展示
  },
  openPrivacyAgreement() {
    // 查看隐私协议
    wx.openPrivacyContract()
  },
  disagreePrivacy() {
    // 关闭隐私弹窗
    this.setData({
      showPrivacy: false
    })
    // 这里是不同意隐私协议的后续操作,比如退出页面、隐藏相关功能等
  },
  agreePrivacy() {
    // 关闭隐私弹窗
    this.setData({
      showPrivacy: false
    })
    // 这里是同意隐私协议的后续操作,比如展示被隐藏的相关功能
  },
  onLoad() {
    if (wx.getPrivacySetting) {
      wx.getPrivacySetting({
        success: res => {
          if (res.needAuthorization) {
            // 打开隐私弹窗
            this.setData({
              showPrivacy: true
            })
          } else {
            // 用户已经同意过隐私协议,直接执行同意隐私协议的后续操作,比如展示被隐藏的相关功能
          }
        }
      })
    }
  }
})

2、按需使用

在使用到隐私接口时弹出隐私弹窗,同时隐私接口的流程会被挂起,用户同意后会继续执行,不同意则中止执行。
这种情况下,需要在onLoad里定义好监听隐私接口时的授权事件,也就是wx.onNeedPrivacyAuthorization,然后在用户点击同意或者不同意后调用回调接口 resolve 进行上报,完整代码如下

Page({
  data: {
    showPrivacy: false // 控制隐私弹窗是否展示
  },
  openPrivacyAgreement() {
    // 查看隐私协议
    wx.openPrivacyContract()
  },
  disagreePrivacy() {
    // 关闭隐私弹窗
    this.setData({
      showPrivacy: false
    })
    // 上报用户不同意隐私协议,隐私接口操作会被自动中止
    this.resolvePrivacyAuthorization({
      buttonId: 'disagreeBtn',
      event: 'disagree'
    })
  },
  agreePrivacy() {
    // 关闭隐私弹窗
    this.setData({
      showPrivacy: false
    })
    // 上报用户同意隐私协议,隐私接口操作会被自动继续执行
    this.resolvePrivacyAuthorization({
      buttonId: 'agreeBtn',
      event: 'agree'
    })
  },
  onLoad() {
    if (wx.onNeedPrivacyAuthorization) {
      wx.onNeedPrivacyAuthorization(resolve => {
        // 打开隐私弹窗
        this.setData({
          showPrivacy: true,
        })
        // 定义上报方法
        this.resolvePrivacyAuthorization = resolve
      })
    }
  }
})

3、全局控制和按需使用结合使用

这种情况是上面两种方式的结合,页面加载时弹出隐私弹窗,不管用户同意还是不同意都不需要做其他操作。然后用户在用到隐私接口时,根据用户是否同意再按需决定是否再次弹窗。
这种情况下,需要在onLoad里使用wx.getPrivacySetting获取隐私授权情况,没授权时弹出隐私弹窗。同时定义好监听隐私接口时的授权事件,也就是wx.onNeedPrivacyAuthorization,然后在用户点击同意或者不同意后调用回调接口 resolve 进行上报,完整代码如下

let pageOnload = true // 是否页面加载时弹窗

Page({
  data: {
    showPrivacy: false // 控制隐私弹窗是否展示
  },
  openPrivacyAgreement() {
    // 查看隐私协议
    wx.openPrivacyContract()
  },
  disagreePrivacy() {
    // 关闭隐私弹窗
    this.setData({
      showPrivacy: false
    })
    if (!pageOnload) {
      // 上报用户不同意隐私协议,隐私接口操作会被自动中止
      this.resolvePrivacyAuthorization({
        buttonId: 'disagreeBtn',
        event: 'disagree'
      })
    } else {
      pageOnload = false
    }
  },
  agreePrivacy() {
    // 关闭隐私弹窗
    this.setData({
      showPrivacy: false
    })
    if (!pageOnload) {
      // 上报用户同意隐私协议,隐私接口操作会被自动继续执行
      this.resolvePrivacyAuthorization({
        buttonId: 'agreeBtn',
        event: 'agree'
      })
    } else {
      pageOnload = false
    }
  },
  onLoad() {
    if (wx.getPrivacySetting) {
      wx.getPrivacySetting({
        success: res => {
          if (res.needAuthorization) {
            // 打开隐私弹窗
            this.setData({
              showPrivacy: true
            })
          }
        }
      })
    }
    if (wx.onNeedPrivacyAuthorization) {
      wx.onNeedPrivacyAuthorization(resolve => {
        // 打开隐私弹窗
        this.setData({
          showPrivacy: true,
        })
        // 定义上报方法
        this.resolvePrivacyAuthorization = resolve
      })
    }
  }
})

4、open-type按钮藕合使用

这个是目前最简单的方式,按照官方文档,在用open-type方式调用隐私功能的按钮的open-type里加上|agreePrivacyAuthorization就可以了,js部分代码基本不用做任何修改,示例如下

<button open-type="getPhoneNumber|agreePrivacyAuthorization" bindgetphonenumber="handleGetPhoneNumber">同意隐私协议并授权手机号</button>

这种方式,不需要上报同意事件,不需要设计隐私协议弹窗,不需要“不同意”按钮。当然,我建议在现有页面上增加一个查看隐私协议的入口。

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

5 个评论

  • zln
    zln
    2023-09-07

    提示 resolvePrivacyAuthorization is not a function


    2023-09-07
    赞同
    回复
  • 笛笛
    笛笛
    2023-09-03

    请问大佬,第一种方法,是一次性给自己程序中所有未授权的接口 授权吗?比如我的程序用到了4个隐私接口,1个授权了3个没授权,我通过wx.getPrivacySetting判断出还有隐私没有授权过,此时客户选择同意授权,这3个之前没授权的此刻是否都被授权了呢?

    2023-09-03
    赞同
    回复 2
    • 笛笛
      笛笛
      2023-09-03
      我看到了这个,应该是所有接口都可以用了
      2023-09-03
      1
      回复
    • Serendipity
      Serendipity
      2023-09-04回复笛笛
      嗯嗯,我们是用的 getPhoneNumber 接口做的登录,看到文档说的可以和同意协议的type值耦合使用。那么就相当于,在点击授权手机号登录的时候也同意的协议。好像啥都解决了。 不知道是不是这样。然后,说弹框啥的也不需要展示了。

      有那个大佬给解读一下吗?
      2023-09-04
      回复
  • up
    up
    2023-08-27

    请问现在可以了?

    2023-08-27
    赞同
    回复 2
    • up
      up
      2023-08-27
      wx.onNeedPrivacyAuthorization(resolve => {
          console.log('我还是进不来,基础库3.0,__usePrivacyCheck__ true已设置,缓存已清除,mp后台通过状态')
        })
      2023-08-27
      回复
    • 多喜乐 长安宁
      多喜乐 长安宁
      2023-08-28
      不是进不来 这段代码执行的前提条件是 1·你调用了微信的相关api接口 比如获取手机号、定位。2·你还没有授权同意隐私协议 并不是你写了这段代码就一定会执行
      2023-08-28
      1
      回复
  • Jerry
    Jerry
    2023-08-24

    第三个例子,不建议这样使用。最好是参考官方demo3,用wx.onNeedPrivacyAuthorization、wx.requirePrivacyAuthorize

    2023-08-24
    赞同
    回复
  • 游戏人生
    游戏人生
    2023-08-24

    666,很棒

    2023-08-24
    赞同
    回复
登录 后发表内容