评论

微信小程序处理隐私保护协议授权,在多个页面处理隐私弹窗逻辑,同时演示了如何处理多个隐私接口同时调用

涉及处理用户个人信息的小程序开发者,需通过弹窗等明显方式提示用户阅读隐私政策等收集使用规则。 为规范开发者的用户个人信息处理行为,保障用户合法权益,微信要求开发者主动同步微信当前用户已阅读并同意小程

1.新建公共组件privacy-popup,协议弹框组件。

index.js

// 隐私保护处理回调

let privacyHandler;

// 隐私协议方法回调

let privacyResolves = new Set();

// 关闭其他页面钩子函数

let closeOtherPagePopUpHooks = new Set()

// 判断基础库是否支持调用

if (wx.onNeedPrivacyAuthorization) {

  // 当前基础库支持api wx.onNeedPrivacyAuthorization

  wx.onNeedPrivacyAuthorization(resolve => {

    console.log('触发 onNeedPrivacyAuthorization')

    if (typeof privacyHandler === 'function') {

      privacyHandler(resolve)

    }

  })

else {

  console.error('当前基础库不支持api wx.onNeedPrivacyAuthorization');

}

// 关闭其他页面隐私保护授权弹框

const closeOtherPagePopUp = (closePopUp) => {

  closeOtherPagePopUpHooks.forEach(hook => {

    if (closePopUp !== hook) {

      hook()

    }

  })

}


Component({

  data: {

    title: "用户隐私保护提示",

    urlTitle: "《滇约充电小程序隐私保护指引》",

    showPrivacy: false

  },

  lifetimes: {

    // 在组件实例进入页面节点树时执行

    attached: function () {

      // 关闭弹框

      const closePopUp = () => {

        this.disPopUp()

      }

      // 方法回调

      privacyHandler = resolve => {

        privacyResolves.add(resolve)

        this.popUp()

        // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗

        closeOtherPagePopUp(closePopUp)

      }

      this.closePopUp = closePopUp

      closeOtherPagePopUpHooks.add(this.closePopUp)

    },

    // 在组件实例销毁时执行

    detached: function () {

      closeOtherPagePopUpHooks.delete(this.closePopUp)

    }

  },

  pageLifetimes: {

    show() {

      if (this.closePopUp) {

        privacyHandler = resolve => {

          privacyResolves.add(resolve)

          this.popUp()

          // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗

          closeOtherPagePopUp(this.closePopUp)

        }

      }

    }

  },

  methods: {

    // 同意协议处理

    handleAgree(e) {

      this.disPopUp()

      // 这里演示了同时调用多个wx隐私接口时要如何处理:让隐私弹窗保持单例,点击一次同意按钮即可让所有pending中的wx隐私接口继续执行

      privacyResolves.forEach(resolve => {

        resolve({

          event: 'agree',

          buttonId: 'agree-btn'

        })

      })

      privacyResolves.clear()

    },

    // 拒绝协议处理

    handleDisagree(e) {

      this.disPopUp()

      privacyResolves.forEach(resolve => {

        resolve({

          event: 'disagree',

        })

      })

      privacyResolves.clear()

    },

    // 弹起授权弹框

    popUp() {

      if (this.data.showPrivacy === false) {

        this.setData({

          showPrivacy: true

        })

      }

    },

    // 关闭授权弹框

    disPopUp() {

      if (this.data.showPrivacy === true) {

        this.setData({

          showPrivacy: false

        })

      }

    },

    // 跳转协议地址

    openPrivacyContract() {

      wx.openPrivacyContract({

        success: res => {

          console.log('openPrivacyContract success')

        },

        fail: res => {

          console.error('openPrivacyContract fail', res)

        }

      })

    }

  }

})

index.wxml

<!--components/privacy-popup/index.wxml-->

<van-popup show="{{ showPrivacy }}" z-index="{{999}}" round custom-style="margin-top: -100rpx;">

  <view class="privacy-title" bindtap="deno">

    {{title}}

  </view>

  <view class="privacy-content">

    <view class="privacy-text">

      我们非常重视您的个人信息和隐私保护。为了更好地保障您的个人权益,在您使用【滇约充电小程序】前,请您充分阅读并理解

      <text class="privacy-text-name" bindtap="openPrivacyContract">{{urlTitle}}</text>。如果您同意以上隐私政策条款,请点击“同意”开始使用小程序。我们将严格遵照经您同意的各项条款使用您的个人信息,以便为您提供更好的服务。

    </view>

  </view>

  <view class="privacy-but">

    <button class="refuse-but" bindtap="handleDisagree">

      拒绝

    </button>

    <button class="agree-but" id="agree-btn" open-type="agreePrivacyAuthorization" bindagreeprivacyauthorization="handleAgree">

      同意

    </button>

  </view>

</van-popup>

index.json 和 index.wxss 文件自行编写

2.在需要使用的页面引入 privacy-popup 组件:例如 test页面引入,这样即可完成隐私协议弹框授权,会在你点击同意以后继续执行原来的业务逻辑

<view >

  <button bindtap="selectImage">选择图片</button>

</view>

<!-- 隐私协议保护授权 -->

<privacy-popup>

</privacy-popup> 

3.参考图











最后一次编辑于  2023-09-06  
点赞 1
收藏
评论

2 个评论

  • 。。
    。。
    2023-09-14

    使用了wx.login获取code,后端用code获取openid需要做这个吗?

    2023-09-14
    赞同
    回复 5
  • 😶
    😶
    2023-09-07

    这个意思是不是有n个页面隐私授权, 这个弹出框要弹出n次, 那如果一个页面有n个隐私授权, 那是弹出一次还是n次

    2023-09-07
    赞同
    回复 2
    • 那只是梦cium
      那只是梦cium
      2023-10-18回复1995-02-20
      我确认了这个隐私协议的弹窗,但是获取地址还是要用户再点一次单独的位置授权的弹窗,获取剪贴板录音手机号什么的也是都要用户再确认一次单独权限授权,这个是正常流程吗?
      2023-10-18
      回复
    • BLUE
      BLUE
      05-15回复那只是梦cium
      你这个是怎么实现的,可以交流一下吗
      05-15
      回复
登录 后发表内容