微信小程序 隐私协议弹窗授权

开发微信小程序的第一步往往是隐私协议授权,尤其是在涉及用户隐私数据时,必须确保用户明确知晓并同意相关隐私政策。我们才可以开发后续的小程序内容。友友们在按照文档开发时可能会遇到一些问题,我把所有的授权方法和可能遇到的问题都整理出来,欢迎大家一起交流哦!

前置准备:(在授权隐私协议弹窗前必须准备的,不能少!!!)

1.确保小程序管理后台填写的《用户隐私保护协议》已经通过,状态是下面这种就没问题了

2.在app.json中或者manifest.json中配置__usePrivacyCheck__:true(如果你使用微信小程序开发就用app.json,如果你使用uniapp开发,就在manifest.json中配置)下面是manifest.json中的配置,app.json李也一样加上__usePrivacyCheck__:true就好了

方法一:官方隐私弹窗

为了方便小程序开发者们开发,我们自己不用手写隐私弹窗啦,只要前置准备按照我说的做好,官方会自动寻找我们在小程序中使用的一个隐私相关接口,当小程序加载到第一个隐私相关接口时,就会自动弹窗。(微信内部逻辑就是微信方会自动判断此次调用是否需要触发wx.onNeedPrivacyAuthorization 事件,如果我们不做处理,微信就自己弹窗。这种方式适合简单的需求,如果我们要更改样式,还是建议友友们自定义隐私协议弹窗。)

方法二:自定义隐私协议弹窗

梳理流程逻辑:(tips:文章最下面有完整代码,直接复制粘贴就可以使用啦)

现在隐私协议弹窗有两种方式:第一种是需要调用隐私协议时弹窗,第二种是小程序进入页面就授权,只需要授权一次,授权之后就可以使用所有隐私接口了。现在我们一般都是用第二种,更符合用户体验。咱们先梳理下第二种方法的流程:注意接下来我使用的是uniapp

1.进入首页使用 uni.getPrivacySetting 接口判断是否需要授权,需要则展示弹窗;

2.弹窗弹开,用户点击查看隐私协议内容时,我们使用 uni.openPrivacyContract 接口打开隐私保护指引页面

3.用户点击同意关闭弹窗

4.用户点击拒绝,我们就直接让他退出小程序

1.进入首页使用 uni.getPrivacySetting 接口判断是否需要授权,需要则展示弹窗;

这里我写了一个弹窗,然后在onLoad函数里使用wx.getPrivacySetting去判断隐私协议弹窗是否授权,如果函数返回needAuthorization为true就代表用户还没授权,如果没授权就打开弹窗,返回false就是授权过了如果授权过了我们就不管它:

<template><u-popup    :show="isPrivacy" mode="bottom"  :round="20" ><view class="privacyBox"><view class="privacyTit">用户隐私保护提示</view><view class="privacyDesc"><view>感谢您的使用,在您使用Anywheel服务之前,请仔细阅读</view><text @click="openClick" style="color:#20D169">《我的 小程序隐私保护指引》</text><view >如您同意该指引,请点击"同意"开始使用本程序</view></view><view style="display:flex;margin-top:50rpx;height:92rpx;"><button id="disagree-btn" @click="closePopup" size="mini" style="flex: 1;margin-right: 8px;line-height: 46px">拒绝</button><button id="agree-btn" size="mini" type="primary" style="flex: 1;line-height: 46px" open-type="agreePrivacyAuthorization"  @agreeprivacyauthorization="handleAgree">同意</button></view></view></u-popup>
</template>
<script>
export default {data(){return {isPrivacy:false}},onLoad(){uni.getPrivacySetting({success: res => {// res.needAuthorization 为true代表用户还没授权,这时候就需要弹出授权弹窗if (res.needAuthorization) {this.isPrivacy = true}else {// 用户已经同意过隐私协议,所以不需要再弹出隐私协议,直接进行页面正常流程}},fail: () => {},})}
}</script>
2.弹窗弹开,用户点击查看隐私协议内容时,我们使用 wx.openPrivacyContract 接口打开隐私保护指引页面

弹窗打开后,如果用户想点击弹窗里的隐私协议想查看具体内容怎么办,我这里绑定了openClick方法,openClick方法中调用uni.openPrivacyContract()方法就可以了。如果你们不能使用uni.openPrivacyContract()换成wx.openPrivacyContract()也行

<template><u-popup    :show="isPrivacy" mode="bottom"  :round="20" ><view class="privacyBox"><view class="privacyTit">用户隐私保护提示</view><view class="privacyDesc"><view>感谢您的使用,在您使用Anywheel服务之前,请仔细阅读</view><text @click="openClick" style="color:#20D169">《我的 小程序隐私保护指引》</text><view >如您同意该指引,请点击"同意"开始使用本程序</view></view><view style="display:flex;margin-top:50rpx;height:92rpx;"><button id="disagree-btn" @click="closePopup" size="mini" style="flex: 1;margin-right: 8px;line-height: 46px">拒绝</button><button id="agree-btn" size="mini" type="primary" style="flex: 1;line-height: 46px" open-type="agreePrivacyAuthorization"  @agreeprivacyauthorization="handleAgree">同意</button></view></view></u-popup>
</template>
<script>
export default {data(){return {isPrivacy:false}},onLoad(){uni.getPrivacySetting({success: res => {// res.needAuthorization 为true代表用户还没授权,这时候就需要弹出授权弹窗if (res.needAuthorization) {this.isPrivacy = true}else {// 用户已经同意过隐私协议,所以不需要再弹出隐私协议,直接进行页面正常流程}},fail: () => {},})},methods:{openClick() {wx.openPrivacyContract({success: () => {}, // 打开成功fail: () => {}, // 打开失败complete: () => {}})},}
}</script>
3.用户点击同意关闭弹窗

注意,用户同意这块我用button按钮写的,button按钮上有open-type="agreePrivacyAuthorization"属性,当我们绑定 @agreeprivacyauthorization="handleAgree"时,就自动通知微信那边用户已经同意授权了,具体代码在下面:

<template><u-popup    :show="isPrivacy" mode="bottom"  :round="20" ><view class="privacyBox"><view class="privacyTit">用户隐私保护提示</view><view class="privacyDesc"><view>感谢您的使用,在您使用Anywheel服务之前,请仔细阅读</view><text @click="openClick" style="color:#20D169">《我的 小程序隐私保护指引》</text><view >如您同意该指引,请点击"同意"开始使用本程序</view></view><view style="display:flex;margin-top:50rpx;height:92rpx;"><button id="disagree-btn" @click="closePopup" size="mini" style="flex: 1;margin-right: 8px;line-height: 46px">拒绝</button><button id="agree-btn" size="mini" type="primary" style="flex: 1;line-height: 46px" open-type="agreePrivacyAuthorization"  @agreeprivacyauthorization="handleAgree">同意</button></view></view></u-popup>
</template>
<script>
export default {data(){return {isPrivacy:false}},onLoad(){uni.getPrivacySetting({success: res => {// res.needAuthorization 为true代表用户还没授权,这时候就需要弹出授权弹窗if (res.needAuthorization) {this.isPrivacy = true}else {// 用户已经同意过隐私协议,所以不需要再弹出隐私协议,直接进行页面正常流程}},fail: () => {},})},methods:{openClick() {wx.openPrivacyContract({success: () => {}, // 打开成功fail: () => {}, // 打开失败complete: () => {}})},handleAgree() {let that = this// 如果用户之前已经同意过隐私授权,会立即返回success回调wx.requirePrivacyAuthorize({success: res => {that.isPrivacy = false// 同意协议后,后面正常执行后续流程}});},}
}</script>
4.用户点击拒绝,我们就直接让他退出小程序

用户拒绝隐私协议授权,代表着我们的小程序他是没法使用的,我们使用uni.exitMiniProgram给他退出小程序即可

下面是完整的代码:直接复制粘贴就可以使用:

<template><u-popup    :show="isPrivacy" mode="bottom"  :round="20" ><view class="privacyBox"><view class="privacyTit">用户隐私保护提示</view><view class="privacyDesc"><view>感谢您的使用,在您使用Anywheel服务之前,请仔细阅读</view><text @click="openClick" style="color:#20D169">《我的 小程序隐私保护指引》</text><view >如您同意该指引,请点击"同意"开始使用本程序</view></view><view style="display:flex;margin-top:50rpx;height:92rpx;"><button id="disagree-btn" @click="closePopup" size="mini" style="flex: 1;margin-right: 8px;line-height: 46px">拒绝</button><button id="agree-btn" size="mini" type="primary" style="flex: 1;line-height: 46px" open-type="agreePrivacyAuthorization"  @agreeprivacyauthorization="handleAgree">同意</button></view></view></u-popup>
</template>
<script>
export default {data(){return {isPrivacy:false}},onLoad(){uni.getPrivacySetting({success: res => {// res.needAuthorization 为true代表用户还没授权,这时候就需要弹出授权弹窗if (res.needAuthorization) {this.isPrivacy = true}else {// 用户已经同意过隐私协议,所以不需要再弹出隐私协议,直接进行页面正常流程}},fail: () => {},})},methods:{openClick() {wx.openPrivacyContract({success: () => {}, // 打开成功fail: () => {}, // 打开失败complete: () => {}})},handleAgree() {let that = this// 如果用户之前已经同意过隐私授权,会立即返回success回调wx.requirePrivacyAuthorize({success: res => {that.isPrivacy = false// 同意协议后,后面正常执行后续流程}});},closePopup() {this.isPrivacy = falseuni.exitMiniProgram({success: function() {console.log('退出小程序成功');},fail: function(err) {console.log('退出小程序失败', err);}})},}
}</script>
<style>
privacyBox {/* width: 600rpx; */padding: 60rpx 60rpx 80rpx 60rpx;box-sizing: border-box;line-height: 1.5;}.privacyTit {font-size: 32rpx;font-weight: bold;// color: $uni-text-main;text-align: center;overflow: hidden;}.privacyDesc {font-size: 28rpx;// color: $uni-text-sub;overflow: hidden;margin-top: 30rpx;}.privacyDesc text {// color: $uni-primary;}.privacyPost {overflow: hidden;margin-top: 60rpx;display: flex;justify-content: center;align-items: center;}.privacyPost .refuseBtn {flex: 1;height: 80rpx;line-height: 80rpx;text-align: center;font-size: 28rpx;font-weight: bold;color: #fff;border-radius: 40rpx;box-sizing: border-box;overflow: hidden;}.privacyPost .agreeBtn {flex: 1;height: 80rpx;line-height: 80rpx;text-align: center;font-size: 28rpx;font-weight: bold;color: #fff;border-radius: 40rpx;box-sizing: border-box;overflow: hidden;margin-left: 20rpx;}
</style>

遇到的问题及解决:

1.官方隐私协议弹窗和自己开发的自定义协议弹窗同时出现:

我在开发的过程中出现了官方隐私协议弹窗和自定义隐私协议弹窗同是出现的情况,原因是我在app.vue中使用到了隐私相关接口,官方检测到隐私协议接口就会弹隐私协议弹窗,而我们自定义隐私协议弹窗一般在首页index.vue中处理,所以就会出现两次。我们可以在app.vue页面的onLaunch函数中加入下面这段代码,就只展示我们自定义的弹窗啦

onLaunch() {// 隐私协议前置if(uni.onNeedPrivacyAuthorization){uni.onNeedPrivacyAuthorization((resolve)=>{console.log('onNeedPrivacyAuthorization',resolve)})}
}
2.needAuthorization一直返回false

这个时候就看下我写的前置准备工作有没有做好,一般出现在隐私协议被拒的情况,审核不通过是进行不了下一步的,只有下面这种状态才可以,一定别忘了哦!

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

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

相关文章

JVM规范之栈帧

JVM规范之栈帧 前言正文概述局部变量表操作数栈动态链接 总结参考链接 前言 上一篇文章了解了JVM规范中的运行时数据区&#xff1a; JVM规范之运行时数据区域 其中&#xff0c;栈是JVM线程私有的内存区&#xff0c;栈中存储的单位是帧&#xff08;frames&#xff09;&#xff…

SGMD辛几何模态分解

SGMD辛几何模态分解 运行包含频谱图相关系数图 Matlab语言 算法近几年刚提出&#xff0c;知网还没几个人用&#xff0c;你先用&#xff0c;你就是创新&#xff01; 算法新颖小众&#xff0c;用的人很少&#xff0c;包含分解图、频谱图、相关系数图&#xff0c;效果如图所示&a…

计算机网络总结(物理层,链路层)

目录 第一章 概述 1.基本概念 2.- C/S模式&#xff0c;B/S模式&#xff0c;P2P模式 3.- LAN,WAN,MAN,PAN的划分 4.电路交换与分组交换&#xff0c;数据报交换和虚电路交换 第二章 物理层 1.信号编码&#xff1a;不归零编码&#xff0c;曼切斯特编码 2.几种复用技术的特…

台系厂商SSD主控之争:Phison对决SMI

近日&#xff0c;台系SSD主控厂商Phison和Silicon Motion之间围绕主控性能的争论引发关注&#xff0c;焦点集中在Gen5 SSD的功耗和速度等关键指标上。 Phison的E28 Gen5 SSD控制器已推出一段时间&#xff0c;是市场上一些最快存储设备的“心脏”。其主要竞争对手Silicon Motion…

医学影像科研概述与研究伦理

关键要点 医学影像科研通过开发和优化影像技术(如X射线、CT、MRI等)推动疾病诊断和治疗进步。研究需遵循核心伦理原则:受益(为患者和社会带来益处)、无害(避免伤害)、自主(尊重患者选择权)和公正(公平对待参与者)。医学影像科研的特殊伦理问题包括知情同意、隐私保护…

使用 kafka-console-consumer.sh 指定时间或偏移量消费

1、问题来源 在工作中需要观察上游生产的数据顺序和自己写的任务处理数据的顺序是否一致&#xff0c;尝尝需要将kafka中的指定时间或者偏移量开始的数据导出来分析&#xff0c;如果每次都导数据都是从头开消费导全量&#xff0c;往往少则几个G多则几十G的数据&#xff0c;导出…

构建Harbor私有镜像库

软硬件环境清单 环境搭建 部署Euler22.0系统&#xff0c;连接xshell&#xff1a; 关闭防火墙和selinux&#xff0c;设置主机名&#xff1a; systemctl stop firewalld systemctl disable firewalld vi /etc/selinux/config hostnamectl set-hostname harbor reboot 修改静态…

分布式缓存:缓存设计中的 7 大经典问题_缓存失效、缓存穿透、缓存雪崩

文章目录 缓存全景图Pre缓存设计中的 7 大经典问题一、缓存失效1. 问题描述2. 原因分析3. 业务场景4. 解决方案 二、缓存穿透1. 问题描述2. 原因分析3. 业务场景4. 解决方案缓存空结果BloomFilter 过滤BloomFilter 原理简述 三、缓存雪崩1. 问题描述2. 原因分析3. 业务场景4. 解…

Mysql差异备份与恢复

1.练习差异备份 差异备份&#xff1a;备份完全备份后&#xff0c;新产生的数据。 在192.168.88.50主机完成差异备份 步骤一&#xff1a;练习差异备份//周一完全备份 mysql> select * from test.one; --------------------- | name | age | sex | ------------------…

【Fargo】razor框架调用mediasoup的发送和接收能力

功能进行拆分,创建独立的发送和接收线程,并实现跨线程的数据传递。创建一个简化的主函数,展示如何使用这些新的接口线程隔离是通过包队列实现的,实际上可以用webrtc的post 跨线程机制? 需求 主要有两个需求:启动接收线程接收数据的接口 启动发送线程,但是数据来自于sim_…

C++——volatile

Cvolatile关键字 volatile是C中的一个关键字&#xff0c;用于修饰变量&#xff0c;表示该变量的值可能会在程序的控制之外被改变。它主要告诉编译器不要对这个变量进行优化&#xff0c;确保每次访问变量时都从实际存储位置读取最新值&#xff0c;而不是依赖寄存器中的缓存值。…

搭建自己的语音对话系统:开源 S2S 流水线深度解析与实战

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

qt浏览文件支持惯性

#include <QApplication> #include <QListWidget> #include <QScroller> #include <QScrollerProperties>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建列表控件并添加示例项QListWidget listWidget;for (int i 0; i <…

路径规划算法BFS/Astar/HybridAstar简单实现

借鉴本文所述代码简单实现一下BFS&#xff0c;Astar和HybridAstar路径规划算法&#xff0c;用于辅助理解算法原理。 代码在这里&#xff0c;画图用到了matplotlibcpp库&#xff0c;需要先装一下&#xff0c;然后直接在文件目录下执行如下代码即可运行&#xff1a; mkdir build…

get_the_category() 和 get_the_terms() 的区别

get_the_category() 和 get_the_terms() 是WordPress中用于获取文章分类的两个函数&#xff0c;但它们之间存在一些关键差异&#xff1a; get_the_category() 特定于分类&#xff1a;get_the_category() 函数专门用于获取文章的分类(category)。它返回一个包含所有分类对象的…

RocketMq的消息类型及代码案例

RocketMQ 提供了多种消息类型&#xff0c;以满足不同业务场景对 顺序性、事务性、时效性 的要求。其核心设计思想是通过解耦 “消息传递模式” 与 “业务逻辑”&#xff0c;实现高性能、高可靠的分布式通信。 一、主要类型包括 普通消息&#xff08;基础类型&#xff09;顺序…

maxkey单点登录系统

github地址 https://github.com/MaxKeyTop/MaxKey/blob/master/README_zh.md 1、官方镜像 https://hub.docker.com/u/maxkeytop 2、MaxKey:Docker快速部署 参考地址&#xff1a; Docker部署 | MaxKey单点登录认证系统 拉取docker脚本MaxKey: Dromara &#x1f5dd;️MaxK…

基于AI生成测试用例的处理过程

基于AI生成测试用例的处理过程是一个结合机器学习、自然语言处理&#xff08;NLP&#xff09;和领域知识的系统性流程。以下是其核心步骤和关键技术细节&#xff0c;以帮助理解如何利用AI自动化生成高效、覆盖全面的测试用例。 1. 输入分析与需求建模 目标 将用户需求、系统文…

《Java vs Go vs C++ vs C:四门编程语言的深度对比》

引言​​ 从底层硬件操作到云端分布式系统&#xff0c;Java、Go、C 和 C 四门语言各自占据不同生态位。本文从​​设计哲学​​、​​语法范式​​、​​性能特性​​、​​应用场景​​等维度进行对比&#xff0c;为开发者提供技术选型参考。 一、​​设计哲学与历史定位​​…

无损提速黑科技:YOLOv8+OREPA卷积优化方案解析(原理推导/代码实现/调参技巧三合一)

文章目录 一、OREPA核心思想与创新突破1.1 传统重参数化的局限性1.2 OREPA的核心创新二、OREPA实现原理与数学推导2.1 卷积核分解策略2.2 动态融合公式三、YOLOv8集成实战(完整代码实现)3.1 OREPA卷积模块定义3.2 YOLOv8模型集成3.3 训练与推理配置四、性能对比与实验分析4.1…