Files
soul/开发文档/小程序管理/references/隐私协议填写指南.md

6.6 KiB
Raw Blame History

小程序隐私协议填写指南

2024年起小程序需要配置隐私保护指引才能正常使用涉及用户隐私的接口


一、为什么需要配置?

从2024年开始微信要求所有小程序

  1. 在调用涉及用户隐私的接口前,需要让用户同意隐私协议
  2. 必须在小程序后台配置《用户隐私保护指引》
  3. 未配置的接口将无法正常调用

二、常用隐私字段说明

用户信息类

字段 涉及接口 填写示例
UserInfo wx.getUserProfile, wx.getUserInfo 用于展示您的头像和昵称
Nickname wx.chooseNickname 用于获取您设置的昵称

位置信息类

字段 涉及接口 填写示例
Location wx.getLocation, wx.chooseLocation 用于获取您的位置信息以推荐附近服务
ChooseLocation wx.chooseLocation 用于在地图上选择位置

通讯信息类

字段 涉及接口 填写示例
PhoneNumber button(open-type="getPhoneNumber") 用于登录验证和订单通知
Contact wx.chooseContact 用于获取通讯录联系人

媒体信息类

字段 涉及接口 填写示例
Album wx.chooseImage, wx.chooseMedia 用于上传图片或视频
Camera wx.openSetting, camera组件 用于拍摄照片或视频
Record wx.startRecord, RecorderManager 用于录制语音消息

其他信息类

字段 涉及接口 填写示例
Clipboard wx.setClipboardData, wx.getClipboardData 用于复制分享链接或优惠码
ChooseAddress wx.chooseAddress 用于获取收货地址以便配送
MessageFile wx.openDocument 用于打开微信消息中的文件
BluetoothInfo wx.openBluetoothAdapter 用于连接蓝牙设备

三、如何配置

方式一:微信后台手动配置

  1. 登录 小程序后台
  2. 设置 → 基本设置 → 用户隐私保护指引
  3. 选择需要使用的接口
  4. 填写使用说明
  5. 提交审核

方式二通过API配置

from mp_api import MiniProgramAPI

api = MiniProgramAPI(access_token="你的token")

# 配置隐私协议
api.set_privacy_setting(
    setting_list=[
        {"privacy_key": "UserInfo", "privacy_text": "用于展示您的头像和昵称"},
        {"privacy_key": "Location", "privacy_text": "用于获取您的位置信息以推荐附近服务"},
        {"privacy_key": "PhoneNumber", "privacy_text": "用于登录验证和订单通知"},
        {"privacy_key": "Album", "privacy_text": "用于上传图片"},
        {"privacy_key": "Clipboard", "privacy_text": "用于复制分享链接"},
    ],
    contact_email="zhiqun@qq.com",
    contact_phone="15880802661"
)

方式三使用CLI工具快速配置

cd /Users/karuo/Documents/个人/卡若AI/02_卡人/小程序管理/scripts
python mp_manager.py privacy --quick --email zhiqun@qq.com --phone 15880802661

四、小程序端代码实现

1. 在app.json中声明

{
  "usingComponents": {},
  "__usePrivacyCheck__": true
}

2. 隐私协议弹窗组件

// privacy-popup.js
Component({
  data: {
    showPrivacy: false
  },
  
  methods: {
    // 显示隐私弹窗
    showPrivacyPopup() {
      if (wx.getPrivacySetting) {
        wx.getPrivacySetting({
          success: (res) => {
            if (res.needAuthorization) {
              this.setData({ showPrivacy: true })
            }
          }
        })
      }
    },
    
    // 同意隐私协议
    handleAgree() {
      if (wx.agreePrivacyAuthorization) {
        wx.agreePrivacyAuthorization({
          success: () => {
            this.setData({ showPrivacy: false })
          }
        })
      }
    },
    
    // 查看隐私协议详情
    openPrivacyContract() {
      wx.openPrivacyContract()
    }
  }
})
<!-- privacy-popup.wxml -->
<view class="privacy-popup" wx:if="{{showPrivacy}}">
  <view class="popup-content">
    <view class="title">用户隐私保护提示</view>
    <view class="desc">
      在使用本小程序前,请仔细阅读
      <text class="link" bindtap="openPrivacyContract">《用户隐私保护指引》</text>
    </view>
    <view class="buttons">
      <button class="btn-disagree" bindtap="handleDisagree">不同意</button>
      <button class="btn-agree" id="agree-btn" open-type="agreePrivacyAuthorization" bindagreeprivacyauthorization="handleAgree">同意</button>
    </view>
  </view>
</view>

3. 在需要的页面调用

// pages/index/index.js
Page({
  onLoad() {
    // 检查是否需要授权
    this.checkPrivacy()
  },
  
  checkPrivacy() {
    if (wx.getPrivacySetting) {
      wx.getPrivacySetting({
        success: (res) => {
          if (res.needAuthorization) {
            // 需要授权,显示弹窗
            this.selectComponent('#privacy-popup').showPrivacyPopup()
          }
        }
      })
    }
  }
})

五、常见问题

Q1: 隐私协议需要审核吗?

配置后需要等待审核通常1-2小时审核通过后才会生效。

Q2: 用户拒绝后怎么办?

用户拒绝后,相关接口将无法使用。可以引导用户重新打开小程序,会再次弹出隐私协议。

Q3: 如何测试隐私协议?

在微信开发者工具中:

  1. 详情 → 本地设置
  2. 勾选"启用隐私相关接口"
  3. 清除授权记录后测试

Q4: 提交审核时提示隐私协议不完整?

检查以下几点:

  1. 是否填写了所有使用到的隐私接口
  2. 每个接口的说明是否清晰
  3. 是否填写了联系方式(邮箱或电话至少一个)

六、Soul派对小程序配置参考

# Soul派对小程序的隐私配置
setting_list = [
    {"privacy_key": "UserInfo", "privacy_text": "用于展示您在Soul派对中的头像和昵称"},
    {"privacy_key": "PhoneNumber", "privacy_text": "用于登录验证和购买通知"},
    {"privacy_key": "Clipboard", "privacy_text": "用于复制分享链接和邀请码"},
]

# 联系方式
contact_email = "zhiqun@qq.com"
contact_phone = "15880802661"

七、参考文档