不少公众号开发者在接入地理位置相关功能时,把主要精力放在了接口调用和地图展示上,隐私政策却随手从网上抄一份了事。实际上,微信平台对获取用户地理位置的公众号有明确的合规要求,必须在页面上提供清晰可访问的隐私政策,说明位置信息的收集和使用方式。这篇文章把法规要求拆开讲清楚,并给出一套可以直接修改使用的模板。

为什么地理位置信息需要单独说明
位置信息在法律层面被归为敏感个人信息。根据个人信息保护法的规定,处理敏感个人信息需要取得用户的单独同意,并且要有特定的目的和充分的必要性。这意味着你不能把位置授权混在一份大而全的用户协议里一笔带过,而是要让用户在授权前就能清楚地知道你要拿这个信息做什么。
微信官方对此也有对应的要求。公众号申请地理位置接口权限时,需要填写使用场景说明,同时在功能页面中向用户展示隐私政策。如果用户投诉或者平台巡查发现没有落实,轻则收回接口权限,重则影响公众号主体的信用记录。从实践角度看,一份写得清楚的政策文档,也是处理用户投诉时最有力的自证材料。
常见的不合规做法有三种:一是默认勾选同意,用户没有任何主动选择的机会;二是用途描述模糊,只写“用于提升服务体验”这类空话;三是没有提供撤回授权的途径。这三点在模板中都需要重点规避。
隐私政策必须包含的核心要素
一份合格的位置信息隐私政策,至少要覆盖以下六块内容。第一是信息收集范围,明确说明你获取的是经纬度坐标、粗略位置还是仅城市级别信息。第二是收集目的和使用方式,比如用于附近门店推荐、天气查询、配送范围判断等,必须具体到业务场景。
第三是存储和保护措施,说明数据存储在哪里、保留多长时间、采取了哪些加密手段。第四是共享与委托处理情况,如果你调用了第三方地图服务(如腾讯地图API),位置数据会传输给第三方,这一点必须如实披露,否则就构成超范围处理。第五是用户权利,包括查询、更正、删除个人信息以及撤回授权的具体操作路径。第六是政策更新机制和联系方式,让用户知道有问题找谁。
可直接套用的隐私政策模板
下面这份模板按照上述要素编写,你只需要把括号中的内容替换成自己的信息即可。建议将模板放置在用户首次触发位置授权前的页面中,并提供长期可访问的入口。
<div class="privacy-policy">
<h3>位置信息隐私政策</h3>
<p>【公众号名称】非常重视您的个人信息保护。在您使用本公众号的
以下功能时,我们会请求获取您的地理位置信息:</p>
<h4>一、我们收集的信息</h4>
<p>经您授权后,我们将收集您的经纬度坐标(精确度约为XX米),
该信息仅在您主动使用【功能名称,如:附近门店查询】时获取。</p>
<h4>二、收集目的与使用方式</h4>
<ul>
<li>用于【具体业务目的,如:计算您与门店的距离并展示最近的门店】;</li>
<li>我们不会将您的位置信息用于本政策未载明的其他目的;</li>
<li>未经您的同意,我们不会向任何第三方出售您的位置信息。</li>
</ul>
<h4>三、委托处理与共享</h4>
<p>为向您提供位置相关服务,我们会将您的位置信息传输至
【第三方名称,如:腾讯位置服务】,用于地图展示和坐标解析。
该第三方承诺按照约定处理上述信息且不用于其他用途。</p>
<h4>四、存储与保护</h4>
<p>您的位置信息存储期限为【XX天/次】,超出该期限后将自动删除或
匿名化处理。我们采用传输加密、访问控制等技术措施保护您的信息安全。</p>
<h4>五、您的权利</h4>
<p>您可以随时通过以下方式撤回授权:在微信公众号会话窗口发送
【指定指令】或联系客服【联系方式】。撤回授权后,我们将停止
处理您的位置信息并删除已存储的相关数据。</p>
<h4>六、政策更新</h4>
<p>本政策如有重大变更,我们将通过【弹窗/公告】方式通知您。
如您对本文 policy 有任何疑问,请联系:【邮箱或电话】。</p>
</div>落地时的几个关键细节
写好模板只是第一步,落地执行时还有几个容易踩坑的细节。首先是授权流程的设计,触发位置获取前应弹出独立的确认页面或弹窗,用户点击同意后再调用wx.getLocation等接口,而不是页面一加载就静默请求。示例代码如下:
// 先向用户展示授权说明,确认后再获取位置
function requestLocation() {
if (typeof window !== 'undefined' && window.confirm) {
// 在网页环境中使用确认弹窗说明用途
showPrivacyPopup().then(function(agreed) {
if (!agreed) {
console.log('用户未同意隐私政策,停止获取位置');
return;
}
wx.getLocation({
type: 'gcj02',
success: function(res) {
var latitude = res.latitude;
var longitude = res.longitude;
// 仅用于已声明的目的,不做超出范围的处理
queryNearbyStores(latitude, longitude);
},
fail: function(err) {
// 用户拒绝授权时不得反复弹窗骚扰
console.log('获取位置失败', err);
}
});
});
}
}其次要注意用户拒绝授权后的体验。按照规范,用户拒绝后你不应该反复弹出授权请求,而是提供手动输入地址等替代方案。这既是合规要求,也能显著降低用户投诉率。
最后是存储侧的配合。政策里写了保留多长时间,后端就要有对应的清理机制,比如定时任务将过期数据删除或脱敏。如果政策承诺与实际处理行为不一致,反而会在纠纷中成为不利的证据。建议每半年自查一次政策内容与业务实际的匹配度,接口用途有变化时及时更新政策文本并通知用户。