• 开发教程与代码示例
  • 入门
  • 小程序框架
  • 小程序运行时
  • 自定义组件
  • 基础教程
  • 能力教程
  • 性能优化
  • 安全
  • 安全开发指南
  • 小程序隐私协议开发指南
  • 小程序隐私协议开发指南

    收藏
    我的收藏

    一、功能介绍

    涉及处理用户个人信息的小程序开发者,需通过弹窗等明显方式提示用户阅读隐私政策等收集使用规则。
    为规范开发者的用户个人信息处理行为,保障用户合法权益,抖音要求开发者主动同步抖音当前用户已阅读并同意小程序的隐私政策等收集使用规则,方可调用抖音提供的隐私接口
    特别注意:
      基础库 3.19.0 或更高版本,抖音开发者工具 4.2.2 或更高版本,在 app.json 中配置 usePrivacyCheck: true 后,真机上会启用隐私相关功能,如果不配置或者配置为 false 则不会启用。
      2024 年 03 月 25 日后创建的小程序,会默认启用隐私相关功能,无法通过 app.json 中配置 usePrivacyCheck: false 进行关闭。
      小程序开发者工具 4.2.3 或更高版本支持自定义隐私组件调试,暂不支持官方隐私组件调试, 在小程序开发者工具调试时,可以通过工具中「清除缓存-清除数据」清空模拟器上的隐私授权状态。
      在配置启用隐私相关功能后,隐私相关接口调用会唤起官方隐私弹窗组件,开发者如果有自定义隐私组件需求,可以参考下方说明接入。

    二、接入流程

    1. 配置《小程序用户隐私保护协议》

    开发者需在「小程序管理后台」配置《小程序用户隐私保护协议》,详细指引可见:配置隐私协议

    2. 主动查询隐私授权同步状态以及展示隐私协议

    从基础库 3.19.0 开始支持,隐私同意按钮暂不支持耦合使用。
    开发者可通过 tt.getPrivacySetting 接口,查询抖音侧记录的用户是否有待同意的隐私政策信息。该信息可通过返回结果 res 中的 needAuthorization 字段获取。 同时,tt.getPrivacySetting 接口会返回开发者在小程序管理后台配置的 小程序隐私政策 名称信息,开发者可以调用 tt.openPrivacyContract 接口跳转至隐私协议页面。 如果存在有待用户同意的隐私政策信息,开发者需要主动提示用户阅读小程序的隐私政策,开发者可自行设计提示方式,同时需要在相关界面中使用<button open-type="agreePrivacyAuthorization">组件。用户点击该 <button> 组件,则视为用户已阅读并同意小程序的隐私政策,抖音侧会收到该同步信息,此时开发者可以在 <button> 组件的 onAgreePrivacyAuthorization 事件回调中调用隐私接口。

    代码示例

    <view tt:if="{{showPrivacy}}"> <view>隐私弹窗内容....</view> <button bindtap="handleOpenPrivacyContract">查看隐私协议</button> <button id="agree-btn" open-type="agreePrivacyAuthorization" bindagreeprivacyauthorization="handleAgreePrivacyAuthorization" > 同意 </button> </view>
    Page({ data: { showPrivacy: false, }, onLoad() { tt.getPrivacySetting({ success: (res) => { console.log(res); // 返回结果为: res = { needAuthorization: true/false, privacyContractName: '《xxx隐私保护协议》' } if (res.needAuthorization) { // 需要弹出隐私协议 this.setData({ showPrivacy: true, }); } else { // 用户已经同意过隐私协议,所以不需要再弹出隐私协议,也能调用已声明过的隐私接口 // tt.getUserProfile() // tt.getClipboardData() } }, fail: () => {}, complete: () => {}, }); }, handleAgreePrivacyAuthorization() { // 用户同意隐私协议事件回调 // 用户点击了同意,之后所有已声明过的隐私接口和组件都可以调用了 // tt.getUserProfile() // tt.getLocation() }, handleOpenPrivacyContract() { // 打开隐私协议页面 tt.openPrivacyContract({ success: () => {}, // 打开成功 fail: () => {}, // 打开失败 complete: () => {}, }); }, });

    3. 被动监听隐私接口需要用户授权事件

    开发者除了可以自行判断时机,提示用户阅读小程序的隐私政策外,也可以通过 tt.onNeedPrivacyAuthorization 接口来监听何时需要提示用户阅读隐私政策。当用户触发了一个抖音侧未记录过同意的隐私接口调用,则会触发该事件。开发者可在该事件触发时提示用户阅读隐私政策。 此外,抖音还提供了 tt.requirePrivacyAuthorize 接口,可用于模拟隐私接口调用。 代码示例
    <view tt:if="{{showPrivacy}}"> <view>隐私弹窗内容....</view> <button bindtap="handleOpenPrivacyContract">查看隐私协议</button> <button id="agree-btn" open-type="agreePrivacyAuthorization" bindagreeprivacyauthorization="handleAgreePrivacyAuthorization" > 同意 </button> </view>
    Page({ data: { showPrivacy: false, }, onLoad() { tt.onNeedPrivacyAuthorization((resolve, eventInfo) => { console.log('触发本次事件的接口是:' + eventInfo.referrer); // 需要用户同意隐私授权时 // 弹出开发者自定义的隐私授权弹窗 this.setData({ showPrivacy: true, }); this.resolvePrivacyAuthorization = resolve; }); tt.getLocation({ type: 1, success: (res) => { console.log(res); }, fail: (res) => { tt.showModal({ title: '定位失败', content: JSON.stringify(res) }); }, }); }, handleAgreePrivacyAuthorization() { // 用户点击同意按钮后 this.resolvePrivacyAuthorization({ buttonId: 'agree-btn', event: 'agree' }); // 用户点击同意后,开发者调用 resolve({ buttonId: 'agree-btn', event: 'agree' }) 告知平台用户已经同意,参数传同意按钮的id。为确保用户有同意的操作,基础库在 resolve 被调用后,会去检查对应的同意按钮有没有被点击过。检查通过后,相关隐私接口会继续调用 // 用户点击拒绝后,开发者调用 resolve({ event:'disagree' }) 告知平台用户已经拒绝 }, });

    三、其他说明

    低于 3.19.0 版本的基础库未集成隐私相关功能,也不会拦截隐私接口调用。

    四、常见错误说明

      { "errMsg": "API:fail api scope is not declared in the privacy agreement", "errNo": 10202 } 使用到了 A 隐私接口,但是开发者未在[小程序后台-基础设置-类目与配置-用户隐私保护指引]中声明收集 A 接口对应的隐私类型。补充的隐私类型声明, 将会立即生效。
      { "errMsg": "API:privacy permission is not authorized", "errNo": 10201 } 用户拒绝隐私协议授权。

    五、官方隐私弹窗功能说明

    为了让开发者能更便利地完成小程序隐私合规要求,除了通过以上指引进行隐私协议开发外,抖音还提供了官方隐私授权弹窗。此弹窗在隐私相关功能启用后(app.json 中配置 usePrivacyCheck: true),无需开发者适配开发,自动向用户展示。具体逻辑为: 当开发者调用隐私相关接口时,抖音侧会判断用户是否发起过 tt.onNeedPrivacyAuthorization 接口调用,若开发者未调用过该接口,抖音将主动弹出官方弹窗。若用户同意,该接口将正常执行后续调用逻辑;若用户拒绝,返回报错。
    官方隐私弹窗将有两种样式:
      1.与授权弹窗耦合样式:用户在此弹窗下需要勾选隐私协议才可以进行允许操作,若用户在弹窗中拒绝,报错信息为用户拒绝(错误码为 10201)
      2.直接弹窗样式:用户侧直接针对隐私协议的授权,若用户在弹窗中拒绝,报错信息为用户未同意隐私协议(错误码为 10201)