uni-app进行小程序隐私协议开发

简介: 为规范开发者的用户个人信息处理行为,保障用户合法权益,小程序、插件中涉及处理用户个人信息的开发者,均需补充相应用户隐私保护指引。

小程序隐私协议开发

开发说明

为规范开发者的用户个人信息处理行为,保障用户合法权益,微信要求开发者主动同步微信当前用户已阅读并同意小程序的隐私政策等收集使用规则,方可调用微信提供的隐私接口。

提供了4 个接口给开发者使用

wx.getPrivacySetting:查询微信侧记录的用户是否有待同意的隐私政策信息

wx.openPrivacyContract:打开跳转到隐私协议页面

wx.onNeedPrivacyAuthorization:监听隐私接口需要用户授权事件

wx.requirePrivacyAuthorize :模拟隐私接口调用,并触发隐私弹窗逻辑

注意:

隐私协议保护从基础库2.32.3开始支持,因此,微信开发者工具的调试基础库需>=2.32.3

开发参考:官方用户隐私保护文档

配置《小程序用户隐私保护指引》

开发者需在「小程序管理后台」配置《小程序用户隐私保护指引》,具体参考:填写说明

注意:

每个用到的隐私接口(同一类型)都需要在后台声明,仅有声明所处理的用户信息,才可以调用平台提供的对应接口或组件。若未声明,对应接口或组件将直接禁用

配置manifest.json

在manifest.json文件中添加"__usePrivacyCheck__": true配置项

    /* 微信小程序特有相关 */
    "mp-weixin": {
    
    
        "requiredPrivateInfos": [
            "getLocation"
        ],
        /*开启隐私保护*/
        "__usePrivacyCheck__": true
    },

查询隐私授权情况

创建privacyProtocol.js文件,封装查询用户隐私协议授权情况的函数

const privacyProtocol = {
   
   
    needAuthorization: false,
    privacyContractName: ''
}

/**
 * 检查用户隐私协议
 */
export function checkUserPrivacyProtocol() {
   
   
    wx.getPrivacySetting({
   
   
        success: (res) => {
   
   
            console.log(res)
            if (res.needAuthorization) {
   
   
                privacyProtocol.needAuthorization=res.needAuthorization
                privacyProtocol.privacyContractName=res.privacyContractName
            }else{
   
   
                privacyProtocol.needAuthorization=false
            }
            uni.setStorageSync("privacyProtocol", privacyProtocol);
        }
    })
}

APP.vue

在app.vue入口中调用隐私协议检查函数

<script>
    import {
   
   checkUserPrivacyProtocol} from "@/common/utils/privacyProtocol";

  export default {
   
   
        onLaunch: function() {
   
   
            console.log('App Launch')
      uni.getSystemInfo({
   
   
        success:(res)=>{
   
   
          this.$store.commit("initSystemInfo",res)
        }
      })

      const updateManager = uni.getUpdateManager();
      updateManager.onCheckForUpdate(function (res) {
   
   
        console.log("检查更新")
      });

      updateManager.onUpdateReady(function (res) {
   
   
        uni.showModal({
   
   
          title: '更新提示',
          content: '新版本已经准备好,是否重启应用?',
          success(res) {
   
   
            if (res.confirm) {
   
   
              updateManager.applyUpdate();
            }
          }
        });

      });

      updateManager.onUpdateFailed(function (res) {
   
   
        console.log("新版本下载失败")
        uni.showToast({
   
   title: "小程序更新失败", icon: 'none',duration: 5000});
      });

      /*隐私协议检查*/
      checkUserPrivacyProtocol()
        },
        onShow: function() {
   
   
            console.log('App Show')
        },
        onHide: function() {
   
   
            console.log('App Hide')
        }
    }
</script>

<style lang="scss">
      @import "uview-ui/index.scss";
      @import "@/plugin/colorui/main.css";
      @import "@/plugin/colorui/icon.css";
</style>

创建弹窗提示组件

如果存在有待用户同意的隐私政策信息,开发者需要主动提示用户阅读隐私政策等收集使用规则,也就是使用一个弹窗让用户查看隐私协议,并确认同意!

自己写的样式丑不拉几,参考开源项目:https://github.com/94xy/miniprogram-privacy,复制其弹窗组件样式

<template>
  <view>
    <view class="privacy" v-if="privacyProtocol.needAuthorization">
      <view class="content">
        <view class="title">隐私保护提示</view>
        <view class="des">
          在使用当前小程序服务之前,请仔细阅读<text class="link" @click="openPrivacyAgreement">{
  
  {privacyProtocol.privacyContractName}}</text>。如你同意{
  
  {privacyProtocol.privacyContractName}},请点击“同意”开始使用。
        </view>
        <view class="btns">
          <button class="item reject" @click="rejectAuthorization">拒绝</button>
          <button id="agree-btn" class="item agree" open-type="agreePrivacyAuthorization" @click="confirmAuthorization">同意</button>
        </view>
      </view>
    </view>
  </view>
</template>

<script>


export default {
    
    
  name: "PrivacyConfirm",
  data() {
    
    
    return {
    
    
      privacyProtocol: {
    
    }
    }
  },
  created() {
    
    
    setTimeout(() => {
    
    
      this.privacyProtocol = uni.getStorageSync("privacyProtocol");
    }, 500);
  },

  methods: {
    
    
    /**
     * 打开弹窗
     */
    open() {
    
    
      this.privacyProtocol.needAuthorization = true;
    },

    /**
     * 关闭弹窗
     */
    close() {
    
    
      this.privacyProtocol.needAuthorization = false;
    },
    /**
     * 用户点击同意
     */
    confirmAuthorization() {
    
    
      this.close();
    },
    /**
     * 用户点击拒绝
     */
    rejectAuthorization() {
    
    
      const that = this;
      uni.showModal({
    
    
        content: '如果拒绝,部分功能将异常,您确定要拒绝吗?',
        success: res => {
    
    
          if (res.confirm) {
    
    
            that.showPrivacy = false;
            // 直接退出小程序
            uni.exitMiniProgram();
          }
        }
      });
    },
    /**
     * 打开隐私协议
     */
    openPrivacyAgreement() {
    
    
      wx.openPrivacyContract({
    
    
        fail: () => {
    
    
          uni.showToast({
    
    
            title: '网络错误',
            icon: 'error'
          });
        }
      });
    },
  },
}
</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>

使用

在使用了隐私接口的页面都加上该组件,授权一次之后使用所有隐私接口就不再需要授权

<template>
  <view>
    <!--隐私协议保护确认-->
    <PrivacyConfirm></PrivacyConfirm>
  </view>
</template>

<script>
import PrivacyConfirm from './components/PrivacyConfirm'
    export default {
    
    
    name: "index",
    components:{
    
    
      PrivacyConfirm
    },
    data() {
    
    
        return {
    
    

        }
    }
  }
</script>

image.png

清空历史同步状态

从「微信下拉-最近-最近使用的小程序」中删除小程序,将清空历史同步状态。

在开发者工具中「清除模拟器缓存-清除授权数据」清空历史同步状态

官方隐私弹窗

在自行开发完隐私协议弹窗后,平台发布了官方隐私授权弹窗。

官方隐私授权弹窗在隐私相关功能启用后(2023-10-17日后或开发者在 app.json中配置 __usePrivacyCheck__: true后),无需开发者适配开发,自动向C端用户展示。

执行逻辑:

当开发者调用隐私相关接口时,微信会判断此次调用是否需要触发 wx.onNeedPrivacyAuthorization 事件,若触发后开发者未进行响应,微信将主动弹出官方弹窗。若用户同意,该接口将正常执行后续调用逻辑;若用户拒绝,将进行报错。

相关文章
|
3天前
|
Web App开发 Android开发
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
11 1
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
|
10天前
|
Web App开发 5G Linux
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
一年一度的毕业季来临,计算机专业的毕业设计尤为重要,不仅关乎学业评价还积累实战经验。选择紧跟5G技术趋势的音视频APP作为课题极具吸引力。这里推荐三类应用:一是融合WebRTC技术实现视频通话的即时通信APP;二是具备在线直播功能的短视频分享平台,涉及RTMP/SRT等直播技术;三是具有自定义动画特效及卡拉OK歌词字幕功能的视频剪辑工具。这些项目不仅技术含量高,也符合市场需求,是毕业设计的理想选择。
32 6
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
|
9天前
|
编解码 Java Android开发
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
​SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播。SRT Streamer支持的视频编码包括H264、H265等等,支持的音频编码包括AAC、OPUS等等,可谓功能强大的APP直播框架。另一款APP直播框架RTMP Streamer支持RTMP直播和RTSP直播,不支持SRT协议的直播。而本文讲述的SRT Streamer支持RTMP直播和SRT直播,不支持RTSP协议的直播。有关RTMP Streamer的说明参见之前的文章《使用RTMP Streamer开启APP直播推流》,下面介绍如何使用SRT Streamer开启手机直播。
30 4
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
|
21天前
|
存储 开发框架 安全
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段一
HarmonyOS NEXT星河版的应用开发标志着华为分布式操作系统的全新篇章,它聚焦于打造原生精致、易用、流畅、安全、智能和互联的极致体验。开发者可以利用其先进的API和工具集,如DevEco Studio,构建高性能、跨设备无缝协同的应用程序,从而充分利用HarmonyOS的分布式能力,为用户带来一致且丰富的多场景数字生活体验。随着“学习强国”、岚图汽车、中国电信等知名企业和应用的加入,鸿蒙生态正迅速扩展,引领着原生应用开发的新趋势。
39 3
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段一
|
2天前
|
小程序 前端开发 持续交付
小程序全栈开发中的CI/CD流程与自动化部署是一种高效的开发模式。
本文探讨小程序全栈开发中的CI/CD流程与自动化部署,介绍持续集成与部署的概念,包括自动化构建、测试、代码审查及部署实践。通过提高代码质量、迭代速度及团队协作效率,确保小程序稳定运行与良好用户体验。
11 2
|
2天前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录是一个重要而复杂的问题。
微信小程序作为业务拓展的新渠道,其全栈开发涉及前端与后端的紧密配合。本文聚焦小程序开发中的异常处理与日志记录,从前端的网络、页面跳转等异常,到后端的数据库、API调用等问题,详述了如何利用try-catch及日志框架进行有效管理。同时强调了集中式日志管理的重要性,并提醒开发者注意安全性、性能及团队协作等方面,以构建稳定可靠的小程序应用。
9 1
|
2天前
|
小程序 前端开发 API
微信小程序全栈开发中的多端适配与响应式布局是一种高效的开发模式。
探讨小程序全栈开发中的多端适配与响应式布局,旨在实现统一的用户体验。多端适配包括平台和设备适配,确保小程序能在不同环境稳定运行。响应式布局利用媒体查询和弹性布局技术,使界面适应各种屏幕尺寸。实践中需考虑兼容性、性能优化及用户体验,借助跨平台框架如Taro或uni-app可简化开发流程,提升效率。
8 1
|
2天前
|
监控 小程序 安全
小程序全栈开发中的WebSocket实时通信实践是一种高效的开发模式。
随着移动互联网的发展,小程序成为企业拓展业务的新渠道。WebSocket作为一种实时通信协议,可在小程序中实现如实时聊天、推送、游戏等功能。它支持客户端与服务器间的全双工长连接通信,优于传统HTTP。开发者需注意安全、性能及兼容性等问题,以优化体验并保障稳定运行。掌握WebSocket有助于提升小程序功能性与用户体验。
11 1
|
8天前
|
小程序 JavaScript 前端开发
微信小程序开发必备前置知识:基本代码构成与语法
【8月更文挑战第8天】微信小程序的基本代码构成与语法
15 0
微信小程序开发必备前置知识:基本代码构成与语法
|
17天前
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
46 12

热门文章

最新文章