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

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

相关推荐
88号技师2 分钟前
2025年7月一区SCI优化算法-Logistic-Gauss Circle optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
uuai5 分钟前
echarts不同版本显示不一致问题
前端·javascript·echarts
自然 醒11 分钟前
企业微信自建应用开发详细教程,如何获取授权链接?如何使用js-sdk?
javascript·vue.js·企业微信
再睡一夏就好16 分钟前
【C++闯关笔记】unordered_map与unordered_set的底层:哈希表(哈希桶)
开发语言·c++·笔记·学习·哈希算法·散列表
potato_155421 分钟前
现代C++核心特性——内存篇
开发语言·c++·学习
lly20240623 分钟前
C# 继承
开发语言
August_._23 分钟前
【JAVA】基础(一)
java·开发语言·后端·青少年编程
Moonbit38 分钟前
MoonBit Pearls Vol.12:初探 MoonBit 中的 Javascript 交互
javascript·后端·面试
chenbin___1 小时前
react native中 createAsyncThunk 的详细说明,及用法示例(转自通义千问)
javascript·react native·react.js
软件开发技术深度爱好者1 小时前
Python类中方法种类介绍
开发语言·python