官方公告地址:
https://developers.weixin.qq.com/community/develop/doc/00042e3ef54940ce8520e38db61801
目前,开发工具或者体验版的小程序,调试基础库改成3.0.0可以适配测试,线上版本9月15日之后生效,所以这之前需要尽快改完,发布一版,否则到了9月15号之后 线上就会生效报错了。
这是官方的Demo地址,也是每个页引用一个全局的组件,个人感觉太过于繁琐了,可以参考以下我整理的代码。
https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html
其实改起来也很简单,以下是实现步骤和代码:
1、首先看一下这个网址,里边包含涉及到的隐私的接口,这些接口都要适配一下
https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/miniprogram-intro.html
在以上接口用到的页面,需要画一下类似上边的弹窗(这个弹窗可以全局定义个组件,方便多个页面共用),然后里边蓝字可以点击后调用wx.openPrivacyContract(Object object)接口即可,会自动跳转打开隐私协议页面。
拒绝按钮可以加一个点击事件,然后在事件里这样写,官方demo里也没有加id。
<button class="btn-refuse" catch:tap="clickRefuse">拒绝</button>
refuse() {
this.resolvePrivacyAuthorization({
event: 'disagree'
})
},
同意按钮比较特殊,布局需要用button这样写,记得给button加一个Id
<button id="agree-btn" class="btn-agree" open-type="agreePrivacyAuthorization"
bindagreeprivacyauthorization="handleAgreePrivacyAuthorization">同意</button>
然后在handleAgreePrivacyAuthorization里就可以获取到点击事件,这样写
handleAgreePrivacyAuthorization() {
this.resolvePrivacyAuthorization({
buttonId: 'agree-btn',
event: 'agree'
})
},
2、然后每个有隐私接口的页面引用自己的组件,代码如下
{
"usingComponents": {
"agreement": "/components/agreement/agreement"
}
}
布局引用
<!-- 隐私授权弹窗 -->
<agreement id="agreement" frameTitle="温馨提示" bind:refuse="refuse" bind:agree="agree"></agreement>
让组件弹窗显示,这样写: this.selectComponent('#agreement').show();
3、最后需要在用到隐私接口的页面的onShow里加上以下监听代码,在这里边让自定义的隐私弹窗显示出来即可。
onShow: function () {
let that = this;
if (wx.onNeedPrivacyAuthorization) {
wx.onNeedPrivacyAuthorization(resolve => {
this.selectComponent('#agreement').show();//这里是让组件弹窗显示
this.resolvePrivacyAuthorization = resolve
})
}
}
以上代码加上就可以了,如果业务逻辑用到了需要判断是否授权过,可以加上 wx.getPrivacySetting(Object object)去获取是否授权过,用不到可以不加这个判断。
//=======================以下是针对昵称输入框input的type="nickname"的代码===========================
注意:以下代码只是针对input另外加的,上边提到的代码也都要加上才能正常弹出弹窗
布局,在input的外层View加touch事件,然后加一个focus动态控制焦点。
<view catch:touchstart="handleTouchInput">
<input type="nickname" class="text" bindinput="listenerContent" placeholder="输入名称" maxlength="10"
value='{{name}}' focus="{{focus}}" />
</view>
然后,touch事件:
handleTouchInput() {
let that = this
if (wx.getPrivacySetting) {
wx.getPrivacySetting({//获取是否需要弹出
success: res => {
if (res.needAuthorization) {
wx.requirePrivacyAuthorize({//该接口请求隐私协议,会自动触发上边的wx.onNeedPrivacyAuthorization
success: () => {
that.setData({
focus: true,
})
},
fail: () => {},
complete: () => {}
})
} else {
that.setData({
focus: true,
})
}
},
fail: () => {},
complete: () => {}
})
} else {
this.setData({
focus: true
})
}
},
这样就可以了,记得把上边提到的监听代码都加上。
记得在 app.json 中配置 __usePrivacyCheck__: true ,才能启用隐私协议接口的验证。
if (wx.onNeedPrivacyAuthorization) {
wx.onNeedPrivacyAuthorization(resolve => {
this.selectComponent('#agreement').show();
this.resolvePrivacyAuthorization = resolve
})
wx.requirePrivacyAuthorize({
success: res => {},
fail: () => {},
complete: () => {}
})
}
有碰到调用getPhoneNumber弹隐私,同意后还是下面错误的吗?
getPhoneNumber:fail privacy permission is not authorized,errno:104
再点一次才弹申请获取并验证手机号页面
反馈一个bug:
开发工具调试基础库改成3.0.1 ,bindagreeprivacyauthorization 就无法调用了,切换回 3.0.0 正常
官方出弹筐了,我要怎么在首页页面加载完成的第一时间就让隐私协议的弹框弹出呀?
官方隐私协议弹框支持进站就弹不 ?如果可以实现的话,提审官方能通过不?
官方提供的开发者自主获取用户《隐私指引》授权的能力有问题,在通过自定义弹窗获取用户《隐私指引》授权后,当发起用户隐私信息调用时,依然弹出了微信官方的隐私指引授权弹窗,又弹一次,有人遇到一样的问题吗???
现在是不是不用开发了,微信自动适配?
官方隐私弹窗马上就要出来了,啥都不用干
官方出弹框了,让咱们白忙活一场啊,淦
我是用uniapp 开发的 wx.getPrivacySetting一直返回false怎么办,在真机上调试也返回false,也有配置 "__usePrivacyCheck__": true