微信小程序 隱私協議彈窗授權

開發微信小程序的第一步往往是隱私協議授權,尤其是在涉及用戶隱私數據時,必須確保用戶明確知曉并同意相關隱私政策。我們才可以開發后續的小程序內容。友友們在按照文檔開發時可能會遇到一些問題,我把所有的授權方法和可能遇到的問題都整理出來,歡迎大家一起交流哦!

前置準備:(在授權隱私協議彈窗前必須準備的,不能少!!!)

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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84412.shtml
英文地址,請注明出處:http://en.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…