使用taro或react框架的,针对微信小程序隐私协议的组件封装,网上找了很久都没有相关模版,只有自己写了一个,现分享给有困难的同伴

这篇具有很好参考价值的文章主要介绍了使用taro或react框架的,针对微信小程序隐私协议的组件封装,网上找了很久都没有相关模版,只有自己写了一个,现分享给有困难的同伴。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注意:我是使用hooks的,其他可以参考封装思路大同小异的

首先写一个PrivacyAgreement.js文件

import { useState, useEffect } from "react";
// Taro 额外添加的 hooks 要从 '@tarojs/taro' 中引入
import { useDidShow, useDidHide,useReady } from '@tarojs/taro'
import { View, Text, Button } from "@tarojs/components";
import { AtFloatLayout, AtButton } from "taro-ui";
import "./index.scss";
let privacyHandler
let privacyResolves = new Set()
let closeOtherPagePopUpHooks = new Set()
if (wx.onNeedPrivacyAuthorization) {
  wx.onNeedPrivacyAuthorization(resolve => {
    console.log('触发 onNeedPrivacyAuthorization')
    if (typeof privacyHandler === 'function') {
      privacyHandler(resolve)
    }
  })
}
const closeOtherPagePopUp = (closePopUp) => {
  closeOtherPagePopUpHooks.forEach(hook => {
    if (closePopUp !== hook) {
      hook()
    }
  })
}
export default ({
  showPrivacyClk
}) => {
  // 显示和隐藏
  const [showPrivacy, setShowPrivacy] = useState(false)
  const [closePopUpCopy, setclosePopUpCopy] = useState(false)
  useEffect(() => {
    const closePopUp = () => {
      disPopUp()
    }
    console.log('closePopUp',closePopUp)
    privacyHandler = resolve => {
      console.log('3456')
      privacyResolves.add(resolve)
      popUp()
      // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
      closeOtherPagePopUp(closePopUp)
    }
    closeOtherPagePopUpHooks.add(closePopUp)
    setclosePopUpCopy(closePopUp)
  }, [])

  const disPopUp = () => {
    if (showPrivacy === true) {
      wx.showTabBar()
      setShowPrivacy(false)
    }
  }

  const popUp = () => {
    if (showPrivacy === false) {
      wx.hideTabBar()
      setShowPrivacy(true)
    }
  }
  // 打开隐私协议页面
  const openPrivacyContractClk = () => {
    wx.openPrivacyContract()
  }
  // 用户点击拒绝隐私协议
  const refundPrivacy = () => {
    wx.showTabBar()
    disPopUp()
    privacyResolves.forEach(resolve => {
      console.log('resolve111', resolve);
      resolve({
        event: 'disagree',
      })
    })

    privacyResolves.clear()
    closeOtherPagePopUpHooks.delete(closePopUpCopy)
  }
  // 用户点击同意隐私协议
  const handleAgreePrivacyAuthorization = e => {
    // // 显示tabbar
    wx.showTabBar()
    disPopUp()
    // 这里演示了同时调用多个wx隐私接口时要如何处理:让隐私弹窗保持单例,点击一次同意按钮即可让所有pending中的wx隐私接口继续执行 (看page/index/index中的 wx.getClipboardData 和 wx.startCompass)
    privacyResolves.forEach(resolve => {
      console.log('resolve2222', resolve);
      resolve({
        event: 'agree',
        buttonId: 'agree-btn'
      })
    })
    privacyResolves.clear()
  }
  return (
    <View>
      {
        showPrivacy ?
          (
            <View>
              <View className="privacyAgreementMask"></View>
              <View className="privacyAgreementIdx">
                在您使用小程序服务之前,请您仔细阅读<Text onClick={openPrivacyContractClk} className="privacyTitle">《小程序隐私保护协议》</Text>
                。如您同意该隐私保护指引,请点击“同意”开始使用小程序
                <View className="pivacyAgreementBtn">
                  <View className="btnLeftCon"><AtButton type='primary' full={false} onClick={refundPrivacy}>拒绝</AtButton></View>
                  <View className="btnLeftCon btnRightCon">
                    <Button id="agree-btn" class="agree" open-type="agreePrivacyAuthorization" onAgreeprivacyauthorization={handleAgreePrivacyAuthorization}>同意</Button>
                  </View>
                </View>
              </View>
            </View>
          ) : ''
      }
    </View>);
};

样式文件index.scss如下

.privacyAgreementMask {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0, 0, 0, .4);
  z-index: 998;
}

.privacyAgreementIdx {
  position: fixed;
  left: 0;
  bottom: 0;
  background-color: #fff;
  height: 400rpx;
  border-radius: 10rpx;
  box-sizing: border-box;
  padding: 50rpx 32rpx;
  box-shadow: 0px 2px 25px 0px rgba(189, 189, 189, 0.2);
  z-index: 999;

  .privacyTitle {
    color: skyblue;
  }

  .pivacyAgreementBtn {
    display: flex;
    justify-content: center;
    margin-top: 100rpx;

    .btnLeftCon {
      margin-right: 40rpx;

      &:last-child {
        margin-right: 0;
      }

      .at-button {
        width: 160rpx;
        height: 70rpx;
        line-height: 70rpx;
        font-size: 24rpx;
        color: #57bf6a;
        background-color: #f2f2f2;
      }

      button {
        width: 160rpx !important;
        height: 70rpx !important;
        line-height: 70rpx !important;
        font-size: 24rpx !important;
        color: #57bf6a !important;
        background-color: #f2f2f2 !important;
      }
    }

    .btnRightCon {
      .at-button {
        color: #fff;
        background-color: #57bf6a;
      }

      button {
        color: #fff !important;
        background-color: #57bf6a !important;
      }
    }
  }
}

在需要用到隐私协议的组件或者api的页面里面引用文章来源地址https://www.toymoban.com/news/detail-744950.html

import { useState, useEffect } from "react";
import Taro from "@tarojs/taro";
import {
  View
} from "@tarojs/components";
// 引入隐私协议组件
import PrivacyAgreement from "@/components/PrivacyAgreement.js";

export default () => {
  // 是否当前页面,用来解决引用隐私弹窗组件,切换我的页面问题
  const [isPageIndex, setIsPageIndex] = useState(true);
  
  // 监听当前路由变化
  useEffect(() => {
    // 获取定位
    gotLocation()
    // 用来解决多个页面引用隐私协议组件,来回拒绝切换导致隐私协议不显示问题(没有这个问题可以不用相关代码)
    const unlisten = Taro.onAppRoute(res => {
      if (res.path === 'pages/index/index') {
        setIsPageIndex(true);
      } else {
        setIsPageIndex(false);
      }
    });
    return () => {
      unlisten && unlisten();
    };
  }, []);
  // 获取到当前位置
  const gotLocation = () => {
    wx.getLocation({
      type: "wgs84",
      success(res) {
        
      },
      fail(rs) {
        // 拒绝隐私协议
        if(rs.errno === 104)return
      },
    });
  }

  return (
    <View>
      {/* 隐私协议 */}
      {isPageIndex && <PrivacyAgreement></PrivacyAgreement>}
    </View>
  );
};

到了这里,关于使用taro或react框架的,针对微信小程序隐私协议的组件封装,网上找了很久都没有相关模版,只有自己写了一个,现分享给有困难的同伴的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序--Taro框架实际开发中的问题汇总

    前言:微信小程序相信大家都不陌生,目前小程序开发主流的框架有微信 原生开发 , uni-app ,以及今天的重点 Taro 。编者自身小程序开发经验也不多,仅针对自身在小程序开发中的问题做一次汇总,望更多像我一样的小白少走 一点弯路。 注意:本篇博客中小程序开发基于

    2024年02月16日
    浏览(37)
  • 基于 Taro 框架的微信小程序 canvas 绘图海报组件

    项目需要保存收款码,效果如图: (此文仅代表个人日常工作记录,能力有限描述并不全面) 1.安装 npm i taro-plugin-canvas -S --production(taro-plugin-canvas 是基于 Taro 框架的微信小程序 canvas 绘图组件,封装了常用的操作,通过配置的方式生成分享图片)  2.引入:import { TaroCanvas

    2024年01月21日
    浏览(33)
  • 【taro react】---- 解决开发环境微信小程序由于主包体积过大不能预览问题

    1. 开发环境代码包大小 注意:可以看到此时主包加分包将近 5MB,上传预览将会超出限制!!! 2. 预览结果 报错:代码包大小超过限制,主包资源近3MB,限制最大2MB!!! 3. 解决办法 使用webpack的压缩插件,在开发环境编译的时候进行压缩; 进行分包处理,同时依赖也进行

    2024年02月10日
    浏览(34)
  • taro+vue3 搭建一套框架,适用于微信小程序和H5

    安装 Taro。可以在终端输入以下命令进行安装: 创建项目。使用以下命令创建 Taro+Vue3 项目: 其中,myApp 是项目名称。 进入项目并启动。使用以下命令进入项目并启动: 注意,需要先进入对应的目录再启动。 编写代码。在 src 目录下编写代码,可以像使用 Vue 开发 Web 应用程

    2024年02月10日
    浏览(43)
  • 【taro react】---- 解决 iOS 真机微信小程序 Input 密码框 type 切换会导致 Input 内容丢失问题

    1. 问题场景 在密码登陆时,有显示和隐藏密码的功能,实现方式很简单,直接对输入 input 的 type 进行 password 和 text 值进行切换,就可以实现密码的显示和隐藏。 2. 实现代码 通过修改 input 的 type 值实现密码的显示和隐藏。 密码的显示和隐藏控制图标也是通过 type 值进行判断

    2024年02月03日
    浏览(21)
  • 基于Taro + React 实现微信小程序半圆滑块组件、半圆进度条、弧形进度条、半圆滑行轨道(附源码)

    1、四个档位 2、可点击加减切换档位 3、可以点击区域切换档位 4、可以滑动切换档位 给大家提供一些实现思路,找了一圈,一些文章基本不能直接用,错漏百出,代码还藏着掖着,希望可以帮到大家 ts的写法风格 index.tsx      index.module.less 防抖的工具函数debounce 的详细代码

    2024年02月06日
    浏览(45)
  • 微信小程序+Taro 混编,Taro 使用微信原生 behaviors

    最近有一个小程序项目,因为一些原因项目架构选择了微信小程序原生+Taro 混编的方式进行开发,在开发的过程中发现 Taro 不支持使用原生的 behaviors 特性,因为混编的原因项目当中已有原生页面在使用 behaviors,所以需要一个方案在不影响其他页面的基础上使 Taro 也能使用这

    2024年02月11日
    浏览(31)
  • 使用taro+canvas实现微信小程序的图片分享功能

    二轮充电业务中,用户充电完成后在订单详情页展示订单相关信息,用户点击分享按钮唤起微信小程序分享菜单,将生成的图片海报分享给微信好友或者下载到本地,好友可通过扫描海报中的二维码加群领取优惠。 使用场景及功能:微信小程序 生成海报图片 分享好友 下载图

    2024年02月05日
    浏览(49)
  • uniapp--- 微信小程序 用户隐私新规相关代码调整【vue3+ts+uView框架】

    官方公告地址:https://developers.weixin.qq.com/community/develop/doc/00042e3ef54940ce8520e38db61801 用户隐私保护指引填写说明地址:https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/ 1) 需要在9月15前更新完毕,否则会无法使用获取手机号 手机相册等相关信息。 2) 微信小程序开发工具

    2024年02月09日
    浏览(40)
  • Taro + React + TS + Taro-UI + ECharts + Markdown 开发微信小程序

    1、安装 Taro 脚手架工具 npm install -g @tarojs/cli yarn global add @tarojs/cli 2、taro 初始化项目 taro init taro-app 安装 taro-ui cd taro-app yarn add taro-ui 全局引入taro-ui样式 3、项目路由路径 page 对应项目路径 lazyCodeLoading 组件按需注入 Taro.navigateTo({url: xxx}) 小程序内部跳转 4、全局添加分享功能

    2024年02月04日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包