uniapp适配微信隐私协议开发指南[uniapp+vue3+js]

没怎么做过uniapp,找了一些文章做了出来,给大家分享一下

2023.9.15以后需要适配微信的隐私协议开发指南

目前uniapp的说法是微信小程序隐私协议开发指南 | uni-app官网

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

微信官方提供了几个demo

完整示例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/hndZUOmA7gKn

demo3: 演示 wx.onNeedPrivacyAuthorizationwx.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

此方法是demo2:监听什么时候调用隐私接口,然后弹出隐私弹窗,隐私弹窗会阻碍隐私接口授权(例如授权手机号,地理位置等),直到点击了隐私弹窗的同意/拒绝才会继续执行。

如果拒绝了隐私授权弹窗,那么此时的微信授权中不存在未弹出的授权

也就是

wx.getSetting({success (res) {console.log(res.authSetting)// res.authSetting = {//   "scope.userInfo": true,//   "scope.userLocation": true// }}
})

是取不到未弹出隐私授权的弹框的值的。该隐私接口不属于同意,也不属于拒绝

在开发之前,需要在小程序管理后台-设置-基本设置-服务内容声明-用户隐私保护指引中添加用到的隐私接口

 

审核通过后,才能生效。 

1.添加  "__usePrivacyCheck__": true,

uniapp可以添加在manifest.json,或者编译后的dist/mp-weixin/app.json

 "permission": {"scope.userLocation": {"desc": "将获取你的具体位置信息"}},"requiredPrivateInfos": ["getLocation"],"__usePrivacyCheck__": true,"usingComponents": {}
2.添加getPrivacy.js
const PrivacyProtocol = {needAuthorization: false, privacyContractName: ''
}
//获取微信侧同步的用户隐私协议开关export function checkUserPrivacyProtocol() {if (wx.getPrivacySetting) {wx.getPrivacySetting({success: (res) => {console.log('协议显示的值',res)PrivacyProtocol.needAuthorization = res.needAuthorizationif (res.needAuthorization) {// 需要弹出隐私协议  PrivacyProtocol.privacyContractName = res.privacyContractName}uni.setStorageSync("PrivacyProtocol", PrivacyProtocol);}})}
}
3.在App.vue的OnLunch中使用

引入getPrivacy.js的checkUserPrivacyProtocol后

onLaunch() {checkUserPrivacyProtocol();},
4.新建privacy.vue组件
<template><div><div v-if="showPrivacyPopup" class="popup-container"><div class="popup-content"><div class="popup-header">{{ AppName }} 申请</div><div class="popup-center">在你使用服务之前,请仔细阅读<spanclass="privacy-link"@click="onClickPrivacyPopupTitle">{{ PrivacyProtocol.privacyContractName }}</span>。如果你同意,请点击“允许”开始使用。</div><div class="button-container"><button @click="handleRefusePrivacyAuthorization">拒绝</button><buttonid="agree-btn"class="btn-agree"open-type="agreePrivacyAuthorization"@agreeprivacyauthorization="handleAgreePrivacyAuthorization">允许</button></div></div></div></div>
</template><script setup>
import { ref } from "vue";
import { onLoad } from "@dcloudio/uni-app";let resolvePrivacyAuthorization;const showPrivacyPopup = ref(false); // 是否需要弹出协议授权
const PrivacyProtocol = ref(uni.getStorageSync("PrivacyProtocol"));
const AppName = ref('小程序名字')
// 打开弹窗
const openPrivacyPopup = () => {showPrivacyPopup.value = true;console.log("PrivacyProtocol", PrivacyProtocol);
};// 关闭弹窗
const closePrivacyPopup = () => {showPrivacyPopup.value = false;
};// 用户点击同意
const handleAgreePrivacyAuthorization = () => {console.log("点击了同意");resolvePrivacyAuthorization({buttonId: "agree-btn",event: "agree"});closePrivacyPopup();
};// 用户点击拒绝
const handleRefusePrivacyAuthorization = () => {console.log("点击了拒绝", resolvePrivacyAuthorization);resolvePrivacyAuthorization({event: "disagree"});// 关闭弹窗closePrivacyPopup();uni.showToast({title: "未同意授权,请重试",icon: "none",duration: 2500});
};// 打开隐私协议
const onClickPrivacyPopupTitle = () => {wx.openPrivacyContract({success: () => {console.log("已打开");} // 打开成功});
};// 监听调用微信api的函数
const saveWXCallBack = () => {console.log('111111111');if (wx.onNeedPrivacyAuthorization) {wx.onNeedPrivacyAuthorization((resolve, eventInfo) => {// 真机/预览可以拿到eventInfo,模拟器undefinedconsole.log("调用接口/组件:", eventInfo);openPrivacyPopup();resolvePrivacyAuthorization = resolve;});}
};onLoad(async () => {await saveWXCallBack();});
</script><style scoped>
.popup-container {position: fixed;bottom: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.2);display: flex;justify-content: center;align-items: flex-end;z-index: 10000;
}.popup-content {background-color: white;padding: 40rpx;border-radius: 20rpx;box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.2);text-align: left;
}.popup-header {font-size: 26rpx;margin-bottom: 20rpx;
}.popup-center {font-size: 30rpx;
}
.privacy-link {color: #3478f7;cursor: pointer;
}.button-container {display: flex;margin-top: 40rpx;
}button {width: 200rpx;height: 70rpx;text-align: center;line-height: 70rpx !important;font-size: 28rpx;color: #101010;border: 1px solid #eee;cursor: pointer;
}.btn-agree {background-color: rgb(7, 193, 96);color: #fff;
}
</style>
5.在调用了隐私接口的页面使用该组件
import privacy from "@/pages/components/privacy.vue";<privacy  />

效果图,弹窗显示在底部,类似于微信默认的授权弹窗,在点击允许后会弹出微信的api授权弹窗,若点击否,则什么都没有。

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

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

相关文章

【Java 进阶篇】Jedis:让Java与Redis轻松对话的利器

在现代软件开发中&#xff0c;缓存系统是提高系统性能的常见手段之一&#xff0c;而Redis作为一个高性能的缓存数据库&#xff0c;被广泛应用于各类系统。如果你是Java开发者&#xff0c;那么使用Jedis库可以让你轻松地与Redis进行交互。本文将带你深入了解Jedis的快速入门&…

微服务实战系列之Nginx

前言 Nginx&#xff1f;写了那么多文章&#xff0c;为什么今天才轮到它的表演&#xff1f;那是因为它实在太重要了&#xff0c;值得大书特书&#xff0c;特别对待。 当我们遇到单点瓶颈&#xff0c;第一个idea是&#xff1f;Nginx&#xff1b; 当我们需要反向代理&#xff0c;…

游戏测试大揭秘,帮你轻松过关!

游戏测试可以看作是软件测试的一个分支&#xff0c;黑盒测试最基本的要求是会玩游戏。小公司会要求测试能力更加全面的员工&#xff0c;其中除了功能测试还要会性能测试&#xff0c;兼容测试&#xff0c;弱网测试&#xff0c;自动化测试等。 游戏测试是游戏开发过程中必不可少…

文件批量重命名技巧:图片文件名太长怎么办?告别手动改名方法

在日常生活中&#xff0c;常常会遇到文件名过长导致的问题。尤其是在处理大量图片文件时&#xff0c;过长的文件名可能会使得文件管理变得混乱不堪。现在来看下云炫文件管理器如何批量重命名&#xff0c;让图片文件名变得更简洁&#xff0c;提高工作效率。 操作1、在云炫文件…

Error running Tomcat8: Address localhost:1099 is already in use 错误解决

摘要: 有时候运行web项目的时候会遇到 Error running Tomcat8: Address localhost:1099 is already in use 的错误&#xff0c;导致web项目无法运行。这篇 blog 介绍了解决办法。 有时候运行web项目的时候会遇到 Error running Tomcat8: Address localhost:1099 is already in …

MySQL where 子句

文章目录 前言MySQL where 子句语法 从命令提示符中读取数据使用PHP脚本读取数据后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力…

网络互联与IP地址

目录 网络互联概述网络的定义与分类网络的定义网络的分类 OSI模型和DoD模型网络拓扑结构总线型拓扑结构星型拓扑结构环型拓扑结构 传输介质同轴电缆双绞线光纤 介质访问控制方式CSMA/CD令牌 网络设备网卡集线器交换机路由器总结 IP地址A、B、C类IP地址特殊地址形式 子网与子网掩…

2、git进阶操作

2、git进阶操作 2.1.1 分支的创建 命令参数含义git branch (git checkout -b)<new_branch> <old_branch>表示创建分支-d <-D>删除分支 –d如果分支没有合并&#xff0c;git会提醒&#xff0c;-D强制删除-a -v查看分支-m重新命名分支commit id从指定的commi…

基于广义正态分布算法优化概率神经网络PNN的分类预测 - 附代码

基于广义正态分布算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于广义正态分布算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于广义正态分布优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xf…

2023亚太杯数学建模C题思路分析 - 我国新能源电动汽车的发展趋势

1 赛题 问题C 我国新能源电动汽车的发展趋势 新能源汽车是指以先进技术原理、新技术、新结构的非常规汽车燃料为动力来源( 非常规汽车燃料指汽油、柴油以外的燃料&#xff09;&#xff0c;将先进技术进行汽车动力控制和驱动相结 合的汽车。新能源汽车主要包括四种类型&#x…

MySQL与Redis如何保证数据的一致性

文章目录 MySQL与Redis如何保证数据的一致性&#xff1f;不好的方案1. 先写 MySQL&#xff0c;再写 Redis2. 先写 Redis&#xff0c;再写 MySQL3. 先删除 Redis&#xff0c;再写 MySQL 好的方案4. 先删除 Redis&#xff0c;再写 MySQL&#xff0c;再删除 Redis5. 先写 MySQL&am…

五种多目标优化算法(NSDBO、NSGA3、MOGWO、NSWOA、MOPSO)求解微电网多目标优化调度(MATLAB代码)

一、多目标优化算法简介 &#xff08;1&#xff09;非支配排序的蜣螂优化算法NSDBO 多目标应用&#xff1a;基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度&#xff08;MATLAB&#xff09;-CSDN博客 &#xff08;2&#xff09;NSGA3 NSGA-III求解微电网多目标…