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

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

相关推荐
牛奔6 小时前
Go 如何打印调试深层或嵌套的结构体
开发语言·后端·golang
geovindu7 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
学逆向的7 小时前
汇编——JCC指令
开发语言·汇编·网络安全
mayaairi7 小时前
JS循环语句深度解析:嵌套for、while与do...while
开发语言·前端·javascript
To_OC8 小时前
啃完流式输出:从一个卡顿的 LLM 接口开始,我搞懂了数据流到底怎么 “流”
前端·javascript·llm
kite01218 小时前
Go语言Map深度解析与最佳实践
开发语言·后端·golang
l1564694810 小时前
突围!图文混合知识库难以解析,Kimi-K3 原生视觉架构深耕知识工作,DMXAPI 统一接口,缩短项目开发周期
java·大数据·开发语言
charlie11451419110 小时前
现代C++工程实践 WeakPtr 实战(三):WeakPtrFactory 与「最后成员」惯用法
开发语言·c++·开源项目·现代c++
海上彼尚11 小时前
Nodejs也能写Agent - 22.LangGraph篇 - 上下文工程
前端·javascript·人工智能·langchain·node.js
IT小盘11 小时前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python