微信小程序隐私协议相关接口实际使用方式

javascript 复制代码
<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获取隐私授权情况,没授权时弹出隐私弹窗。完整代码如下

javascript 复制代码
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 进行上报,完整代码如下

javascript 复制代码
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、全局控制和按需使用结合使用

这种情况是上面两种方式的结合,页面加载

javascript 复制代码
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
      })
    }
  }
})

时弹出隐私弹窗,不管用户同意还是不同意都不需要做其他操作。然后用户在用到隐私接口时,根据用户是否同意再按需决定是否再次弹窗。

这种情况下,需要在onLoad里使用wx.getPrivacySetting获取隐私授权情况,没授权时弹出隐私弹窗。同时定义好监听隐私接口时的授权事件,也就是wx.onNeedPrivacyAuthorization,然后在用户点击同意或者不同意后调用回调接口 resolve 进行上报,完整代码如下

相关推荐
神明不懂浪漫13 分钟前
【第二章】库、表、增删改查操作
开发语言·数据库·经验分享·笔记
传奇开心果编程14 分钟前
【Rust入门知识点学与练】第11课:HashMap 键值对集合
开发语言·学习·rust
yume_sibai37 分钟前
03-Rust 函数式编程特性(闭包 + Iterator + Option/Result + 链式调用)
开发语言·后端·rust
奈斯先生Vector1 小时前
AIGC 视频生成实战:用 Kling Video 拆解文生视频、图生视频与完整工作流
开发语言·人工智能·windows·python·aigc·音视频
小玮看世界1 小时前
[Python]螺旋遍历 vs 最短路径:方向控制类算法的“同源异流”
开发语言·python·算法
BillKu1 小时前
vue3 字符串排序 localeCompare,确保排序为 “B01“, “B10“, “B2“
前端·javascript·vue.js
OPEN-F1 小时前
ROS2系列教程:tf2坐标变换详解(C++/Python)
开发语言·c++·python
然我1 小时前
从 Service 到生命周期:Agent Runtime 的插件内核
前端·javascript·agent
XR1234567881 小时前
医院基础网络改造升级选型深度解析
开发语言·网络·php
reasonsummer1 小时前
【办公类-146-05】20260901《一分园、二分园四大教育》(优化版:标题excle+复制AI文字+Python占位符录入)
开发语言·数据库·c#