微信小程序隐私弹窗


正常展示 自定义隐私弹窗 官方隐私弹窗和自定义隐私弹窗同时弹出

1.微信隐私说明:

涉及处理用户个人信息的小程序开发者,需通过弹窗等明显方式提示用户阅读隐私政策等收集使用规则。
为规范开发者的用户个人信息处理行为,保障用户合法权益,微信要求开发者主动同步微信当前用户已阅读并同意小程序的隐私政策等收集使用规则,方可调用微信提供的隐私接口。
关于小程序隐私保护指引设置的公告,从 2023 年 9 月 15 日起必须用户点击同意隐私保护政策并同步给微信之后,开发者才可以调用微信提供的隐私接口。涉及到使用了隐私接口的小程序必须在「小程序管理后台」设置《小程序用户隐私保护指引》。

2.隐私相关 api:

  1. wx.getPrivacySetting:查询隐私授权情况
  2. wx.openPrivacyContract:跳转到隐私协议页面
  3. wx.onNeedPrivacyAuthorization:监听隐私接口需要用户授权事件
  4. wx.requirePrivacyAuthorize :模拟隐私接口调用,并触发隐私弹窗逻

3.开发分析

开发者可以在需要调用隐私接口时弹窗、也可以在小程序打开时弹窗,而且只需要授权一次,授权之后只要用户没有删除小程序可以一直调用用到的全部隐私接口,一番研究之后我选择在页面显示时就判断是否需要授权,授权之后以后就不需要授权了,最终确定的流程如下:

  1. 页面显示时使用 wx.getPrivacySetting 接口判断是否需要授权,需要则展示弹窗;
  2. 用户点击查看隐私保护指引
    1. 由于是服务商模式,即采用自定义隐私弹窗(隐私协议自定义),服务商模式是需要后端主动通过接口向微信提交请求;
    2. 个人的小程序建议直接采用官方弹窗,,使用 wx.openPrivacyContract 接口打开隐私保护指引页面;
  3. 用户点击“拒绝”则不去定位但是正常进入,下次涉及隐私的地方重新唤起隐私弹窗,用户点击“同意”则不再弹出弹窗。

考虑到用户可能有通过分享、扫码等直接进入到某个需要调用隐私接口的界面的情况,代码需要多次复用,直接写成组件更合适,组件外部的代码越少越好。

4.uniapp 小程序的隐私弹窗代码





export default {
  onLaunch(option) {
    // 提前调用隐私协议(一进入页面就调用,避免在其他地方调用)
    this.getPrivacySettingFn()
  },
  methods: {
    getPrivacySettingFn() {
      const that = this
      return new Promise((resolve, reject) => {
        try {
          // 监听调用隐私API回调(防止弹出官方弹窗)
          if (wx.onNeedPrivacyAuthorization) {
            wx.onNeedPrivacyAuthorization(resolve => {
              console.log('onNeedPrivacyAuthorization', resolve)
              // 打开隐私弹窗
              // this.$emit('update:showPrivacy', true)
              // _this.resolvePrivacyAuthorization = resolve
            })
          }
          wx.getPrivacySetting({
            success(res) {
              // this.privacyContractName = res.privacyContractName
              console.log(res) // 返回结果为: res = { needAuthorization: true/false, privacyContractName: '《xxx隐私保护指引》' }
              if (res.needAuthorization) {
                console.log('需要弹出隐私协议弹窗')
                that.globalData.isAllowCollectMsg = 1
                uni.setStorageSync('IS_AGREE_PRIVACY', 0)
                resolve(true)
              } else {
                console.log(
                  '用户已经同意过隐私协议,不需要再弹出隐私协议,正常调用已声明过的隐私接口'
                )
                that.globalData.isAllowCollectMsg = 0
                uni.setStorageSync('IS_AGREE_PRIVACY', 2)
                resolve(false)
              }
            },
            fail(err) {
              console.log(err, '获取隐私弹窗失败')
              uni.setStorageSync('IS_AGREE_PRIVACY', 2)
              reject(err)
            },
            complete() {
              that.globalData.isAllowCollectMsg = 2
            }
          })
        } catch (error) {
          uni.setStorageSync('IS_AGREE_PRIVACY', 2)
        }
      })
    }
  }
}



// 处理弹窗 handlePrivacy(id) { //
1.需要隐私弹窗且没点从未击过弹窗IS_AGREE_PRIVACY:0:从未点击过,1:点击过不同意,2:点击过同意
if (!uni.getStorageSync('IS_AGREE_PRIVACY')) { this.showPrivacy = true } }

5.关于官方隐私弹窗和自定义隐私弹窗会同时展示处理

点击图片进入原对话链接点击图片进入原对话链接

1.建议将隐私 API 组件放到页面最前面加载,一进入页面就加载,就能避免 其他涉及 用户隐私(如常见的 定位、手机号授权、用户信息授权、手机相册等等)先于隐私 API 弹窗前调用; 2.关于同时会出现官方隐私弹窗和自定义隐私弹窗问题,官方给的回复如下:“原因是小程序在调用隐私接口之后才注册 wx.onNeedPrivacyAuthorization 监听,建议改成先注册 wx.onNeedPrivacyAuthorization 再调用隐私接口”。
针对以上,我们试着将 wx.onNeedPrivacyAuthorization 主动监听隐私 提到 wx.onNeedPrivacyAuthorization 前面执行,发现不会再弹出官方的隐私弹窗,成功解决问题。

onLaunch(option) { //1.提前调用隐私协议(一进入页面就调用,避免在其他地方调用)
this.getPrivacySettingFn() }, methods:{ getPrivacySettingFn(){
//2.主动调用监听wx.onNeedPrivacyAuthorization,且将其放到wx.getPrivacySetting之前调用
if (wx.onNeedPrivacyAuthorization) { wx.onNeedPrivacyAuthorization(resolve => {
console.log('onNeedPrivacyAuthorization', resolve) // 打开隐私弹窗 //
this.$emit('update:showPrivacy', true) // _this.resolvePrivacyAuthorization =
resolve }) } wx.getPrivacySetting({ success(res) { // this.privacyContractName =
res.privacyContractName console.log(res) // 返回结果为: res = {
needAuthorization: true/false, privacyContractName: '《xxx隐私保护指引》' } if
(res.needAuthorization) { console.log('需要弹出隐私协议弹窗') } else {
console.log(
'用户已经同意过隐私协议,不需要再弹出隐私协议,正常调用已声明过的隐私接口' ) } }
}) } }

文章作者:   leader755
版权声明:   本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 leader755 !
评论
 本篇
微信小程序隐私弹窗 微信小程序隐私弹窗
1.微信隐私说明:涉及处理用户个人信息的小程序开发者,需通过弹窗等明显方式提示用户阅读隐私政策等收集使用规则。为规范开发者的用户个人信息处理行为,保障用户合法权益,微信要求开发者主动同步微信当前用户已阅读并同意小程序的隐私政策等收集使用
2024-01-31
下一篇 
微信小程序WebView与H5 通信方式 微信小程序WebView与H5 通信方式
微信小程序组件 Web-view 定义:承载网页的容器 1.相关 api 接口名 说明 wx.miniProgram.navigateTo 参数与小程序接口一致 wx.miniProgram.navigateBack 参数
2023-11-19
  目录