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>
页面加载时自动弹窗,同意后可以使用对应功能,不同意退出页面或者隐藏相关功能。
这种情况下,需要在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 {
- // 用户已经同意过隐私协议,直接执行同意隐私协议的后续操作,比如展示被隐藏的相关功能
- }
- }
- })
- }
- }
- })
在使用到隐私接口时弹出隐私弹窗,同时隐私接口的流程会被挂起,用户同意后会继续执行,不同意则中止执行。
这种情况下,需要在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
- })
- }
- }
- })
这种情况是上面两种方式的结合,页面加载
- 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 进行上报,完整代码如下