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

首先了解官方提供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.mzph.cn/news/57794.shtml

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

相关文章

AutoRunner自动化测试工具新版本智能识别算法之视觉识别

泽众AutoRunner&#xff08;简称AR&#xff09;是国内专业的支持C/S、B/S各种技术框架的、基于组件识别的自动化测试工具&#xff0c;实现7*24小时的自动化回归测试和功能测试&#xff0c;让测试更智能。 视觉识别是一种通过计算机技术对图像或视频进行分析和理解的方法。这种算…

AMEYA360:大唐恩智浦电池管理芯片DNB1168-新能源汽车BMS系统的选择

DNB1168是一款全球独有的集成&#xff08;EIS&#xff09;交流阻抗谱监测功能的单电池监测芯片。该芯片通过车规级AEC-Q100和汽车行业最高功能安全等级ISO 26262&#xff1a;2018 ASIL-D双重认证。芯片?内部集成多种高精度电池参数监测&#xff0c;支持电压、温度、交流阻抗检…

机器学习---决策树算法(CLS、ID3、CART)

1. 决策树 决策树&#xff08;Decision Tree&#xff09;又称为判定树&#xff0c;是运用于分类的一种树结构。其中的每个内部结点 &#xff08;internal node&#xff09;代表对某个属性的一次测试&#xff0c;每条边代表一个测试结果&#xff0c;叶结点&#xff08;leaf&am…

JVM核心原理解读(一)---执行引擎

Java虚拟机规范制定了Java字节码执行引擎的概念模型,Java执行引擎作用概括起来就是执行编译产生的Java class文件,为用户提供了底层OS的调用,屏蔽了不同平台硬件和OS的差异性,使得编写的代码无差别的在各个平台运行;对于Java字节码执行一般有解释执行和编译执行两种,具体使用哪…

学乐多光屏P90:智能引领儿童学习新时代

随着科技的迅猛发展&#xff0c;儿童教育正逐渐迈入数字化时代。在这个变革的浪潮中&#xff0c;学乐多光屏P90以其卓越的功能和深刻的教育理念&#xff0c;成为了智能儿童学习领域的引领者&#xff0c;为孩子们开启了全新的学习体验。 融合创新技术&#xff0c;引领学习变革 …

GD32-舵机的原理

GD32-舵机的原理 舵机的现一脉宽与舵机转动角度 旋转编码器的原理 顺时针&#xff1a;A的下降沿时&#xff0c;B处于高电平&#xff1b; 逆时针&#xff1a;A的下降沿时&#xff0c;B处于低电平&#xff1b; #ifndef _ENCODER_DRIVE_H #define _ENCODER_DRIVE_H#include &quo…

2023高教社杯数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

JavaScript—对象与构造方法

目录 json对象&#xff08;字面值&#xff09; js中对象是什么&#xff1f; 如何使用&#xff1f; 关联数组 js对象和C#对象有什么区别&#xff1f; 构造函数 什么是构造方法&#xff1f; 如何使用构造方法&#xff1f; 如何添加成员&#xff1f; 对象的动态成员 正则…

Python|爬虫和测试|selenium框架的安装和初步使用(一)

前言&#xff1a; Python作为一门胶水语言来说&#xff0c;可以说是十分的优秀&#xff0c;什么事情都可以干&#xff0c;并且在某些领域还能干的非常不错&#xff0c;尤其是在爬虫和测试领域&#xff0c;该语言可以说是没有对手。 这么说的原因是因为如果你要使用爬虫爬取某…

汽车自适应巡航系统车距控制策略研究

1 引言 自适应巡航控制( Adaptive Cruise Control&#xff0c;ACC) 是汽车驾驶辅助系统的重要组成部分&#xff0c;其作用是根据车距传感器探测到本车( ACC 车辆) 与主目标车辆( 前车) 之间的相对位置和相对速度信息&#xff0c;自动调节ACC 车辆的节气门开度或部分制动力矩( 即…

探索数据湖中的巨兽:Apache Hive分布式SQL计算平台浅度剖析!

文章目录 ◆ Apache Hive 概述1.1 分布式SQL计算1.2 Hive的优势 ◆ 模拟实现Hive功能2.1 元数据管理2.2 解析器2.3 基础架构2.4 Hive架构 ◆ Hive基础架构3.1 Hive架构图3.2 Hive组件3.2.1 元数据存储3.2.2 Driver驱动程序3.2.3 用户接口 ◆ Hive部署4.1 VMware虚拟机部署步骤一…

【学习笔记】求解线性方程组的G-S迭代法

求解线性方程组的G-S迭代法 // 运行不成功啊function [x,k,index] Gau_Seid(A,b,ep,it_max) % 求解线性方程组的G-S迭代法&#xff0c;其中 % A为方程组的系数矩阵 % b为方程组的右端项 % ep为精度要求&#xff0c;省缺为1e-5 % it_max为最大迭代次数&#xff0c;省缺为100 % …

新KG视点 | Jeff Pan、陈矫彦等——大语言模型与知识图谱的机遇与挑战

OpenKG 大模型专辑 导读 知识图谱和大型语言模型都是用来表示和处理知识的手段。大模型补足了理解语言的能力&#xff0c;知识图谱则丰富了表示知识的方式&#xff0c;两者的深度结合必将为人工智能提供更为全面、可靠、可控的知识处理方法。在这一背景下&#xff0c;OpenKG组织…

eslint

什么是eslint ESLint 是一个根据方案识别并报告 ECMAScript/JavaScript 代码问题的工具&#xff0c;其目的是使代码风格更加一致并避免错误。 安装eslint npm init eslint/config执行后会有很多选项&#xff0c;按照自己的需求去选择就好&#xff0c;运行成功后会生成 .esli…

bpmnjs Properties-panel拓展(属性设置篇)

最近有思考工作流相关的事情&#xff0c;绘制bpmn图的工具认可度比较高的就是bpmn.js了&#xff0c;是一个基于node.js的流程图绘制框架。初始的框架只实现了基本的可视化&#xff0c;想在xml进行客制化操作的话需要拓展&#xff0c;简单记录下几个需求的实现过程。 修改基础 …

每天一道leetcode:542. 01 矩阵(图论中等广度优先遍历)

今日份题目&#xff1a; 给定一个由 0 和 1 组成的矩阵 mat &#xff0c;请输出一个大小相同的矩阵&#xff0c;其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例1 输入&#xff1a;mat [[0,0,0],[0,1,0],[0,0,0]] 输出&#xff…

java八股文面试[多线程]——指令重排序

关于a的操作&#xff0c;由原来的6个指令&#xff0c;变成了4个指令。 1. 指令重排序的介绍 1&#xff09;指令重排序的类型 在执行程序时为了提高性能&#xff0c;编译器和处理器常常会对指令做重排序。 重排序分三种类型&#xff1a;编译器优化的重排序 编译器在不改变单线…

分布式一致性协议

在对一个分布式系统进行架构设计的过程中&#xff0c;往往会在系统的可用性和数据一致性之间进行反复的权衡&#xff0c;于是就产生了一系列的一致性协议。为了解决分布式一致性问题&#xff0c;在长期的探索研究过程中&#xff0c;涌现出了一大批经典的一致性协议和算法&#…

SpringMVC 第二天

第 1 章 ModelAttribute 和 SessionAttribute[ 应 用 ] 1.1ModelAttribute 1.1.1 使用说明 作用&#xff1a; 该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。 出现在方法上&#xff0c;表示当前方法会在控制器的方法执行之前&#xff0c;先执行…

Open3D 进阶(7)Kmeans++点云聚类

目录 一、算法原理1、原理概述2、实现流程3、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、原理概述