当前位置: 首页 > article >正文

Uniapp 开发 App 端上架用户隐私协议实现指南

文章目录

  • 引言
  • 一、为什么需要用户隐私协议?
  • 二、Uniapp 中实现用户隐私协议的步骤
    • 2.1 编写隐私协议内容
    • 2.2 在 Uniapp 中集成隐私协议
    • 2.3 DCloud数据采集说明
    • 2.4 配置方式
    • 3.1 Apple App Store
    • 3.2 Google Play Store
  • 四、常见问题与解决方案
    • 4.1 隐私协议内容不完整
    • 4.2 用户不同意隐私协议
    • 4.3 隐私协议更新
  • 五、总结


在这里插入图片描述

引言

在移动应用开发中,用户隐私协议是不可或缺的一部分。无论是 iOS 还是 Android 平台,上架应用商店时都需要提供用户隐私协议。本文将详细介绍如何在 Uniapp 开发的 App 端实现用户隐私协议,并确保其符合各大应用商店的上架要求。

一、为什么需要用户隐私协议?

用户隐私协议是开发者向用户说明如何收集、使用、存储和保护用户个人信息的法律文件。随着 GDPR(通用数据保护条例)和 CCPA(加州消费者隐私法案)等隐私保护法规的实施,用户隐私协议的重要性愈发凸显。应用商店如 Apple App StoreGoogle Play Store 都要求应用在上架时提供隐私协议链接。

二、Uniapp 中实现用户隐私协议的步骤

HBuilderX2.6.3+ 版本开始支持配置隐私政策提示框 HBuilderX3.1.10+ 版本优化template 模式策略,解决应用市场检测到弹出隐私政策提示框之前读取 mac 地址和应用列表的问题 HBuilderX3.2.1+ 版本开始支持 androidPrivacy.json 文件配置隐私政策提示框,真机运行时也可生效 HBuilderX3.2.5+ 版本隐私政策提示框内容中的链接支持本地 html 页面地址。

📢注意:目前设置 custom 模式策略,并不能完全避免在弹出隐私提示框之前,读取设备信息(如 mac 地址、应用列表等)的情况,主要原因是自定义模式隐私提示框并不能阻塞应用的生命周期,使用到一些三方 SDK(如X5 Webview内核、UniPush等)在应用启动时会执行初始化操作,三方 SDK 这是可能会读取设备信息。碰到此问题的开发者请先使用 template 模式解决,我们后续会提供新的自定义隐私提示框样式解决方案。

注意: 请使用 HBuilderX3.2.15+ 版本打包,并使用 template 配置隐私弹窗否则无法正常上架应用市场 uni 小程序 SDK 暂时不支持 uniapp 自己配置隐私弹窗,需要宿主自行实现隐私弹窗。

2.1 编写隐私协议内容

首先,你需要编写一份详细的隐私协议。隐私协议通常包括以下内容:

  • 信息收集:说明应用会收集哪些用户信息(如设备信息、位置信息、用户行为数据等)。

  • 信息使用:解释收集的信息将如何被使用(如改善应用体验、个性化推荐等)。

  • 信息存储:说明用户信息的存储方式和地点。

  • 信息保护:描述如何保护用户信息,防止数据泄露。

  • 用户权利:告知用户他们有哪些权利(如访问、修改、删除个人信息等)。

  • 第三方服务:如果应用集成了第三方服务(如广告 SDK、支付 SDK 等),需说明这些服务如何收集和使用用户信息。

你可以参考一些知名应用的隐私协议,或者请法律专业人士协助编写。

2.2 在 Uniapp 中集成隐私协议

为了兼顾隐私政策提示框的易用性和灵活性,解决弹出隐私政策提示框之前可能弹出系统授权框的问题。Android 平台提供了以下隐私政策提示配置策略:

  • template 使用原生提供的隐私政策模板提示框,应用启动时在splash界面弹出。
    • 优点:在系统授权提示框之前显示,用户点击确认后才会进入应用
    • 缺点:只能配置提示文本及链接地址,无法自定义提示框样式
  • none 不处理隐私政策 不提交到应用市场时使用

2.3 DCloud数据采集说明

为了持续优化应用及提供统计报表功能,在运行过程中会采集应用启动时间、异常错误日志等数据,其中包含设备唯一识别码。

DCloud通过了国家信息安全等级保护三级,证书编号:11010813802-20001,保障相关数据的安全性 DCloud并非大数据公司,采集的数据是为开发者提供统计服务和产品持续优化,不包含个人隐私信息

请在《隐私政策》中必告知用户您的应用基于DCloud uni-app(5+ App/Wap2App)开发,增加如下参考条款

我们的产品基于DCloud uni-app(5+ App/Wap2App)开发,应用运行期间需要收集您的设备唯一识别码(IMEI/android ID/DEVICE_ID/IDFA、SIM 卡 IMSI 信息、OAID)以提供统计分析服务,并通过应用启动数据及异常错误日志分析改进性能和用户体验,为用户提供更好的服务。详情内容请访问《DCloud用户服务条款》。(DCloud用户服务条款超链至:https://ask.dcloud.net.cn/protocol.html)

2.4 配置方式

HBuilderX3.2.1及以上版本配置方式
HBuilderX3.2.1+ 版本开始新增 androidPrivacy.json 文件配置隐私政策提示框,支持真机运行查看效果,在 androidPrivacy.json 中也支持配置部分样式(如背景颜色、标题颜色、按钮颜色等)。 打开项目的 manifest.json 文件,切换到 “App启动界面配置” ,在 “Android启动界面样式” 中勾选 “使用原生隐私政策提示框”

在这里插入图片描述

注意: androidPrivacy.json 不要添加注释,会影响隐私政策提示框的显示!!!

勾选后会在项目中自动添加 androidPrivacy.json 文件,可以双击打开自定义配置以下内容:

{"version": "1","prompt": "template","title": "服务协议和隐私政策","message": "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"\">《服务协议》</a>和<a href=\"\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。","buttonAccept": "同意并接受","buttonRefuse": "暂不同意","hrefLoader": "system","backToExit":"false","second": {"title": "确认提示","message": "  进入应用前,你需先同意<a href=\"\">《服务协议》</a>和<a href=\"\">《隐私政策》</a>,否则将退出应用。","buttonAccept": "同意并继续","buttonRefuse": "退出应用"},"disagreeMode":{"support": false,"loadNativePlugins": false,"visitorEntry": false,"showAlways": false},"styles": {"backgroundColor": "#00FF00","borderRadius":"5px","title": {"color": "#ff00ff"},"buttonAccept": {"color": "#ffff00"},"buttonRefuse": {"color": "#00ffff"},"buttonVisitor": {"color": "#00ffff"}}
}

version 隐私政策版本号,如果应用升级后希望重新弹出隐私政策提示框,则需要设置新版本
prompt 是否使用原生隐私政策提示框,值为“template”表示使用,“none”表示不使用
title 隐私政策提示框标题文本内容
message 隐私政策提示框正文内容,支持富文本richtext类型字符串,支持a/font/br等节点,点击a链接会调用内置页面打开其href属性中链接地址。 注意:务必配置此提示内容,参考上面示例内容并修改《服务协议》和《隐私政策》链接地址
buttonAccept 模板提示框上接受按钮的文本,默认值为“同意”
buttonRefuse 模板提示框上拒绝按钮的文本,默认不显示此按钮
hrefLoader HX 3.4.13之后版本新增,system 使用系统webview 打开隐私协议链接,默认使用uni-app内置web组件 隐私政策提示框中的链接地址加载方式,可取值:system-表示使用系统浏览器打开(注意此模式下不支持项目内路径);default-表示使用应用内置webview页面打开。默认值为default。 注意:可能有些检测机构认为webview会读取隐私信息,这时可以配置为system来解决此问题
backToExit HX 3.6.20之后版本新增。用来设置弹出隐私弹窗时,用户点击系统回退按钮 是否能退出应用。默认为false 不退出。部分应用市场不接受此行为,则开发者可以设置为true,允许用户点击回退按钮时,退出应用。
disagreeMode 用户不同意隐私协议的响应配置 具体配置及说明查看https://uniapp.dcloud.io/app-disagreemode
support 用户拒绝隐私协议后,是否直接进入游客模式,默认false关闭
loadNativePlugins 表示在disagreeMode模式是否加载uni原生插件,true表示加载;false表示不加载(此时调用uni.requireNativePlugin加载插件扩展Module返回undefined,扩展组件Component也无法使用)。默认值为true。
visitorEntry HBuilderX 3.6.7 版本后支持,默认false,当设置为true,隐私协议弹窗 会出现 游客模式 按钮
showAlways HBuilderX 3.6.10 版本后支持,默认false 标记用户拒绝协议后,下次启动是否继续弹出,默认false,拒绝后不弹出
second 配置二次确认提示框显示内容,message属性值不为空时弹出二次确认提示框
title 二次确认提示框上的标题
message 二次确认提示框上的内容,支持富文本richtext类型字符串
buttonAccept 二次确认提示框上接受按钮的文本
buttonRefuse 二次确认提示框上拒绝按钮的文本
styles 配置隐私政策提示框样式
backgroundColor 提示框背景颜色,#RRGGBB格式字符串
borderRadius 提示框背景圆角半径,单位为px(逻辑像素)
title 提示框标题样式,其下仅支持color属性配置文本颜色,值为#RRGGBB格式字符串
buttonAccept 接受按钮样式,其下仅支持color属性配置文本颜色,值为#RRGGBB格式字符串
buttonRefuse 拒绝按钮样式,其下仅支持color属性配置文本颜色,值为#RRGGBB格式字符串
buttonVisitor HX 3.6.7 版本后支持,游客模式按钮样式,其下仅支持color属性配置文本颜色,值为#RRGGBB格式字符串

uni-app 项目可以使用 uni 原生插件能支持更多自定义隐私政策提示框样式,可参考:https://ext.dcloud.net.cn/plugin?id=5581

3.1 Apple App Store

在上架 Apple App Store 时,你需要在 App Store Connect 中提供隐私协议的链接。Apple 要求隐私协议必须清晰、易懂,并且涵盖所有信息收集和使用的情况。

3.2 Google Play Store

Google Play Store 也要求开发者提供隐私协议链接。Google 特别强调隐私协议中需要说明应用是否收集用户的敏感信息(如位置、联系人等),并且需要遵守 GDPR 等隐私保护法规。

四、常见问题与解决方案

4.1 隐私协议内容不完整

问题:隐私协议内容不完整,导致应用被应用商店拒绝。

解决方案:确保隐私协议涵盖所有信息收集和使用的情况,特别是涉及第三方 SDK 时,需详细说明其隐私政策。

4.2 用户不同意隐私协议

问题:用户不同意隐私协议,导致无法使用应用。

解决方案:在用户不同意隐私协议时,可以提示用户必须同意才能继续使用应用,或者提供退出应用的选项。

4.3 隐私协议更新

问题:隐私协议更新后,如何通知用户并重新获取同意。

解决方案:在隐私协议更新时,可以通过弹窗或通知的方式告知用户,并要求用户重新同意。

五、总结

Uniapp 开发 App 端时,实现用户隐私协议是上架应用商店的必要步骤。通过合理设计隐私协议的展示方式和内容,不仅可以满足应用商店的要求,还能增强用户对应用的信任感。希望本文能帮助你在 Uniapp 开发中顺利实现用户隐私协议,并成功上架应用商店。

相关文章:

Uniapp 开发 App 端上架用户隐私协议实现指南

文章目录 引言一、为什么需要用户隐私协议&#xff1f;二、Uniapp 中实现用户隐私协议的步骤2.1 编写隐私协议内容2.2 在 Uniapp 中集成隐私协议2.3 DCloud数据采集说明2.4 配置方式3.1 Apple App Store3.2 Google Play Store 四、常见问题与解决方案4.1 隐私协议内容不完整4.2…...

Gradio ,一个实用的大模型界面

Gradio是HuggingFace的开源项目&#xff0c;GitHub 28k star。能够方便地构建AI应用的网页界面。 最大的优点是简便。对于不熟悉前端的程序员&#xff0c;能够迅速地构建基于web的AI应用。 Hello World import gradio as gr ​ def print_text(text):return "Hello Wor…...

LeetCode 环形链表II:为什么双指针第二次会在环的入口相遇?

快慢指针 为什么相遇后让快指针回到起点&#xff0c;再让快指针和慢指针都一步一步地走&#xff0c;它们就会在环的入口相遇&#xff1f; 复杂度 时间复杂度: O(n) 空间复杂度: O(1) public ListNode detectCycle(ListNode head) {ListNode slow head, fast head;ListNode …...

如何处理PHP中的编码问题

如何处理PHP中的编码问题 在PHP开发过程中&#xff0c;编码问题是一个常见且棘手的问题。无论是处理用户输入、数据库交互&#xff0c;还是与外部API通信&#xff0c;编码问题都可能导致数据乱码、解析错误甚至安全漏洞。本文将深入探讨PHP中的编码问题&#xff0c;并提供一些…...

【动手学强化学习】part8-PPO(Proximal Policy Optimization)近端策略优化算法

阐述、总结【动手学强化学习】章节内容的学习情况&#xff0c;复现并理解代码。 文章目录 一、算法背景1.1 算法目标1.2 存在问题1.3 解决方法 二、PPO-截断算法2.1 必要说明2.2 伪代码算法流程简述 2.3 算法代码2.4 运行结果2.5 算法流程说明 三、疑问四、总结 一、算法背景 …...

游戏引擎学习第159天

回顾与今天的计划 我们在完成一款游戏的制作。这个游戏没有使用任何引擎或新库&#xff0c;而是从零开始编写的完整游戏代码库&#xff0c;您可以自行编译它&#xff0c;并且它是一个完整的游戏。更特别的是&#xff0c;这个游戏甚至没有使用显卡&#xff0c;所有的渲染工作都…...

前端主题切换架构设计方案

1. 架构概述 本文档从架构设计的角度阐述项目的主题切换方案,主要关注系统各层级间的关系、数据流转以及扩展性设计,而非具体实现细节。 架构图 +-------------------------------------------+ | 用户界面层 | | +--------------+ …...

request模块基本使用方法

文章目录 一、前言二、请求2.1 请求方式2.2 请求参数2.3 cookie 三、响应 一、前言 官方文档&#xff1a;https://requests.readthedocs.io/en/latest/ 模块安装&#xff1a;pip install request 二、请求 2.1 请求方式 常用请求方法&#xff1a;get、post 请求方法含义get向…...

内网攻防——红日靶场(一)

在学习内网的过程中有着诸多不了解的内容。希望能借下面的靶场来步入内网的大门。 一、准备阶段 首先准备好我们的虚拟机 之前有学过关于&#xff1a;工作组、域、DC的概念。 了解一下此时的网络拓扑图 1.设置网络VMnet1和Vmnet8 将VMnet1作为内网&#xff0c;VMnet8作为外…...

协议-LoRa-Lorawan

是什么? LoRa是低功耗广域网通信技术中的一种,是Semtech公司专有的一种基于扩频技术的超远距离无线传输技术。LoRaWAN是为LoRa远距离通信网络设计的一套通讯协议和系统架构。它是一种媒体访问控制(MAC)层协议。LoRa = PHY Layer LoRaWAN = MAC Layer功耗最低,传输最远 ![ …...

redis主从搭建

1. 哨兵 1.1 ⼈⼯恢复主节点故障 Redis 的主从复制模式下&#xff0c;⼀旦主节点由于故障不能提供服务&#xff0c;需要⼈⼯进⾏主从切换&#xff0c;同时⼤量 的客⼾端需要被通知切换到新的主节点上&#xff0c;对于上了⼀定规模的应⽤来说&#xff0c;这种⽅案是⽆法接受的&…...

std::inplace_merge解析

一 基本概念 std::inplace_merge 是 C++ 标准库<algorithm> 中的算法,用于将两个已排序的相邻范围 合并为一个有序范围,且原地操作(无需额外存储空间)。 二 函数原型 template< class BidirectionalIterator > void inplace_merge( Bidirection…...

【STM32】NVIC(嵌套向量中断控制器)

什么是 NVIC&#xff1f; NVIC&#xff08;Nested Vectored Interrupt Controller&#xff0c;嵌套向量中断控制器&#xff09; 适用于 Cortex-M0、M3、M4、M7 等 ARM 处理器&#xff0c;广泛用于 STM32、ESP32、GD32、NXP 等 MCU 中&#xff0c;它用于管理和控制中断&#xf…...

Linux中Gdb调试工具常用指令大全

1.gdb的安装 如果你是root用户直接用指令 &#xff1a;yum install gdb &#xff1b;如果你是普通用户用指令&#xff1a;sudo yum install gdb&#xff1b; 2.gdb调试前可以对你的makefile文件进行编写&#xff1a; 下面展示为11.c文件编写的makefile文件&#xff1a; code…...

操作系统-八股

进程基础&#xff1a; 进程定义&#xff1a;运行中的程序&#xff0c;有独立的内存空间和地址&#xff0c;是系统进行资源调度和分配的基本单位。 并发&#xff0c;并行 并发就是单核上面轮询&#xff0c;并行就是同时执行&#xff08;多核&#xff09;&#xff1b; 进程上下…...

ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值

note 问题背景&#xff1a;序列推荐&#xff08;SR&#xff09;任务旨在预测用户可能的下一个交互项目。近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在SR系统中表现出色&#xff0c;但它们巨大的规模使得在实际平台中应用变得低效和不切实际。 研究动机&…...

3.14-进程间通信

进程间通信 IPC 进程间通信的原理&#xff0c;借助进程之间使用同一个内核&#xff0c;借助内核&#xff0c;传递数据。 进程间通信的方法 管道&#xff1a;最简单。信号&#xff1a;开销小。mmap映射&#xff1a;速度最快&#xff0c;非血缘关系之间。socket&#xff08;本…...

71.HarmonyOS NEXT PicturePreviewImage组件深度剖析:从架构设计到核心代码实现

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT PicturePreviewImage组件深度剖析&#xff1a;从架构设计到核心代码实现 (一) 文章目录 HarmonyOS NEXT PicturePreviewImage组件深…...

简单实现京东登录页面

Entry Component struct Index {State message: string ;build() { Column(){//顶部区域Row(){Image($r(app.media.jd_cancel)).width(20).height(20)Text(帮助)}.width(100%).justifyContent(FlexAlign.SpaceBetween)//logo图标Image($r(app.media.jd_logo)).width(250).heig…...

非零初始条件系统的传递函数分析

非零初始条件系统的传递函数分析 在传递函数的定义中&#xff0c;通常假设系统满足零初始条件。然而在实际应用中&#xff0c;很多系统需要处理非零初始状态。为了探讨这一问题&#xff0c;我们以一个一阶微分方程为例进行分析。 一、一阶系统的分析 考虑以下一阶微分方程&a…...

9.贪心算法

简单贪心 1.P10452 货仓选址 - 洛谷 #include<iostream> #include<algorithm> using namespace std;typedef long long LL; const int N 1e510; LL a[N]; LL n;int main() {cin>>n;for(int i 1;i < n;i)cin>>a[i];sort(a1,a1n);//排序 LL sum 0…...

代码随想录算法训练营第31天 | 56. 合并区间 738.单调递增的数字 968.监控二叉树

56. 合并区间 代码随想录 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(a,b)->{if(a[0] b[0])return a[1] - b[1];return a[0] - b[0];});List<int[]> result new Arra…...

Bash语言的集合

Bash语言的集合&#xff1a;一个深入探讨 引言 Bash&#xff08;Bourne Again SHell&#xff09;是一种Unix Shell和命令语言&#xff0c;广泛应用于Linux及类Unix系统中。作为Linux 默认的命令行解释器&#xff0c;Bash 被数以万计的开发者和系统管理员使用&#xff0c;以其…...

大模型训练全流程深度解析

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 1. 大模型训练概览1.1 训练流程总览1.2 关键技术指标 2. 数据准备2.1 数据收集与清洗2.2 数据…...

Pytorch实现之最小二乘梯度归一化设计

简介 简介:LSGAN提出了一种利用最小二乘法来计算两个数据分布之间的距离,该论文在此基础上采用梯度归一化来进一步稳定训练。 论文题目:LSN-GAN: A Novel Least Square Gradient Normalization for Generative Adversarial Networks(LSN-GAN:一种新的生成对抗网络的最小…...

每日一题---单词搜索(深搜)

单词搜索 给出一个二维字符数组和一个单词&#xff0c;判断单词是否在数组中出现&#xff0c; 单词由相邻单元格的字母连接而成&#xff0c;相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。 数据范围&#xff1a; 0 < 行长度 < 100 0 < 列长度 <…...

插入排序c++

插入排序的时间复杂度为O&#xff08;N^2&#xff09;&#xff0c;和冒泡排序的时间复杂度相同&#xff0c;但是在某些情况下插入排序会更优。 插入排序的原理是&#xff1a;第1次在0~0范围内排序&#xff0c;第2次在0~1范围内排序&#xff0c;第3次在0~2范围内排序……相当于…...

Swagger 从 .NET 9 中删除:有哪些替代方案

微软已经放弃了对 .NET 9 中 Swagger UI 包 Swashbuckle 的支持。他们声称该项目“不再由社区所有者积极维护”并且“问题尚未得到解决”。 这意味着当您使用 .NET 9 模板创建 Web API 时&#xff0c;您将不再拥有 UI 来测试您的 API 端点。 我们将调查是否可以在 .NET 9 中使用…...

嵌入式八股ARM篇

前言 ARM篇主要介绍一下寄存器和中断机制,至于汇编这一块…还请大家感兴趣自行学习 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函数传参 R4 - R11用来保存程序运算的中间结果或函数的局部变量 在函数调用过程中 注意在发生异常的时候 cortex-M0架构会自动将R0-R3压入…...

MyBatis 如何解析 XML 配置文件和 SQL 映射文件

MyBatis 使用 SAX&#xff08;Simple API for XML&#xff09;解析器来解析 XML 文件&#xff0c;SAX 是一种基于事件驱动的 XML 解析方式&#xff0c;具有高效、低内存消耗的优点。 MyBatis 主要解析两种类型的 XML 文件&#xff1a; 核心配置文件 (mybatis-config.xml): 定…...