微信小程序隐私协议相关接口实际使用方式
<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 进行上报,完整代码如下