小游戏隐私合规开发指南
一、 功能介绍 为规范开发者的用户个人信息处理行为,保障用户合法权益,小游戏平台提供了标准化用户隐私保护指引与标准的隐私授权上报接口。开发者可通过以下指引完善隐私保护指引的配置及曝光、用户授权结果的上报。 二、 流程指引 步骤一 自查:是否有处理用户个人信息 用户个人信息是指:以电子或者其他方式记录的与已识别或者可识别的自然人有关的各种信息,不包括匿名化处理后的信息,例如用户昵称、头像、手机号、微信朋友关系等。涉及小游戏平台为小游戏开发者提供的涉个人信息标准API范围详情可见2.1。处理行为:包括但不限于个人信息的收集、存储、使用、加工、传输、提供、公开、删除等。步骤二 配置隐私政策:隐私政策应完整披露用户个人信息的处理目的和方式 如果自查没有处理任何用户个人信息,只需前往「MP设置-服务内容声明-用户隐私保护指引-确认承诺未处理用户任何信息」,无需关注后续流程。如果有处理用户个人信息,则需前往「MP设置-服务内容声明-用户隐私保护指引-更新」配置隐私政策,并按流程完成步骤三和步骤四。步骤三 C端隐私授权交互:该交互主要用于向用户曝光展示隐私政策,以获取用户同意 自定义设置:开发者可以自定义设计更符合游戏风格的弹窗样式,包括但不限于点击按钮同意授权式、勾选同意授权式。示例如下图1,具体实现可见2.2.1。[图片] 图1 隐私弹窗组件:一种开发者可以自行选择适配的功能组件,该组件可在「MP后台-基本设置-隐私授权弹窗-设置」开启,无需其他操作。示例如下图2,具体介绍可见2.2.2。[图片] 图2 步骤四 上报用户授权信息 自定义设置的曝光、用户同意隐私政策与否都需要上报小游戏平台,以正常调用用户数据接口。具体上报实现可见2.2.1。 2.1 用户隐私保护指引设置 2.1.1 标准API处理用户个人信息 请检查小游戏开发配置时是否使用以下接口或组件(标准API),接口及代码对应查询见下表。 表1 用户信息类型 [图片] 注意:若使用到上述接口,建议兼容用户拒绝授权信息的情况,避免影响用户线上体验。 2.1.2 非标准API处理用户个人信息 泛指游戏内所有通过非wx API的方式处理用户个人信息的行为。如游戏内通过自定义表单处理用户个人信息,需要开发者自行适配,并在处理用户信息之前的任意时机通过调用请求用户同意隐私政策。 2.1.3 用户隐私保护声明 以上两类方式处理的用户个人信息均需要在《用户隐私保护指引》中进行合规披露。即使用对应的小游戏账号登录mp.weixin.qq.com(后文简称mp后台),在“设置-基本设置-用户隐私保护指引”中完成用户隐私保护指引填写。更多详情可见小游戏《用户隐私保护指引》合规披露指南 | 微信开放社区 [图片] 注意: 1. 通过非标准API的方式处理用户个人信息的行为也需要进行声明,即通过“增加其他自定义信息类型”进行披露。 2. 指引最终审核通过后,小游戏平台会形成一份《小程序隐私保护指引》的文档,在小游戏的介绍页等处提供入口供用户查阅,以及在游戏内开放了wx.openPrivacyContract的能力,开发者可以在合适的时机通过该API展示指引内容给用户,见2.2的进一步说明。 2.2 隐私政策规范设置 在游戏内的恰当时机(此时机须在处理用户个人信息之前)展示隐私政策,询问用户意见的过程,本文档称之为“隐私政策规范设置”。 隐私政策规范设置实现形式 2.2.1 自定义设置 开发者可以自定义实现隐私政策规范设置,只需要与小游戏平台进行一定的信息同步即可。参考样式和具体步骤如下: (1)注册实现自定义隐私弹窗的回调函数 即通过 wx.onNeedPrivacyAuthorization传入回调函数的方式来实现自定义模式。 wx.onNeedPrivacyAuthorization(resolve => {
// ------ 自定义设置逻辑 ------
// TODO:开发者弹出自定义的隐私弹窗(如果是勾选样式,开发者应在此实现自动唤出隐私勾选页面)
// 页面展示给用户时,开发者调用 resolve({ event: 'exposureAuthorization' }) 告知平台隐私弹窗页面已曝光
// 用户表示同意后,开发者调用 resolve({ event: 'agree' }) 告知平台用户已经同意,resolve要求用户有过点击行为。
// 用户表示拒绝后,开发者调用 resolve({ event: 'disagree' }) 告知平台用户已经拒绝,resolve要求用户有过点击行为。
// 是否需要控制间隔以及间隔时间,开发者可以自行实现
// 勾选样式应以用户确认按钮的点击为准,无需每次勾选都上报
// 如果需要主动弹窗见wx.requirePrivacyAuthorize
})
// 弹窗界面需带上《隐私保护指引》的链接,点击后调用wx.openPrivacyContract打开指引详情
wx.openPrivacyContract({
success: () => {}, // 打开成功
fail: () => {}, // 打开失败
complete() => {}
})
注意: 1. 隐私弹窗页面曝光、用户同意、用户拒绝需上报小游戏平台,具体上报时机见示例图3 2. 隐私政策链接必须使用wx.openPrivacyContract接口打开,具体展示见示例图3 [图片] 图3 (2)主动展示弹窗请求用户同意 弹窗时机 在调用相关接口之前如果没有获得用户同意,基础库会主动弹出曝光自定义弹窗以获取用户的同意授权(“非标准API”需要开发者自行适配)。开发者可以自行在处理用户个人信息之前选择任意合适时机拉起隐私弹窗以获取用户的同意授权。 // 调用wx.requirePrivacyAuthorize拉起自定义隐私弹窗
// 若用户已同意且隐私政策无变更则直接跳过用户确认阶段进入success回调,否则需要拉起隐私弹窗,请求用户确认(通过调用wx.onNeedPrivacyAuthorization注册的回调函数来拉起自定义的隐私弹窗),用户同意后才进入success回调
wx.requirePrivacyAuthorize({
success: res => {
// 进入success回调说明用户已同意隐私政策
// TODO:非标准API的方式处理用户个人信息
},
fail: () => {
// 进入fail回调说明用户拒绝隐私政策
// 游戏需要放弃处理用户个人信息,同时不要阻断游戏主流程
},
complete()
})
注意:若用户拒绝隐私政策,建议做好用户兼容,避免阻断游戏进程。 2.2.2 隐私弹窗组件 (1) 隐私弹窗组件开启方式及样式 小游戏平台提供了一种小游戏开发者可以自行选择适配的功能组件,用于辅助实现隐私政策规范设置,开发者需要在 mp后台-基本设置-隐私授权弹窗 设置开启。该组件将在弹出后征求用户同意,并仅在用户同意后才会允许开发者调用相关API。 (2) 主动展示弹窗请求用户同意 弹窗时机 开发者可以自行选择弹窗组件的调用时机。如开发者未设置,则弹窗组件会在首次调用标准API时自行弹出,若新增声明某用户信息接口,会再次弹出(“非标准API”需要开发者自行适配)。开发者可以自行在处理用户个人信息之前选择任意合适时机拉起隐私弹窗以获取用户的同意授权。 // 调用wx.requirePrivacyAuthorize拉起弹窗组件
// 若用户已同意且隐私政策无变更则直接跳过用户确认阶段进入success回调,否则需要拉起隐私弹窗,请求用户确认,用户同意后才进入success回调
wx.requirePrivacyAuthorize({
success: res => {
// 非标准API的方式处理用户个人信息
},
fail: () => {},
complete() => {}
})
(3)配置弹窗间隔时间 对于弹窗组件,如果用户拒绝,则在拒绝之后的x秒内,都不会再唤起,此间隔时间可由开发者在 game.json 的 officialPrivacyAuthorizationShowingGap 字段配置,默认间隔时间为10秒,开发者配置小于10秒不生效。 当x秒后,再次调用隐私接口时,会重新弹窗询问用户是否同意。 // game.json
{
officialPrivacyAuthorizationShowingGap: 60 // 隐私弹窗组件最小间隔时间,单位s
}
特别注意:该组件一经启用无法关闭,如开发者通过2.2.1自定义弹窗完成了隐私政策规范设置并通过小游戏平台审核,则本功能将不再被调用。 2.3 报错提示信息 表2 报错提示信息 [图片] 相关阅读: 完整指引流程图 [图片] 小游戏用户隐私保护开发者指引 | 微信开放社区 小游戏《用户隐私保护指引》合规披露指南 | 微信开放社区 隐私合规Q&A Q1:自定义弹窗样式与隐私弹窗组件是否二选一? A:是的,若已在游戏内实现自己的隐私弹窗则不用启用隐私弹窗组件,同理启用隐私弹窗组件也可以不用再实现自己的隐私弹窗。除非已开启隐私弹窗组件但不想隐私弹窗组件,则需要实现自定义的隐私弹窗。 Q2:游戏已经有自己的隐私政策授权弹窗,是否需要注册 wx.onNeedPrivacyAuthorization?如果已经开启隐私弹窗组件还需要注册吗? A:游戏已经有自己的隐私弹窗,也需要注册 wx.onNeedPrivacyAuthorization,把用户行为上报给平台;如果已经开启隐私弹窗组件可以不需要调用,隐私弹窗组件已经有上报,隐私弹窗组件和自定义弹窗二选一即可。 Q3:开启隐私授权弹窗组件后如何关闭? A:隐私授权弹窗组件启用后无法直接关闭,可以通过注册 wx.onNeedPrivacyAuthorization实现自定义的弹窗,弹窗组件会自动关闭,自定义优先级高于弹窗组件。 注意:wx.onNeedPrivacyAuthorization的注册必须在调用上文表1中列举的接口或组件之前 Q4:隐私授权弹窗组件的调用时机如何设置? A:若用户从未同意授权过上文表1中列举的接口或组件,会默认在拉起接口前触发弹窗组件,如需要其他时机弹出,可以调用wx.requirePrivacyAuthorize主动触发弹窗组件。如有重复测试需求,可以通过从下拉入口移除小游戏清除授权记录。 Q5:游戏已有自己的隐私政策授权弹窗,是否也需要调用wx.openPrivacyContract? A:如果你的游戏有用到上文表1中列举的接口或组件,且在mp配置过《用户隐私保护指引》,需要调用wx.openPrivacyContract。