微信小程序添加用户隐私保护指引

news2024/11/18 17:44:18

微信小程序添加用户隐私保护指引

    • 一、官方介绍
    • 二、实现效果
    • 三、实现步骤
      • privacyPopup.js
      • privacyPopup.wxml
      • privacyPopup.json
      • privacyPopup.wxss
      • 首页的index.wxml
      • 首页的index.js
      • 首页的index.json
    • 四、配置隐私协议
        • 请求参数
        • 效果

前段时间不知道大家有没有发现很多小程序都添加了用户隐私保护提示,这是因为微信官方为规范开发者的用户个人信息处理行为,保障用户合法权益,小程序、插件中涉及处理用户个人信息的开发者,均需补充相应用户隐私保护指引。那么如何添加用户保护指引提示呢?相信大家已经到微信官方文档上查看了,那么如果想更快的实现一个基础版的,可以参考下面的操作,欢迎大家讨论指正。

一、官方介绍

在这里插入图片描述

二、实现效果

在这里插入图片描述

三、实现步骤

在小程序的pages文件路径下创建的component文件夹,创建privacyPopup文件夹,依次创建privacyPopup.js、privacyPopup.wxml、privacyPopup.json、privacyPopup.wxss:
在这里插入图片描述

privacyPopup.js

const app = getApp();

let privacyHandler
let privacyResolves = new Set()
let closeOtherPagePopUpHooks = new Set()

wx.onNeedPrivacyAuthorization(resolve => {
  if (typeof privacyHandler === 'function') {
    privacyHandler(resolve)
  }
})

const closeOtherPagePopUp = (closePopUp) => {
  closeOtherPagePopUpHooks.forEach(hook => {
    if (closePopUp !== hook) {
      hook()
    }
  })
}


Component({
  data: {
      title: "用户隐私保护提示",
      desc1: "感谢您参与本活动,您参与本活动前应当阅读并同意",
      urlTitle: "《用户隐私保护指引》",
      desc2: "当您点击同意并开始使用产品服务时,即表示你已理解并同意该条款内容,该条款将对您产生法律约束力。如您拒绝,将无法进入活动。",
      innerShow: false,
      height: 0,
  },
  lifetimes: {
    attached: function() {
      const closePopUp = () => {
                this.disPopUp()
              }
              privacyHandler = resolve => {
                privacyResolves.add(resolve)
                this.popUp()
                // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
                closeOtherPagePopUp(closePopUp)
              }
             closeOtherPagePopUpHooks.add(closePopUp)
              this.closePopUp = closePopUp
    },
        detached: function() {
            closeOtherPagePopUpHooks.delete(this.closePopUp)
          }
  },
  methods: {
      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()
    },
    handleDisagree(e) {
      this.disPopUp()
      privacyResolves.forEach(resolve => {
        resolve({
          event: 'disagree',
        })
      })
      privacyResolves.clear()
    },
    popUp() {
      if (this.data.innerShow === false) {
        this.setData({
          innerShow: true
        })
      }
    },
    disPopUp() {
      if (this.data.innerShow === true) {
        this.setData({
          innerShow: false
        })
      }
    },
    openPrivacyContract() {
      wx.openPrivacyContract({
        success: res => {
          console.log('openPrivacyContract success')
        },
        fail: res => {
          console.error('openPrivacyContract fail', res)
        }
      })
    }
  }
})

privacyPopup.wxml

<view wx:if="{{innerShow}}" class="mask"></view>
<view wx:if="{{innerShow}}" class="weui-half-screen-dialog" style="position: fixed;  bottom:{{height}}px;z-index: 100" >
    <view class="weui-half-screen-dialog__hd">
          <text class="weui-half-screen-dialog__title">{{title}}</text>
    </view>
    <view class="weui-half-screen-dialog__bd">
        <view class="weui-half-screen-dialog__tips">{{desc1}}</view>
        <view class="weui-half-screen-dialog__tips" style="color:#576B95" bindtap="openPrivacyContract">{{urlTitle}}</view>
        <view class="weui-half-screen-dialog__tips">{{desc2}}</view>
    </view>
    <view class="weui-half-screen-dialog__ft">
      <view class="weui-half-screen-dialog__btn-area">
        <button id="disagree-btn"
          type="default"
          class="weui-btn"
          bindtap="handleDisagree"
        >不同意</button>
        <button id="agree-btn"
          type="primary"
          open-type="agreePrivacyAuthorization"
          class="weui-btn"
          bindagreeprivacyauthorization="handleAgree"
        >同意并继续</button>
      </view>
    </view>
  </view>

privacyPopup.json

{
    "component": true,
    "usingComponents": {}
}

privacyPopup.wxss

样式可在文章上方下载。(包含所有组件)在这里插入图片描述

首页的index.wxml

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

首页的index.js

	//监听页面加载
   onLoad: function (options) { 
		const _this=this;
		if (wx.getPrivacySetting) {
		        wx.getPrivacySetting({
		          success: res => {
		              if (res.needAuthorization) {
		                _this.isPrivacyAuthorize();
		              } else{
		                this.triggerEvent("agree")
		              }
		          },
		          fail: () => { },
		          complete: () => { },
		        })
		      } else {
		        // 低版本基础库不支持 wx.getPrivacySetting 接口,隐私接口可以直接调用
		        this.triggerEvent("agree")
		      }
	},
	isPrivacyAuthorize(){
      let privacyPopup=this.selectComponent('#privacyPopup');
      if (wx.requirePrivacyAuthorize) {
        wx.requirePrivacyAuthorize({
          success: res => {
            this.triggerEvent("agree")
          },
          fail: res => {
            privacyPopup.disPopUp();            
            setTimeout(()=>{
              this.isPrivacyAuthorize()
            },500)
          }
        })
      } else {
        // 低版本基础库不支持 wx.getPrivacySetting 接口,隐私接口可以直接调用
        this.triggerEvent("agree")
      }
  • wx.getPrivacySetting 接口,查询微信侧记录的用户是否有待同意的隐私政策信息。
  • wx.requirePrivacyAuthorize接口,模拟隐私接口调用,并触发隐私弹窗逻辑。
    这里的逻辑是当用户进入小程序首页时,判断用户是否需要同意隐私政策,如果需要就触发隐私弹框逻辑,用户点击了同意就关闭隐私政策弹框,继续使用小程序;如果用户点击了不同意,隐私政策弹框会再次弹出;如果用户已经同意过则不会触发隐私弹框逻辑。

首页的index.json

在首页的index.json中的usingComponents中添加隐私保护提示组件

{
  "usingComponents": {
    "privacy-popup": "../component/privacyPopup/privacyPopup"
  },
}

四、配置隐私协议

1、如果小程序不是通过第三方授权管理的,那么可根据微信小程序官方隐私指引填写说明进行配置。
2、如果小程序是由第三方授权管理的,那么可以使用微信第三方配置;
3、我开发的小程序也是由第三方授权管理的,下面是我根据官方说明的操作,可以参考:

使用微信的api调试工具
在这里插入图片描述

请求参数

详情请查看第三方配置,下面是我简化了一些不必要参数:

{
	"privacy_ver": 2,
	"setting_list": [
		{
			"privacy_key": "UserInfo",
			"privacy_text": "记录活动用户信息、执行后续营销服务等相关事宜"
		},	{
			"privacy_key": "PhoneNumber",
			"privacy_text": "执行活动奖品寄送、后续营销服务等相关事宜"
		},
		{
			"privacy_key": "ClipboardData",
			"privacy_text": "用于复制卡券类奖品的卡券号,以方便用户在领取卡券后输入卡券号"
		}
		
	],
	"owner_setting": {
		"contact_phone": "",
		"contact_email": "邮箱",
		"contact_qq": "",
		"contact_weixin": "",
		"store_expire_timestamp": "",
		"ext_file_media_id": "",
		"notice_method": "通过弹窗",
		"store_region": 0
	},
	"sdk_privacy_info_list": [
		
	]
}

在这里插入图片描述
请求成功后就可以在真机调试时查看效果。

效果

"setting_list"参数中配置的就是下面隐私保护指引内容中标红的文字描述。
在这里插入图片描述

以上就是微信小程序添加用户隐私保护指引的整个操作过程,隐私保护提示框组件在文章标题下方可自行下载使用,如有不足请指出。
在这里插入图片描述

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

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

相关文章

AlignBench:量身打造的中文大语言模型对齐评测

对齐&#xff08;Alignment&#xff09;&#xff0c;是指大语言模型&#xff08;LLM&#xff09;与人类意图的一致性。换言之&#xff0c;就是让LLM生成的结果更加符合人类的预期&#xff0c;包括遵循人类的指令&#xff0c;理解人类的意图&#xff0c;进而能产生有帮助的回答等…

Python小工具——开发一个加密解密的小应用 windows下可执行文件exe制作

前言 本篇博客是python开发的使用案例博客&#xff0c;结合一些具体的案例进行阐述&#xff0c;本篇博客介绍如何开发一个专属的加密解密windows小应用。 其他相关的博客文章如下&#xff1a; Python开发——工具篇 & Pycharm的相关配置&#xff0c;Python相关操作 &…

OpenAI GPTs 到底是怎么工作的?

▼最近直播超级多&#xff0c;预约保你有收获 今晚直播&#xff1a;《GPTs 构建应用程序案例实现》 —1— GPTs 是如何工作的&#xff1f; OpenAI 官方对 GPTs 的定义是&#xff0c;用户为特定目的创建的 ChatGPT 版本。 GPTs 结合了技能说明、外部知识库和目前可见的 GPT 的任…

【消息中间件】Rabbitmq消息可靠性、持久化机制、各种消费

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言常见用法1.消息可靠性2.持久化机制3.消息积压批量消费&#xff1a;增加 prefetch 的数量,提高单次连接的消息数并发消费&#xff1a;多部…

最广泛应用的金融风控算法-评分卡

欢迎关注主页个人介绍及相关链接&#xff0c;获取更多算法源码材料 2023数据资源入表白皮书&#xff0c;推荐系统源码下载-CSDN博客 用友BIP数据资产入表解决方案白皮书&#xff0c;推荐系统源码下载-CSDN博客 背景 信用是一切社会金融体系的根本&#xff0c;有了每个人的信…

计算机毕业设计---ssm+mysql+jsp实现的校园二手市场交易平台源码

项目介绍 本系统主要实现的功能有&#xff1a; 前台&#xff1a;&#xff08;1&#xff09;二手物品信息查看、搜索。 &#xff08;2&#xff09;学生注册登录、个人信息修改。 &#xff08;3&#xff09;二手物品信息发布、编辑。 &#xff08;4&#xff09;二手物品评论、回…

axios进行图片上传组件封装

文章目录 前言图片上传接口&#xff08;axios通信)图片上传使用upload上传头像效果展示总结 前言 node项目使用 axios 库进行简单文件上传的模块封装。 图片上传接口&#xff08;axios通信) 新建upload.js文件&#xff0c;定义一个函数&#xff0c;该函数接受一个上传路径和一…

Gateway集成方法以及拦截器和过滤器的使用

前提&#xff1a;请先创建好一个SpringBoot项目 1. 引入依赖 SpringCloud 和 alibabaCloud 、 SpringBoot间对版本有强制要求&#xff0c;我使用的springboot是3.0.2的版本。版本对应关系请看&#xff1a;版本说明 alibaba/spring-cloud-alibaba Wiki GitHub <dependency…

python脚本抢各大平台大额优惠卷

文章目录 python脚本抢各大平台大额优惠卷写在前面准备阶段一、所需工具二、ChromeDriver下载教程 三、Seleuinm安装1、打开cmd&#xff0c;输入如下命令 开始抢券淘宝脚本京东抢购脚本 python脚本抢各大平台大额优惠卷 写在前面 当电商平台上演盛大的购物狂欢时&#xff0c;如…

MongoDB ReplicaSet 部署

文章目录 前言1. 环境准备2. 生成密钥3. 配置参数4. 创建 ReplicaSet5. 副本集维护5.1 新增成员5.2 移除节点5.4 主节点降级5.5 阻止选举5.6 允许副本节点读5.7 延迟观测 6. 连接副本集 后记 前言 本篇文章介绍 MongoDB ReplicaSet 如何搭建&#xff0c;及常用的维护方法。 1…

VScode跑通Remix.js官方的contact程序开发过程

目录 1 引言 2 安装并跑起来 3 设置根路由 4 用links来添加风格资源 ​5 联系人路由的UI 6 添加联系人的UI组件 7 嵌套路由和出口 8 类型推理 9 Loader里的URL参数 10 验证参数并抛出响应 书接上回&#xff0c;我们已经跑通了remix的quick start项目&#xff0c;接下…

【JVM】虚拟机的组成+字节码文件组成+类的生命周期

什么是JVM&#xff1f; JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 JVM的功能 1.解释和运行&#xff1a;对字节码文件中的指令实时的解释成机器码让计算机执行。 2.内存管理&#xff1a;自动为对象、方法等分配内存&#xff0c;自动…

JAVA8项目升级JDK17指南

JAVA8项目升级JDK17指南 JAVA8项目升级JDK17指南一、模块化对反射的影响二、删除的内置类 JAVA8项目升级JDK17指南 随着SpringBoot2.7的发布&#xff0c;支持jdk8~jdk21。Springboot3.X发布&#xff0c;最低需要jdk17。升级jdk17是大势所趋。 参考1&#xff1a;重磅&#xff…

K8S 外部访问配置、 Ingress、NodePort

将K8S部署应用提供给外部访问一般有三种方式&#xff1a; NodePort 暴露端口到节点&#xff0c;提供了集群外部访问的入口LoadBalancer 需要负载均衡器&#xff08;通常都需要云服务商提供&#xff0c;裸机可以安装 METALLB 测试&#xff09;Ingress 统一管理 svc的外部访问&am…

Kruskal(克鲁斯卡尔)算法总结

知识概览 克鲁斯卡尔算法适用于稀疏图求最小生成树&#xff0c;时间复杂度为O(mlogm)。 例题展示 题目链接 Kruskal算法求最小生成树 859. Kruskal算法求最小生成树 - AcWing题库https://www.acwing.com/problem/content/861/ 代码 #include <iostream> #include &l…

【Git-IDEA】在 IDEA 中使用 Git(clone、pull、push、merge、建立本地分支与远程分支的连接)

【Git-IDEA】在 IDEA 中使用 Git&#xff08;clone、pull、push、merge、建立本地分支与远程分支的连接&#xff09; 1&#xff09;Gitee2&#xff09;配置 Git3&#xff09;初始化本地仓库4&#xff09;连接远程仓库5&#xff09;clone5.1.方式一5.2.方式二 6&#xff09;分支…

el-date-picker周选择器获取选择的日期范围

<el-date-pickerv-model"formData.date"type"week"format"yyyy 第 WW 周"placeholder"选择周"change"weekChange"> </el-date-picker>// 方法一&#xff1a;weekChange(val) {let startTime new Date(val.getT…

向华为学习:IPD运作-PDP产品开发流程-验证和发布阶段的关键活动

前几天华研荟为您分享了IPD体系中产品开发流程&#xff08;PDP流程&#xff0c;很多时候也直接称为IPD流程&#xff09;前三个阶段&#xff1a;概念、计划和开发阶段的主要内容和关键活动。 今天我们继续来介绍PDP流程的后面两个&#xff1a;验证、发布阶段的主要内容和关键活动…

处理及调度与死锁

处理及调度与死锁 一、前言 前面介绍了进程与线程的相关概念&#xff0c;现在继续学习处理机调度&#xff0c;处理机是系统最重要的资源&#xff0c;提高处理机的利用率和改善系统性能&#xff0c;在很大程度上取决于处理机调度性能的好坏&#xff0c;下面来介绍处理的调度以…

大一C语言查缺补漏 12.24

遗留问题&#xff1a; 6-1 1 在C语言中&#xff0c;如果要保留小数的话&#xff0c;一定要除以2.0&#xff0c;而不是2。 设整型变量m,n,a,b的值均为1&#xff0c;执行表达式&#xff08;m a>b&#xff09;||(n a<b)后&#xff0c;表达式的值以及变量m和n的值是&#…