uni-app 應對微信小程式最新隱私協議介面要求的處理方法

来源:https://www.cnblogs.com/smileZAZ/archive/2023/10/31/17800776.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一,問題起因 最新在開發小程式的時候,調用微信小程式來獲取用戶信息的時候經常報錯一個問題 fail api scope is not declared in the privacy agreement,api 更具公告,是微信更新對應的隱 ...


這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

 

一,問題起因

最新在開發小程式的時候,調用微信小程式來獲取用戶信息的時候經常報錯一個問題

fail api scope is not declared in the privacy agreement,api

具公告,是微信更新對應的隱私協議

https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&announce_id=11691660367cfUvX&version=&lang=zh_CN&token=

二,解決方案

下麵是我總結的解決步驟

1.前往微信小程式公眾平臺配置設置,完善並提交信息(註意:更新好隱私協議,要通過審核的,介面才能正常訪問)

2.在components新增組件PrivacyPop

vue2版本

<template>
    <view class="privacy" v-if="showPrivacy">
        <view class="content">
            <view class="title">隱私保護指引</view>
            <view class="des">
                在使用當前小程式服務之前,請仔細閱讀<text class="link" @tap="openPrivacyContract">{{ privacyContractName }}</text>。如你同意{{
                    privacyContractName }},請點擊“同意”開始使用。
            </view>
            <view class="btns">
                <button class="item reject" @tap="exitMiniProgram">拒絕</button>
                <button id="agree-btn" class="item agree" open-type="agreePrivacyAuthorization"
                    @agreeprivacyauthorization="handleAgreePrivacyAuthorization">同意</button>
            </view>
        </view>
    </view>
</template>
  
<script>
export default {
    data() {
        return {
            privacyContractName: '《XXX隱私保護引導》',
            showPrivacy: false
        }
    },
    methods: {
		checkPrivacySetting(){
			uni.getPrivacySetting({
			      success: res => {
					console.log("getPrivacySetting",res)
					this.showPrivacy = true
			        // 返回結果為: res = { needAuthorization: true/false, privacyContractName: '《xxx隱私保護指引》' }
			        // if (res.needAuthorization) {
			          // 需要彈出隱私協議
			            // this.showPrivacy = false
			        // } else {
						// this.showPrivacy = true
			          // 用戶已經同意過隱私協議,所以不需要再彈出隱私協議,也能調用已聲明過的隱私介面
			          // wx.getUserProfile()
			          // wx.chooseMedia()
			          // wx.getClipboardData()
			          // wx.startRecord()
			        // }
			      },
			      fail: () => {},
			      complete: () => {}
			})
		},
		// 打開隱私協議
        openPrivacyContract() {
            uni.openPrivacyContract({
                fail: () => {
                    uni.showToast({
                        title: '遇到錯誤',
                        icon: 'error'
                    })
                }
            })
        },
        // 拒絕隱私協議
        exitMiniProgram() {
			console.log("拒絕隱私協議")
			const that = this;
            // 直接退出小程式
            // wx.exitMiniProgram()
			uni.showModal({
				// 如果拒絕,我們將無法獲取您的信息, 包括手機號、位置信息、相冊等該小程式十分重要的功能,您確定要拒絕嗎?
				content: '您確定要拒絕嗎?',
				success: res => {
					if (res.confirm) {
						that.showPrivacy = false;
						uni.exitMiniProgram({
							success: () => {
								console.log('退出小程式成功');
							}
						});
					}
				}
			});
        },
        // 同意隱私協議
        handleAgreePrivacyAuthorization() {
           
			wx.requirePrivacyAuthorize({
			      success: () => {
			        // 用戶同意授權
			        // 繼續小程式邏輯
					 this.showPrivacy = false
			      },
			      fail: () => {}, // 用戶拒絕授權
			      complete: () => {}
			    })
        }
    }
}
</script> 
  
<style scoped> .privacy {
     position: fixed;
     top: 0;
     right: 0;
     bottom: 0;
     left: 0;
     background: rgba(0, 0, 0, .5);
     z-index: 9999999;
     display: flex;
     align-items: center;
     justify-content: center;
 }
 
 .content {
     width: 632rpx;
     padding: 48rpx;
     box-sizing: border-box;
     background: #fff;
     border-radius: 16rpx;
 }
 
 .content .title {
     text-align: center;
     color: #333;
     font-weight: bold;
     font-size: 32rpx;
 }
 
 .content .des {
     font-size: 26rpx;
     color: #666;
     margin-top: 40rpx;
     text-align: justify;
     line-height: 1.6;
 }
 
 .content .des .link {
     color: #07c160;
     text-decoration: underline;
 }
 
 .btns {
     margin-top: 48rpx;
     display: flex;
 }
 
 .btns .item {
     justify-content: space-between;
     width: 244rpx;
     height: 80rpx;
     display: flex;
     align-items: center;
     justify-content: center;
     border-radius: 16rpx;
     box-sizing: border-box;
     border: none;
 }
 
 .btns .reject {
     background: #f4f4f5;
     color: #909399;
 }
 
 .btns .agree {
     background: #07c160;
     color: #fff;
 }
</style>

vue3版本

<template>
	<view class="privacy" v-if="showPrivacy">
		<view class="content">
			<view class="title">隱私保護指引</view>
			<view class="des">
				在使用當前小程式服務之前,請仔細閱讀<text class="link" @tap="openPrivacyContract">{{ privacyContractName }}</text>。如你同意{{
                    privacyContractName }},請點擊“同意”開始使用。
			</view>
			<view class="btns">
				<button class="item reject" @tap="exitMiniProgram">拒絕</button>
				<button id="agree-btn" class="item agree" open-type="agreePrivacyAuthorization"
					@agreeprivacyauthorization="handleAgreePrivacyAuthorization">同意</button>
			</view>
		</view>
	</view>
</template>

<script lang="ts" setup>
	import { ref } from "vue";
	const privacyContractName = ref('《用戶隱私保護引導》');
	const showPrivacy = ref(false);
	const checkPrivacySetting = () => {
		uni.getPrivacySetting({
			success: (res) => {
				showPrivacy.value = true
			}
		})
	}
	// 打開隱私協議
	const openPrivacyContract = () => {
		uni.openPrivacyContract({
			fail: () => {
				uni.showToast({
					title: '遇到錯誤',
					icon: 'error'
				})
			}
		})
	}

	// 拒絕隱私協議
	const exitMiniProgram = () => {
		console.log("拒絕隱私協議")
		uni.showModal({
			// 如果拒絕,我們將無法獲取您的信息, 包括手機號、位置信息、相冊等該小程式十分重要的功能,您確定要拒絕嗎?
			content: '您確定要拒絕嗎?',
			success: res => {
				if (res.confirm) {
					showPrivacy.value = false;
					uni.exitMiniProgram({
						success: () => {
							console.log('退出小程式成功');
						}
					});
				}
			}
		});
	}
	// 同意隱私協議
	const handleAgreePrivacyAuthorization = () => {

		wx.requirePrivacyAuthorize({
			success: () => {
				// 用戶同意授權
				// 繼續小程式邏輯
				showPrivacy.value = false
			},
			fail: () => { }, // 用戶拒絕授權
			complete: () => { }
		})
	}
</script>

<style scoped>
	.privacy {
		position: fixed;
		top: 0;
		right: 0;
		bottom: 0;
		left: 0;
		background: rgba(0, 0, 0, .5);
		z-index: 9999999;
		display: flex;
		align-items: center;
		justify-content: center;
	}

	.content {
		width: 632rpx;
		padding: 48rpx;
		box-sizing: border-box;
		background: #fff;
		border-radius: 16rpx;
	}

	.content .title {
		text-align: center;
		color: #333;
		font-weight: bold;
		font-size: 32rpx;
	}

	.content .des {
		font-size: 26rpx;
		color: #666;
		margin-top: 40rpx;
		text-align: justify;
		line-height: 1.6;
	}

	.content .des .link {
		color: #07c160;
		text-decoration: underline;
	}

	.btns {
		margin-top: 48rpx;
		display: flex;
	}

	.btns .item {
		justify-content: space-between;
		width: 244rpx;
		height: 80rpx;
		display: flex;
		align-items: center;
		justify-content: center;
		border-radius: 16rpx;
		box-sizing: border-box;
		border: none;
	}

	.btns .reject {
		background: #f4f4f5;
		color: #909399;
	}

	.btns .agree {
		background: #07c160;
		color: #fff;
	}
</style>

3.在要使用的頁面中引入

vue2版本

import PrivacyPop from '../../components/PrivacyPop/PrivacyPop.vue';

components:{
	PrivacyPop
},
async onLoad() {
	this.$refs.PrivacyPopck.checkPrivacySetting();
},

vue3版本(建議點擊事件觸發)

import PrivacyPop from '@/components/PrivacyPop.vue';
import { ref } from "vue";
const PrivacyObj = ref({
		
	})
const ClickFun = ()=>{
	if(PrivacyObj.value){
		PrivacyObj.value.checkPrivacySetting();
	}
		
}

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # Unity進階開發-FSM有限狀態機 前言 我們在進行開發時,到了一定程度上,會遇到數十種狀態,繼續使用Unity的Animator控制器會出現大量的bool,float類型的變數,而這些錯綜複雜的變數與Animatator控制器如同迷宮版連線相結合會變得極其的複雜且無法良好維護擴展,出現一個B ...
  • CA和PKI介紹 CA(Certificate Authority),翻譯過來就叫作證書頒發機構。用於實現數字證書的管理,包括證書頒發、吊銷、續期等。 PKI(Registration Authority ),翻譯過來叫作註冊機構,負責接收請求並驗證實體的身份,然後指示 CA 為其頒發或撤銷證書。 ...
  • 哈嘍大家好,我是鹹魚 我們知道預設情況下,Linux 終端提示符都是簡單的黑白色 這種黑白提示一方面看久了容易視覺疲勞,另一方面由於沒有高亮顯示,看著很不方便,視覺體驗極差 所以我們需要修改我們的終端顯示顏色,像下麵這樣子 PS1(提示語句) 在 Linux 中,當前的 Bash 提示設置保存在一個 ...
  • kube-promethues配置釘釘告警 前置:k8s部署kube-promethues 一.配置釘釘機器人 打開釘釘的智能群助手,點擊添加機器人 選擇自定義機器人 勾選加簽,複製後保存 複製webhook地址後點擊保存 二.編寫dingtalk的yaml部署文件 vi dingtalk.yaml ...
  • Redis是基於記憶體的K-V鍵值對記憶體資料庫 淺談Redis7新特性 主要是自身底層性能和資源利用率上的提高和優化。 多AOF文件支持 config命令增強 限制客戶端記憶體使用 listpack緊湊列表調整 訪問安全性增強 Redis Functions(要搶Lua腳本的飯碗) RDB保存時間調整, ...
  • 本文記錄如何在Linux系統上進行MongoDB資料庫的導出和導入(備份和還原),Windows系統上的命令基本一樣,僅文件路徑不同。 ...
  • 本文分享自華為雲社區《華為雲GaussDB城市沙龍活動走進安徽,助力金融行業數字化轉型》,作者: GaussDB 資料庫 。 近日,華為雲GaussDB資料庫城市沙龍·安徽站圈層活動順利舉行。活動邀請了金融行業代表及伙伴,一起圍繞資料庫展開了金融行業數字化轉型解決方案與成功實踐交流,共同推動國內數據 ...
  • 背景 1、在ArkTS的架構中,沒有明確的可管理的載入請求狀態的腳手架,在進行網路請求過程中,無法簡單的進行交互響應。 2、參考Android中的LoadState寫了一個簡單的腳手架,以便在日常開發過程中,管理載入請求狀態和UI交互。 腳手架說明與源碼 1、狀態機LoadState 使用一個狀態機 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...