微信小程序隐私协议自定义页面(弹窗)开发流程以及低版本兼容

这里我选择的是全局监听,进入小程序就会监控用户有没有同意,没有则进行弹窗,不同意则关闭,这个逻辑可以根据自己需要随便修改。

小程序基础库是跟着用户手机微信版本走的,不是你的调试基础库!!!

小程序基础库是跟着用户手机微信版本走的,不是你的调试基础库!!!

小程序基础库是跟着用户手机微信版本走的,不是你的调试基础库!!!

发现有很多人根据自己调试基础库来排查自己涉不涉及,你的小程序是否涉及隐私协议整改,还是看有没有调用涉及隐私接口,如果有,那你最后还是要改。
开发者需在「小程序管理后台」配置《小程序用户隐私保护指引》,详细指引可见:https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/

需要注意的是,仅有在指引中声明所处理的用户信息,才可以调用平台提供的对应接口或组件。若未声明,对应接口或组件将直接禁用。隐私接口与对应的处理的信息关系可见: https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/miniprogram-intro.html

app.js

  这里setStorageSync保存的,是用户当前是否同意协议的状态
  我们在onShow进行一个判断,每次用户打开小程序先去判断是否进行隐私授权,否则跳转至授权页面(弹窗)
  getPrivacy(privacy) {
    wx.setStorageSync('privacyStatus', privacy);
  },

  onShow(object) {
    if (wx.getStorageSync('privacyStatus')) {
      // 用户协议已同意
      console.log('用户协议已同意');
    } else {
      // 未同意用户协议,则跳转至弹窗页面或弹出窗口
      console.log('用户协议未同意');
      const url = `/${object.path}`;
      if (url !== '/pages/guidePages/index') {
        wx.redirectTo({
          url: '/pages/guidePages/index',
        })
      }
    }
  },

guidePages.js (隐私协议页面,或在你的弹窗里写上事件)

因为2.32.3以下版本的基础库,wx.getPrivacySetting会直接报错,需要做低版本兼容处理
低版本不会拦截所以直接跳过就行了

wx.getAppBaseInfo().SDKVersion 获取当前基础库版本。

compareVersion 是一个比较数字的方法,可以用自己的或者第三方库,这个无所谓。

wx.getPrivacySetting 返回值:

needAuthorization: true/false,   //授权状态
privacyContractName: '《xxx隐私保护指引》'  //协议名称
<view class="btn disagree" bindtap="showPageContainer">不同意</view>
<view class="btn agree head_gradient" bindtap="agree" wx:if="{{ lowVersion }}">同意</view>
<button class="btn agree head_gradient" id="agree-btn" open-type="agreePrivacyAuthorization" bindagreeprivacyauthorization="handleAgreePrivacyAuthorization" wx:if="{{ !lowVersion }}">同意</button>

这里我直接给低版本显示不同的按钮了,
低版本是不支持bindagreeprivacyauthorization这些事件的,同意后直接关闭页面(弹窗)就可以了。
而且view标签也不支持bindagreeprivacyauthorization这些事件,我当时写的时候是不支持,改的button,不知道有没有再改。。。

 const app = getApp()
 
 onShow() {
    const _ = this
    if (wx.getPrivacySetting) >= 0) {
      wx.getPrivacySetting({
        success(res) {
          if (res.errMsg == "getPrivacySetting:ok") {
            _.setData({
              privacyContractName: res.privacyContractName,
              lowVersion: false
            })
            app.getPrivacy(!res.needAuthorization)
          }
        }
      })
    } else {
      console.log('低版本');
      app.getPrivacy(true)
      this.setData({
        lowVersion: true
      })
    }
  },
  
  // 同意隐私协议
  handleAgreePrivacyAuthorization() {
  	*更改全局状态*
    app.getPrivacy(true);
    *同意后的事件,自己根据需要写就可以*
    this.agree();
  },

  // 比较版本号
  compareVersion(v1, v2) {
    v1 = v1.split('.')
    v2 = v2.split('.')
    const len = Math.max(v1.length, v2.length)

    while (v1.length < len) {
      v1.push('0')
    }
    while (v2.length < len) {
      v2.push('0')
    }

    for (let i = 0; i < len; i++) {
      const num1 = parseInt(v1[i])
      const num2 = parseInt(v2[i])

      if (num1 > num2) {
        return 1
      } else if (num1 < num2) {
        return -1
      }
    }
    return 0
  },

隐私协议接口同意一次就不会再拦截,但是用户删除小程序后就需要再次同意。所以我就在app.js直接监听了。

还有一种方法是在调用隐私相关接口时去监听,这个按自己需求去改一下就行,其实大同小异,都是查一下用户需不需要同意协议,

需要的话就让用户去点一下同意触发handleAgreePrivacyAuthorization再去调用隐私接口,而且官方也提供了耦合写法。
在这里插入图片描述

低兼容测试可以在开发者工具切换基础库来测试。

调试前记得在app.json加上
usePrivacyCheck: true
在这里插入图片描述

官方现在有不需要开发的弹窗了,但是还是留了一个很恶心的问题。。。
一旦点击错误,用户将被沉默10s
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

01_Carrortwhisker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值