最近小程序又新增了个 隐私协议弹窗。需要用户去授权,官网的一些API才能使用。官网地址

功能展示

项目地址:https://ext.dcloud.net.cn/plugin?id=14358

1.manifest.json中添加

"mp-weixin" : {
//小程序隐私协议
"__usePrivacyCheck__": true
},

注:小程序运行会报 无效的 app.json ["__usePrivacyCheck__"],有说切换基础库调试,但是这个提示一直在,不影响代码的运行

2.创建协议弹窗

创建components文件夹下,创建privacy-popup文件夹与privacy-popup.vue。

主要通过 wx.onNeedPrivacyAuthorization 接口来监听何时需要提示用户阅读隐私政策。

调用 wx.openPrivacyContract 接口打开隐私协议页面为空白,具体原因还不清楚。可能是个人原因。

注:微信公众平台—设置—找到—用户隐私保护指引。添加协议内容,等待审核通过。

不配置协议内容,点击头像获取提示,[渲染层错误] [Component] <button>: chooseAvatar:fail api scope is not declared in the privacy agreement(env: Windows,mp,1.06.2307260; lib: 3.0.1)

<!--
* @author: Jay
* @description: 小程序隐私协议 弹窗
* @createTime: 2023-08-31 10:07:54
-->
<template>
<view v-if="showPop">
<view class="privacy-mask">
<view class="privacy-wrap">
<view class="privacy-title">
用户隐私保护提示
</view>
<view class="privacy-desc">
感谢您使用本小程序,在使用前您应当阅读井同意
<text class="privacy-link" @tap="openPrivacyContract">《用户隐私保护指引》</text>,
当点击同意并继续时,即表示您已理解并同意该条款内容,该条款将对您产生法律约束力;如您不同意,将无法继续使用小程序相关功能。
</view>
<view class="privacy-button-flex">
<button class="privacy-button-btn bg-disagree" @tap="handleDisagree">
不同意
</button>
<button id="agree-btn" class="privacy-button-btn bg-agree" open-type="agreePrivacyAuthorization"
@agreeprivacyauthorization="handleAgree">
同意并继续
</button>
</view>
</view>
</view>
</view>
</template> <script>
export default {
data() {
return {
showPop: false,
privacyAuthorization: null,
privacyResolves: new Set(),
closeOtherPagePopUpHooks: new Set(),
}
},
mounted() {
this.init()
this.curPageShow()
},
created() {
//查询微信侧记录的用户是否有待同意的隐私政策信息
wx.getPrivacySetting({
success(res) {
console.log('隐私政策信息', res)
// if (res.needAuthorization) {
// //打开弹窗
// that.popUp()
// }
}
});
},
methods: {
// 监听何时需要提示用户阅读隐私政策
init() {
let that = this;
if (wx.onNeedPrivacyAuthorization) {
wx.onNeedPrivacyAuthorization((resolve) => {
if (typeof that.privacyAuthorization === 'function') {
that.privacyAuthorization(resolve)
}
})
}
},
//初始化监听程序
curPageShow() {
this.privacyAuthorization = resolve => {
this.privacyResolves.add(resolve)
//打开弹窗
this.popUp()
// 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
this.closeOtherPagePopUp(this.disPopUp)
}
this.closeOtherPagePopUpHooks.add(this.disPopUp)
},
// 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
closeOtherPagePopUp(closePopUp) {
this.closeOtherPagePopUpHooks.forEach(hook => {
if (closePopUp !== hook) {
hook()
}
})
},
//打开隐私协议
openPrivacyContract() {
wx.openPrivacyContract({
success(res) {
console.log('打开隐私协议', res);
},
fail(err) {
console.error('打开隐私协议失败', err)
}
});
},
// 不同意
handleDisagree() {
this.privacyResolves.forEach(resolve => {
resolve({
event: 'disagree',
})
})
this.privacyResolves.clear()
//关闭弹窗
this.disPopUp()
//退出小程序
// wx.exitMiniProgram();
},
// 同意并继续
handleAgree() {
this.privacyResolves.forEach(resolve => {
resolve({
event: 'agree',
buttonId: 'agree-btn'
})
})
this.privacyResolves.clear()
//关闭弹窗
this.disPopUp()
},
//打开弹窗
popUp() {
if (this.showPop === false) {
this.showPop = true
}
},
//关闭弹窗
disPopUp() {
if (this.showPop === true) {
this.showPop = false
}
},
}
}
</script> <style lang="scss" scoped>
.privacy-mask {
position: fixed;
z-index: 5000;
top: 0;
right: 0;
left: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.2);
display: flex;
align-items: center;
justify-content: center;
} .privacy-wrap {
width: 632rpx;
padding: 48rpx 30rpx;
box-sizing: border-box;
background: #fff;
border-radius: 16rpx;
} .privacy-title {
padding: 0rpx 30rpx 40rpx 30rpx;
font-weight: 700;
font-size: 36rpx;
text-align: center;
} .privacy-desc {
font-size: 30rpx;
color: #555;
line-height: 2;
text-align: left;
padding: 0 40rpx;
} .privacy-link {
color: #2f80ed;
} .privacy-button-flex {
display: flex;
padding: 20rpx 40rpx;
} .privacy-button-btn {
color: #FFF;
font-size: 30rpx;
font-weight: 500;
line-height: 100rpx;
text-align: center;
height: 100rpx;
border-radius: 20rpx;
border: none;
background: #07c160;
flex: 1;
margin-right: 30rpx;
justify-content: center;
} .privacy-button-btn::after {
border: none;
} .bg-disagree {
color: #07c160;
background: #f2f2f2;
} .bg-agree {
margin-right: 0rpx;
}
</style>

privacy-popup.vue

3.引入插件

在登录或其他需要调用微信API的页面到处插件

或者在APP.vue全局导入插件

注:插件导入即可,触发微信API方可自动调用,打开协议弹窗

<template>
<view>
<!-- #ifdef MP-WEIXIN -->
<!-- 小程序隐私协议 -->
<privacy-popup></privacy-popup>
<!-- #endif -->
</view>
</template> <script>
// 小程序隐私协议
import PrivacyPopup from "@/components/privacy-popup/privacy-popup.vue"
export default {
data() {},
components: {
PrivacyPopup
},
}
</script> <style lang="scss" scoped>
</style>

微信原生开发可使用该组件:https://juejin.cn/post/7272276908381175819 ,参照改成更适合uni体质的组件。

uni微信小程序隐私协议的更多相关文章

  1. uni微信小程序优化,几行代码就能省100kb的主包空间?

    不是标题党,我们公司的项目确确实实是省下了100kb的主包空间,而且还是在没有牺牲任何的性能和业务的前提下实现的. 但是100kb是根据项目大小,所以你用这个插件可能省下超过100kb或者更少. 直接 ...

  2. uni微信小程序优化,打包后的import vue路径是可删除的

    这次的优化我公司项目主包只减小了32kb,但是减小的不仅仅是主包,所有分包均在没有改动任何业务代码的情况下完成了压缩空间的优化. 主包分包压缩空间的优化都要视项目而定,32kb只是我公司的小程序项目. ...

  3. 微信小程序隐私指引完整填写范本(开发者收集你选中的照片或视频信息,用于?)

    为了分辨用户,开发者将在获取你的明示同意后,收集你的微信昵称.头像.为了显示距离,开发者将在获取你的明示同意后,收集你的位置信息.开发者收集你的地址,用于获取位置信息.开发者收集你的发票信息,用于维护 ...

  4. uni微信小程序优化,多个分包在用的公共代码该放在哪?

    公共的代码包括公用的vue组件和js代码,从维护性的角度来说应该放到主包才对, 但是主包有大小限制,如果把2个分包都在用的代码放到主包里面那2M很快就满了. 所以该放在哪?我的方案是从维护的角度放在主 ...

  5. uni/微信小程序 - 使用外部字体

    字体图标/字体仅支持网络css路径(也就是不支持本地路径) 参考于:https://blog.csdn.net/u013451157/article/details/79825740

  6. uni/微信小程序 - 使用字体图标

    阿里字体图标:http://www.iconfont.cn/home/index?spm=a313x.7781069.1998910419.2 1.单个/ 多个选择字体图标 2. 导入字体库 可以参考 ...

  7. 开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等

    在上篇随笔<基于微信小程序的系统开发准备工作>介绍了开发微信小程序的一些前期的架构设计.技术路线 .工具准备等方面内容,本篇随笔继续这个步骤,逐步介绍我们实际开发过程中对SSL协议的申请及 ...

  8. 关于微信小程序开发环境苹果IOS真机预览报SSL协议错误问题解决方案

                              微信小程序开发环境苹果IOS真机预览报SSL协议错误问题 原文来自:https://blog.csdn.net/qq_27626333/articl ...

  9. 公测后,微信小程序应用可能被拒原因.

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 34.0px "PingFang SC Semibold"; color: #23232 ...

  10. 官方问答--微信小程序常见FAQ (17.8.21-17.8.27)

    给提问的开发者的建议:提问之前先查询 文档.通过社区右上角搜索搜索已经存在的问题. 写一个简明扼要的标题,并且正文描述清楚你的问题. 提交 BUG:需要带上基础库版本号,设备信息(iOS, Andro ...

随机推荐

  1. 2020-06-11-ASP.NET Core Blazor 子组件父组件数据同步的问题

    上一篇写数据绑定的文章,写到最后留了一个坑.当子组件绑定父组件的一个字段,并且子组件修改它的时候父组件不能实时进行同步更新UI的问题,最近终于在Blazui作者的指导下搞定了. UserInfo类要实 ...

  2. mysql字段添加中文提示Data too long

    解决方法: 新建一个数据库,字符集选择utf8

  3. ol设置最佳可视范围和限制缩放

    目前随着科技发展,智慧城市的不断发展,GIS方面的技术也是层出不穷,如市场流行的 OPENLAYERS, CESIUM, THREE等,但是也会有很多棘手的问题,比如不同分辨率下,图层的显示范围,禁止 ...

  4. aspnetcore最最简单的接口权限认证

    五月一眨眼就过去,就当凑个数吧. 场景: 一个小小的项目,需要一个后台,就展示几个列表,连用户表.角色表等都不需要设计. 之前有写过identityserver4和jwt4的demo (exercis ...

  5. 基于SqlSugar的开发框架循序渐进介绍(30)-- 整合客户关系管理系统模块功能

    以前在随笔<Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示 >的几篇随笔中介绍过基于WInform开发框架开发的CRM系统,系统的功能主要也是围绕着客户相 ...

  6. PHP sprintf函数 bug

    sprintf() 定义和用法 format参数 可能的格式值: %% - 返回一个百分号 % %b - 二进制数 %c - ASCII 值对应的字符 %d - 包含正负号的十进制数(负数.0.正数) ...

  7. Java基础之基础语法与面向对象

    前言 小知识 Java由Sun公司于1995年推出,2009年Sun公司被Oracle公司收购,取得Java的版权 Java之父:James Gosling(詹姆斯·高斯林) 专业术语 JDK:jav ...

  8. CentOS7 配置本地yum源软件仓库

    CentOS7 配置本地yum源软件仓库 前言 配置本地yum源软件仓库可以离线状态下安装本地已有的软件 先连接虚拟光驱,对应的光驱iso文件 查看磁盘分区状态 可以看到sr0 未挂载 [root@l ...

  9. c++中vector容器的用法

    C语言中const关键字是constant的缩写,通常翻译为常量.常数等,它可以修饰变量.数组.指针.函数参数. vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器.ve ...

  10. C++面试八股文:了解位运算吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第12面: 面试官:了解位运算吗? 二师兄:了解一些.(我很熟悉) 面试官:请列举以下有哪些位运算? 二师兄:按位与(&).按位或(|).按位 ...