【微信小程序】小程序隐私保护指引设置

news2025/1/18 7:02:47

首先了解官方提供demo:

demo1: 演示使用 wx.getPrivacySetting 和 <button open-type="agreePrivacyAuthorization"> 在首页处理隐私弹窗逻辑 https://developers.weixin.qq.com/s/gi71sGm67hK0

demo2: 演示使用 wx.onNeedPrivacyAuthorization 和 <button open-type="agreePrivacyAuthorization"> 在多个页面处理隐私弹窗逻辑,同时演示了如何处理多个隐私接口同时调用。 https://developers.weixin.qq.com/s/4X7yyGmQ7EKp

demo3: 演示 wx.onNeedPrivacyAuthorization、wx.requirePrivacyAuthorize、<button open-type="agreePrivacyAuthorization"> 和 <input type="nickname"> 组件如何结合使用 https://developers.weixin.qq.com/s/jX7xWGmA7UKa

demo4: 演示使用 wx.onNeedPrivacyAuthorization 和 <button open-type="agreePrivacyAuthorization"> 在多个 tabBar 页面处理隐私弹窗逻辑。 https://developers.weixin.qq.com/s/g6BWZGmt7XK9

  • 小程序后台隐私协议添加对应隐私协议(例如:剪贴板、手机号授权等)协议更新后有一定时间的缓存才能测试(大概是在半天之后可以测试)优先处理添加协议 (如果之前小程序已经添加过对应的协议,则需要重新提交审核同步信息才会返回正常用来测试)
  • 基础库设置3.23.3及以上 (微信版本:iOS 8.0.36、安卓 8.0.35会携带此基础库版本)
  • app.json文件内这个配置__usePrivacyCheck__属性为true (uniapp开发参考下图) 
  • 开发工具清除全部缓存之后重新编译、手机微信下拉删除最近小程序等进行隐私协议同步信息获取测试

二、关于小程序隐私保护指引设置的公告

为规范开发者的用户个人信息处理行为,保障用户的合法权益,自2023年9月15日起,对于涉及处理用户个人信息的小程序开发者,
微信要求,仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则后,方可调用微信提供的隐私接口。
开发者首先需确定小程序是否涉及处理用户个人信息,如涉及,则需配置用户隐私授权弹窗,
且仅有在平台《小程序用户隐私保护指引》中声明了所处理的用户个人信息,才可以调用平台提供的对应接口或组件。

三、设置《小程序用户隐私保护指引》

四、填写《小程序用户隐私保护指引》

只有在指引中声明所处理的用户个人信息,才可以调用平台提供的对应接口或组件。若未声明,对应接口或组件将无法调用成功。

五、配置用户隐私授权弹窗 (触发方式:隐私API、组件)

1.了解隐私协议所需相关API

01.wx.requirePrivacyAuthorize() 用于模拟隐私接口调用

02.wx.openPrivacyContract() 用于打开下面封装好隐私弹框中的隐私协议

03.wx.onNeedPrivacyAuthorization() 用于监听用户是否吊起相关的隐私协议

04.wx.getPrivacySetting() 用于查询微信侧记录用户隐私协议状态

基本流程为:03 -----> 04 -----> 02

2.封装微信侧用户隐私协议状态

//获取微信侧同步的用户隐私协议开关
function getPrivacySetting(callback){
  if(wx.getPrivacySetting){
    wx.getPrivacySetting({
      success: result => {
        console.log(result,"同步信息结果") // 返回结果为: result = { needAuthorization: true/false, privacyContractName: '《xxx隐私保护指引》' }
        if (result.needAuthorization) {
          // 需要弹出隐私协议
          console.log("获取微信储存的用户协议同步信息-用户未同意,请弹框处理")
          callback && callback(result);
        } else {
          console.log("获取微信储存的用户协议同步信息-用户已同意,请忽略")
        }
      },
      fail: () => {},
      complete: () => {}
    })
  }
}

3.封装隐私协议弹框放置全局组件中

全局组件-wxml

<van-popup show="{{privacyFlag}}" z-index="{{99999}}" catch:touchstart="" position="center" bind:close="onCloseDoctorInfo" close-on-click-overlay="{{false}}" custom-style="width:80%; border-radius:20rpx;" >
  <view class="followFrame customStyle">
    <view class="followFrame-title">用户隐私保护提示</view>
    <view class="followFrame-cont">
       <view class="followFrame-cont-text big">
         亲爱的用户,感谢您的信任!您使用本小程序提供的产品服务前应当阅读并同意
	   </view>
	   <view class="followFrame-cont-text links" bindtap="openPrivacyContract">
  	      {{urlTitle}}
  	   </view>
        <view class="followFrame-cont-text">当您点击同意并开始使用产品服务时,即表示你已理解并同息该条款内容,该条款将对您产生法律约束力。如您拒绝,将无法使用本小程序提供的相关产品及服务。 </view>
      </view>
      <view class="followFrame-bom">
        <view class="followFrame-bom-box flex-row-around-start">
          <button id="disagree-btn" bindtap="handleDisagree" class="followFrame-bom-btns flex1">不同意</button>
          <button id="agree-btn" bindagreeprivacyauthorization="handleAgree" open-type="agreePrivacyAuthorization" class="followFrame-bom-btns active flex1">同意</button>
        </view>
      </view>
    </view>
  </van-popup>

全局组件-JS

JS//引入相关模块
const { getPrivacySetting } = require("../utils/utils")
//设置协议回调、关闭回调数组变量
let privacyHandler
let privacyResolves = new Set()
let closeOtherPagePopUpHooks = new Set()
//注册并监听隐私API调用
if (wx.onNeedPrivacyAuthorization) {
  wx.onNeedPrivacyAuthorization(resolve => {
    //获取用户微信侧同步结果
    getPrivacySetting(result=>{
      console.log(result,"同步信息结果") // 返回结果为: result = { needAuthorization: true/false, privacyContractName: '《xxx隐私保护指引》' }
      if (result.needAuthorization) {
        // 需要弹出隐私协议
        if (typeof privacyHandler === 'function') privacyHandler(resolve,result)
        console.log("获取微信储存的用户协议同步信息-用户未同意,请弹框处理-页面")
      }
    })
  })
}
//处理关闭页面其他弹框
const closeOtherPagePopUp = (closePopUp) => {
  closeOtherPagePopUpHooks.forEach(hook => {
    if (closePopUp !== hook) {
      hook()
    }
  })
}
Component({
  options: {
    styleIsolation: 'shared',
    multipleSlots: true
  },
  data: {
    urlTitle: "",
    privacyFlag: false,
    height: 0,
  },
  lifetimes: {
    attached: function() {
      const closePopUp = () => {
        this.disPopUp()
      }
      privacyHandler = (resolve,result) => {
        this.setUrlTitle(result);
        console.log(result,"999999")
        privacyResolves.add(resolve)
        this.popUp()
        // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
        closeOtherPagePopUp(closePopUp)
      }
      
      closeOtherPagePopUpHooks.add(closePopUp)


      this.closePopUp = closePopUp
    },
    detached: function() {
      closeOtherPagePopUpHooks.delete(this.closePopUp)
    }
  },
  methods: {
    //处理隐私弹框内展示的隐私协议标题
    setUrlTitle(result){
      this.setData({urlTitle:result.privacyContractName})
    },
    //用户同意相关协议
    handleAgree(e) {
      this.disPopUp()
      // 这里演示了同时调用多个wx隐私接口时要如何处理:让隐私弹窗保持单例,
点击一次同意按钮即可让所有pending中的wx隐私接口继续执行 (看page/index/index中的 wx.getClipboardData 和 wx.startCompass)
      privacyResolves.forEach(resolve => {
        resolve({
          event: 'agree',
          buttonId: 'agree-btn'
        })
      })
      privacyResolves.clear()
      this.triggerEvent('handleAgree', {result:true});
    },
    //用户拒绝相关协议
    handleDisagree(e) {
      this.disPopUp()
      privacyResolves.forEach(resolve => {
        resolve({
          event: 'disagree',
        })
      })
      privacyResolves.clear()
      this.triggerEvent('handleAgree', {result:true});
    },
    //打开隐私弹框
    popUp() {
      if (this.data.privacyFlag === false) {
        this.setData({
          privacyFlag: true
        })
      }
    },
    //关闭隐私弹框
    disPopUp() {
      if (this.data.privacyFlag === true) {
        this.setData({
          privacyFlag: false
        })
      }
    },
    //打开微信提供的小程序侧隐私协议
    openPrivacyContract() {
      wx.openPrivacyContract({
        success: res => {
          console.log('openPrivacyContract success')
        },
        fail: res => {
          console.error('openPrivacyContract fail', res)
        }
      })
    },
    checkPrivacyStatus() {
      let that = this;
      getPrivacySetting(result=>{
        if (result.needAuthorization) {
          that.setUrlTitle(result);
          that.popUp();
        } else {
          console.log("微信侧已记录用户同意");
        }
      })
    }
  }
})

父组件监听全局隐私弹框时间回调

父组件-wxml

<privacy-popup id="privacyPop" bindhandleAgree="handleAgree"></privacy-popup>


父组件-JS

//隐私协议弹框按钮回调
  handleAgree(event){
    let that = this;
    console.log(event);
    let {result} = event.detail;
    // result 根据用户选择可处理后续相关逻辑
    true 用户同意相关隐私  例如:因昵称组件弹出的框 为true之后就可将昵称组件设置为聚焦状态
    false 用户拒绝 例如:音视频组件  用户拒绝之后可返回上级页面、继续弹框进行处理等
  },

4.app.json中引入全局组件:

"privacy-popup": "/components/privacyPopup"

5.全局使用(隐私弹框)

全局隐私弹框相关代码如下:

首页wxml引入组件

<privacy-popup id="privacyPop"></privacy-popup>

首页onReady时触发检测隐私弹框逻辑

that.selectComponent("#privacyPop") && that.selectComponent("#privacyPop").checkPrivacyStatus();

6.按需使用(隐私弹框)进入单个隐私页面时优先检测(手机号授权API触发隐私弹框)

6-1.1.引入全局组件到手机号授权页面:<privacy-popup id="privacyPop"></privacy-popup>
6-1.2.页面onReady的时候开始检测:that.selectComponent("#privacyPop") && that.selectComponent("#privacyPop").checkPrivacyStatus();
6-2.1.在用户点击按钮即将吊起隐私弹框时使用如下代码:

    getPrivacySetting(result=>{
      if (result.needAuthorization) {
        // 需要弹出隐私协议
        that.selectComponent("#privacyPop") &&                 
        that.selectComponent("#privacyPop").setUrlTitle(result);
        console.log("获取微信储存的用户协议同步信息-用户未同意,请弹框处理")
      } else {
        console.log("获取微信储存的用户协议同步信息-用户已同意,请忽略")
       //走隐私允许之后的逻辑
      }
    })

特别说明:wx.authorize这个API在测试的时候并不会触发监听隐私弹框逻辑 跟微信文档有些出入,如果涉及到该API 可以使用6-2.1方式进行处理具体逻辑如下

1.先从微信侧获取用户隐私状态 

2.根据状态处理不同的逻辑

2.1用户未同意则弹框提示

2.2用户已同意就可以调用wx.authorizeAPI或者走之后的隐私接口调用啦 

六、清空历史同步状态

1.微信下拉---最近---最近使用的小程序

2.开发工具---清除模拟器缓存---清除全部数据/授权数据

七、常见错误说明

  1. { "errMsg": "A:fail api scope is not declared in the privacy agreement", "errno": 112 } 使用到了 A 隐私接口,但是开发者未在[mp后台-设置-服务内容声明-用户隐私保护指引]中声明收集 A 接口对应的隐私类型。
  2. 还有个114的忘记统计是啥原因了

八、微信文档指引:

用户隐私保护指引填写说明:用户隐私保护指引填写说明 | 微信开放文档

小程序用户隐私保护指引内容介绍:小程序用户隐私保护指引内容介绍 | 微信开放文档

小程序隐私协议开发指南:小程序隐私协议开发指南 | 微信开放文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/944021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python面试:什么是GIL

1. GIL (Global Interpreter lock)可以避免多个线程同时执行字节码。 import threadinglock threading.Lock()n [0]def foo():with lock:n[0] n[0] 1n[0] n[0] 1threads [] for i in range(5000):t threading.Thread(targetfoo)threads.append(t)for t in threads:t.s…

深入解析文件系统原理(inode,软硬链接区别)

第四阶段提升 时 间&#xff1a;2023年8月29日 参加人&#xff1a;全班人员 内 容&#xff1a; 深入解析文件系统原理 目录 一、Inode and Block概述 &#xff08;一&#xff09;查看文件的inode信息&#xff1a;stat &#xff08;二&#xff09;Atime、Mtime、Ctime详…

高精度 低纹波|12A大电流电源解决方案,网通、视频显示、国产PC行业多领域适用

随着科技的快速发展&#xff0c;各行业产品都在不断迭代和加速升级&#xff0c;TV产品也不例外。TV产品的演变一直朝着大尺寸、高分辨率的方向发展&#xff0c;从2K到4K再升级至8K&#xff0c;每一次的升级都为消费者带来更好的视觉体验。 从技术层面来看&#xff0c;“8K大尺寸…

RocketMQ消息查询

区别于消息消费&#xff1a;先尝后买 尝就是消息查询 买&#xff1a;消息的消费 RocketMQ支持按照下面两种维度("按照Message ld查询消息"、"按照Message Key查询消息")进行消息查询。 1按照Messageld查询消息 Msgld总共16字节&#xff0c;包含消息存储…

[Mac软件]Adobe After Effects 2023 v23.5 中文苹果电脑版(支持M1)

After Effects是动画图形和视觉效果的行业标准。由运动设计师、平面设计师和视频编辑用于创建复杂的动画图形和视觉上吸引人的视频。 创建动画图形 使用预设样式为文本和图形添加动画效果&#xff0c;或逐帧调整它们。编辑、添加深度、制作动画或转换为可编辑的路径&#xff…

冠达管理:美股涨了!“越南特斯拉”市值直追丰田!这一论坛将召开

当地时间8月28日&#xff0c;美股三大股指团体收涨&#xff0c;到收盘&#xff0c;道指报34559.98点&#xff0c;涨0.62%&#xff1b;标普500指数报4433.31点&#xff0c;涨0.63%&#xff1b;纳指报13705.13点&#xff0c;涨0.84%。 高盛上星期五发布的数据显现&#xff0c;在英…

聚焦数据安全,“2023数据安全平台神兽企业”调研正式启动

当下&#xff0c;数字经济正蓬勃发展&#xff0c;数据已成为关键驱动力&#xff0c;而数据安全是保障数据要素价值的前提。数据安全建设也正在从孤立的数据安全产品过渡到数据安全平台&#xff0c;以更大程度促进数据的业务利用率和价值。 为了更好洞察和反映当前数据安全平台…

开发工具——IDE安装 / IDEA子module依赖导入失败编译提示xx找不到符号 / IDEA在Git提交时卡顿

近期换了工作电脑&#xff0c;公司的IT团队不够给力&#xff0c;不能复制电脑系统&#xff0c;所以又到了需要重装IDE配置开发环境的时候了&#xff1b;在安装和导入Java编译器IDEA的时候遇到一些"棘手"问题&#xff0c;这里整理下解决方法以备不时之需&#xff1b; …

bootloader串口更新程序[瑕疵学习板]

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、储备知识二、程序步骤2.程序展示1.bootloader2.然后是主运行函数总结前言 很久没有更新文章了。最近工作太忙,没有学习很多的知识,然后这两天不忙了,就学习了一下bootloader的程序升级…

hive lateral view 实践记录(Array和Map数据类型)

目录 一、Array 1.建表并插入数据 2.lateral view explode 二、Map 1、建表并插入数据 2、lateral view explode() 3、查询数据 一、Array 1.建表并插入数据 正确插入数据&#xff1a; create table tmp.test_lateral_view_movie_230829(movie string,category array&…

基于水基湍流算法优化的BP神经网络(预测应用) - 附代码

基于水基湍流算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于水基湍流算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.水基湍流优化BP神经网络2.1 BP神经网络参数设置2.2 水基湍流算法应用 4.测试结果&#xff1a;5…

搭建自己的ChatGPT智能问答,HelpLook ChatBot 正式上线!

基于已有内容的站点或现成文档 零代码快速导入 即可生成自己专属的ChatGPT智能问答机器人 HelpLook ChatBot&#xff0c;正式发布上线&#xff01; 只需连接您的数据源&#xff0c;HelpLook 就能为您的数据创建一个类似 ChatGPT 的聊天机器人。您可以将它作为小工具以 JS 的…

【计算机网络】TCP 的三次握手和四次挥手

TCP 是面向连接的&#xff0c;面向连接就是数据通讯的时候需要进行三次握手&#xff0c;断开通讯的时候需要进行四次挥手。 1.seq(sequence number)&#xff0c;序列号&#xff0c;随机生成的 2.ack(acknowledgement number)&#xff0c;确认号&#xff0c;ackseq1 3.ACK(ackno…

Could not autowire. No beans of ‘DiscoveryClient‘ type found.

一、导错了包 DiscoveryClient对应有两个包&#xff1a; org.springframework.cloud.client.discovery.DiscoveryClient; com.netflix.discovery.DiscoveryClient; 目前导入的包是&#xff1a; 改成第一个包&#xff0c;发现不再报红了。

数据安全治理方案

数据安全能力建设工作并非从零开始&#xff0c;大部分组织在此前或多或少已有一些安全体系&#xff0c;基本上是围绕 信息系统和网络环境开展安全保护工作&#xff0c;主要聚焦在信息安全和网络安全&#xff1b;而数据安全是以数据为核心&#xff0c; 围绕数据安全生命周期进行…

【Java】知识点回顾

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理后端技术的Java的知识点以及回顾Java基础&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&…

SpringBootWeb 登录认证[Cookie + Session + Token + Filter + Interceptor]

目录 1. 登录功能 1.1 需求 1.2 接口文档 1.3 登录 - 思路分析 1.4 功能开发 1.5 测试 2. 登录校验 2.1 问题分析 什么是登录校验&#xff1f; 我们要完成以上登录校验的操作&#xff0c;会涉及到Web开发中的两个技术&#xff1a; 2.2 会话技术 2.2.1 会话技术介绍…

移动云发布长三角信创云电脑资源池

8月27日&#xff0c;2023长三角算力发展大会在苏州举行。中国移动云能力中心与江苏移动苏州分公司同期联合举办“移动云算力网络分论坛”&#xff0c;与各界领导、行业专家、领军企业家等分享了移动云算力调度能力新型应用、移动云“五岳”量子计算云平台的最新进展&#xff0c…

2023年Twitter营销应该知道的一些数据

2023 年的 Twitter月活跃用户数量达到了 3.539 亿。根据专家的最新估计数据&#xff08;eMarketer&#xff0c;2022 年&#xff09;&#xff0c;这一数字在前一年回升了 3.9%&#xff0c;在全球社交媒体用户总数中占比为 9.4 %。 明显可以看出&#xff0c;马斯克的收购对 Twit…

冠达管理:核污染防治板块热度不减,建工修复等多只个股涨停

日本福岛核污染水排海引发商场担忧&#xff0c;核污染防治概念股表现持续活跃。 8月28日&#xff0c;建工修复&#xff08;300958.SZ&#xff09;、中电环保&#xff08;300172.SZ&#xff09;、捷强配备&#xff08;300875.SZ&#xff09;20CM强势涨停&#xff0c;中广核技&a…