隐私协议相关接口官方在回滚了多天之后终于滚回来并且提供了demo。
我这边实际研究demo后总结了实际的三种使用方法
首先要在设计到隐私协议相关功能的页面中增加隐私协议弹窗,wxml代码如下,wxss可以参考官方的demo
<view wx:if="{{showPrivacy}}" class="privacy">
<view class="popup">
<view>隐私弹窗内容....</view>
<view bindtap="openPrivacyAgreement">点击查看隐私协议</view>
<button id="disagreeBtn" bindtap="disagreePrivacy">不同意</button>
<button id="agreeBtn" open-type="agreePrivacyAuthorization" bindagreeprivacyauthorization="agreePrivacy">同意</button>
</view>
</view>
1、全局控制
页面加载时自动弹窗,同意后可以使用对应功能,不同意退出页面或者隐藏相关功能。
这种情况下,需要在onLoad里使用wx.getPrivacySetting获取隐私授权情况,没授权时弹出隐私弹窗。完整代码如下
Page({
data: {
showPrivacy: false // 控制隐私弹窗是否展示
},
openPrivacyAgreement() {
// 查看隐私协议
wx.openPrivacyContract()
},
disagreePrivacy() {
// 关闭隐私弹窗
this.setData({
showPrivacy: false
})
// 这里是不同意隐私协议的后续操作,比如退出页面、隐藏相关功能等
},
agreePrivacy() {
// 关闭隐私弹窗
this.setData({
showPrivacy: false
})
// 这里是同意隐私协议的后续操作,比如展示被隐藏的相关功能
},
onLoad() {
if (wx.getPrivacySetting) {
wx.getPrivacySetting({
success: res => {
if (res.needAuthorization) {
// 打开隐私弹窗
this.setData({
showPrivacy: true
})
} else {
// 用户已经同意过隐私协议,直接执行同意隐私协议的后续操作,比如展示被隐藏的相关功能
}
}
})
}
}
})
2、按需使用
在使用到隐私接口时弹出隐私弹窗,同时隐私接口的流程会被挂起,用户同意后会继续执行,不同意则中止执行。
这种情况下,需要在onLoad里定义好监听隐私接口时的授权事件,也就是wx.onNeedPrivacyAuthorization,然后在用户点击同意或者不同意后调用回调接口 resolve 进行上报,完整代码如下
Page({
data: {
showPrivacy: false // 控制隐私弹窗是否展示
},
openPrivacyAgreement() {
// 查看隐私协议
wx.openPrivacyContract()
},
disagreePrivacy() {
// 关闭隐私弹窗
this.setData({
showPrivacy: false
})
// 上报用户不同意隐私协议,隐私接口操作会被自动中止
this.resolvePrivacyAuthorization({
buttonId: 'disagreeBtn',
event: 'disagree'
})
},
agreePrivacy() {
// 关闭隐私弹窗
this.setData({
showPrivacy: false
})
// 上报用户同意隐私协议,隐私接口操作会被自动继续执行
this.resolvePrivacyAuthorization({
buttonId: 'agreeBtn',
event: 'agree'
})
},
onLoad() {
if (wx.onNeedPrivacyAuthorization) {
wx.onNeedPrivacyAuthorization(resolve => {
// 打开隐私弹窗
this.setData({
showPrivacy: true,
})
// 定义上报方法
this.resolvePrivacyAuthorization = resolve
})
}
}
})
3、全局控制和按需使用结合使用
这种情况是上面两种方式的结合,页面加载时弹出隐私弹窗,不管用户同意还是不同意都不需要做其他操作。然后用户在用到隐私接口时,根据用户是否同意再按需决定是否再次弹窗。
这种情况下,需要在onLoad里使用wx.getPrivacySetting获取隐私授权情况,没授权时弹出隐私弹窗。同时定义好监听隐私接口时的授权事件,也就是wx.onNeedPrivacyAuthorization,然后在用户点击同意或者不同意后调用回调接口 resolve 进行上报,完整代码如下
let pageOnload = true // 是否页面加载时弹窗
Page({
data: {
showPrivacy: false // 控制隐私弹窗是否展示
},
openPrivacyAgreement() {
// 查看隐私协议
wx.openPrivacyContract()
},
disagreePrivacy() {
// 关闭隐私弹窗
this.setData({
showPrivacy: false
})
if (!pageOnload) {
// 上报用户不同意隐私协议,隐私接口操作会被自动中止
this.resolvePrivacyAuthorization({
buttonId: 'disagreeBtn',
event: 'disagree'
})
} else {
pageOnload = false
}
},
agreePrivacy() {
// 关闭隐私弹窗
this.setData({
showPrivacy: false
})
if (!pageOnload) {
// 上报用户同意隐私协议,隐私接口操作会被自动继续执行
this.resolvePrivacyAuthorization({
buttonId: 'agreeBtn',
event: 'agree'
})
} else {
pageOnload = false
}
},
onLoad() {
if (wx.getPrivacySetting) {
wx.getPrivacySetting({
success: res => {
if (res.needAuthorization) {
// 打开隐私弹窗
this.setData({
showPrivacy: true
})
}
}
})
}
if (wx.onNeedPrivacyAuthorization) {
wx.onNeedPrivacyAuthorization(resolve => {
// 打开隐私弹窗
this.setData({
showPrivacy: true,
})
// 定义上报方法
this.resolvePrivacyAuthorization = resolve
})
}
}
})
4、open-type按钮藕合使用
这个是目前最简单的方式,按照官方文档,在用open-type方式调用隐私功能的按钮的open-type里加上|agreePrivacyAuthorization
就可以了,js部分代码基本不用做任何修改,示例如下
<button open-type="getPhoneNumber|agreePrivacyAuthorization" bindgetphonenumber="handleGetPhoneNumber">同意隐私协议并授权手机号</button>
这种方式,不需要上报同意事件,不需要设计隐私协议弹窗,不需要“不同意”按钮。当然,我建议在现有页面上增加一个查看隐私协议的入口。
提示 resolvePrivacyAuthorization is not a function
请问大佬,第一种方法,是一次性给自己程序中所有未授权的接口 授权吗?比如我的程序用到了4个隐私接口,1个授权了3个没授权,我通过wx.getPrivacySetting判断出还有隐私没有授权过,此时客户选择同意授权,这3个之前没授权的此刻是否都被授权了呢?
有那个大佬给解读一下吗?
请问现在可以了?
console.log('我还是进不来,基础库3.0,__usePrivacyCheck__ true已设置,缓存已清除,mp后台通过状态')
})
第三个例子,不建议这样使用。最好是参考官方demo3,用wx.onNeedPrivacyAuthorization、wx.requirePrivacyAuthorize
666,很棒