微信小程序隐私协议相关接口实际使用方式
<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、全局控制和按需使用结合使用
这种情况是上面两种方式的结合,页面加载
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
})
}
}
})
时弹出隐私弹窗,不管用户同意还是不同意都不需要做其他操作。然后用户在用到隐私接口时,根据用户是否同意再按需决定是否再次弹窗。
这种情况下,需要在onLoad里使用wx.getPrivacySetting获取隐私授权情况,没授权时弹出隐私弹窗。同时定义好监听隐私接口时的授权事件,也就是wx.onNeedPrivacyAuthorization,然后在用户点击同意或者不同意后调用回调接口 resolve 进行上报,完整代码如下