关于授权的一些官方建议
- 不能一进入页面,就调用授权的API(弹出授权界面),建议:(在有必要的时候,去调用授权的API)
- 不能因为拒绝授权,影响用户的正常页面浏览
- 出于提高用户体验,一旦用户拒绝过某授权,那么再次调用该授权,会直接走fail流程
- 如果希望重新允许,某些被拒绝的授权,应该通过右上角菜单-设置,自行打开拒绝的授权开关,返回调用结果也会随之变化。
- 每次进入页面后,可以通过 tt.getSetting,获取用户曾经同意或拒绝的授权设置列表,来进行后续业务逻辑
具体的页面逻辑
以获取用户地理信息的授权为例:
- 初次进入页面,通过 tt.getSetting 获取地理位置的信息,如果已授权过则返回true,如果拒绝了授权则返回false,如果没有触发过授权那么返回
'undefined'
补充:界面上仅会出现进行过授权,有授权结果记录的条目 - 点击【手动授权按钮】,调用tt.openSetting来显示 小程序授权菜单 界面,通过修改设置,返回完成一个完整的手动授权流程
代码段:
- 模板
<!--初次位置授权-->
<view
tt:if="{{allowLocalAuthorize}}"
class="label mt0 flexBox flexYC flex_between"
>
<view
bindtap="getLocationFn"
class="localAuthorizeBtn"
>位置授权</view>
<view class="sysMes">获取您的地理信息,用于快速定位您的所在地区,便于表单填写。</view>
</view>
<!-- 手动位置授权 -->
<view
tt:if="{{ManualLocalAuthorize}}"
class="label mt0 flexBox flexYC flex_between"
>
<view
bindtap="openSettingFn"
class="localAuthorizeBtn"
>手动位置授权</view>
<view class="sysMes">如您拒绝授权后,想再次授权地理位置,请自行进行手动授权。</view>
</view>
- 脚本
data:{
//初次授权按钮,显示与否,默认false - 不显示
'allowLocalAuthorize': false,
//手动授权按钮,显示与否,默认false - 不显示
'ManualLocalAuthorize': false
},
onLoad(){
//获取用户已经授权过的配置 -- 1.3.0
if(tt.getSetting){
tt.getSetting({
success(res) {
if(res.authSetting['scope.userLocation']==true){
//已允许-地理授权
//...进行正常业务逻辑
}else if(typeof res.authSetting['scope.userLocation']=='undefined'){
//初次加载-未进行过任何地理授权,显示【授权按钮】
_that.setData({
'allowLocalAuthorize': true
});
}else if(res.authSetting['scope.userLocation']==false){
//拒绝过-地理授权,显示【手动授权】
_that.setData({
'ManualLocalAuthorize': true
});
};
},
fail(res) {
console.log(`getSetting 调用失败`);
},
});
}else{
tt.showModal({
title: "提示",
content:
"当前客户端版本过低,无法使用获取用户已经授权过的配置功能,请升级客户端或关闭后重启更新。"
});
}
}
授权的流程图
......占位,填坑........