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

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

相关推荐
陪我一起学编程23 分钟前
创建Vue项目的不同方式及项目规范化配置
前端·javascript·vue.js·git·elementui·axios·企业规范
鱼鱼说测试36 分钟前
postman接口自动化测试
开发语言·lua
從南走到北42 分钟前
JAVA国际版东郊到家同城按摩服务美容美发私教到店服务系统源码支持Android+IOS+H5
android·java·开发语言·ios·微信·微信小程序·小程序
_不会dp不改名_1 小时前
C++ 20: Concepts 与Requires
开发语言·c++20
Summer不秃1 小时前
uniapp 手写签名组件开发全攻略
前端·javascript·vue.js·微信小程序·小程序·html
coderklaus1 小时前
Base64编码详解
前端·javascript
韭菜钟2 小时前
Qt从qmake迁移到cmake的记录
开发语言·qt
浮桥2 小时前
vue3 - 组件间的传值
前端·javascript·vue.js
少陵野小Tommy2 小时前
Python能用古诗词数据库做什么7:根据标题、诗句查找诗歌
开发语言·数据库·python
wuzuyu3652 小时前
生成一个竖直放置的div,宽度是350px,上面是标题固定高度50px,下面是自适应高度的div,且有滚动条
前端·javascript·css