my.getsetting(object object)
基础库 或更高版本; 且 支付宝客户端 10.1.10 或更高版本; 若版本较低,建议采取 兼容处理 。
以 promise 风格调用: 支持 。
主体: 企业支付宝小程序 、 个人支付宝小程序
获取用户对当前小程序的授权状态。
小程序调用设备或者隐私信息相关的 api(如 my.getlocation、my.chooseimage)时,支付宝会弹出授权提示框,由用户决定是否授权给当前小程序。api 调用之后,相关权限的授权状态,用户可在小程序设置界面板中查看和更改,开发者则可通过 my.getsetting 获取。
这些需要授权的 api 的成功调用,往往需要用户在两个层次上完成授权:1,在支付宝内授权给小程序;2,在系统级别开启对应功能并授权给支付宝。两层授权状态相互独立,前者可通过 my.getsetting 获取,后者则需通过 my.getsysteminfo 获取。
小程序授权相关的逻辑
在用户未对小程序授权的情况下,调用需要权限的 api,客户端会向用户弹出授权提示框:
- 如果用户同意,api 的主体逻辑将会执行,且后续该 api 调用时不会再弹出授权提示;
- 如果用户拒绝,将直接触发 api 的 fail 回调,错误码一般为 2001(目前未完全统一,请以具体 api 文档为准);如果用户在拒绝时勾选了“保持以上选择不再询问”,则 fail 回调错误码为 2003,且后续对该 api 的调用将直接失败(错误码为 2002),直到用户在小程序设置中重新开启此项权限。
用户在小程序设置中关闭某项授权后,再次调用相应 api 也会重新弹出授权提示;用户从“我的小程序”中删除当前小程序,等效于在小程序设置中关闭 my.getsetting 所包含的所有授权项。
对于因用户未授权给小程序而导致 api 调用失败、影响小程序正常使用的情况,建议给予用户恰当的引导说明,并在必要时调用 my.opensetting 打开小程序设置界面以便用户开启相关授权。
系统级权限相关的逻辑
如果某个 api 所需的特定权限用户并未在系统中开启,或者未授权给支付宝,那么即使用户同意将该权限授权给当前小程序,api 的调用仍会失败。一般来说,小程序对该 api 的首次调用也会触支付宝向系统申请权限,用户会看到相应的授权提示或者引导界面;用户拒绝以后的重复 api 调用或者永久拒绝情况下的 api 调用,则可能直接触发 fail 回调(错误码请参考具体 api 文档),用户将不会自动获得提示。开发者可通过 my.getsysteminfo 提前查询系统级授权情况,以区分这两种情况;针对后一种情况,可根据 api 回调信息或者再次调用 getsysteminfo 获取详情(例如 locationenabled 为 false 表示手机未开启定位,locationauthorized 为 false 表示用户未授予定位权限给支付宝),并采取恰当处理,如通过调用 my.showauthguide 主动唤起授权引导。
小程序设置中的其他项
my.getsetting 能够获取的授权状态的范围与小程序设置界面中的大部分选项对应,包括各种设备权限,也包括部分用户信息(收货地址、会员基础信息、手机号等),详情参见后文 success 回调函数。小程序设置界面中有展示、但暂不支持通过 my.getsetting 查询的项目包括:
1,消息管理:即消息订阅状态,请在服务端使用 alipay.open.app.messagetemplate.subscribe.query 查询;
2,用户信息:
- 通过 my.getauthcode 获取用户授权(如 userid、用户昵称等)的状态,不提供单独的查询接口,开发者在恰当的时机调用 my.getauthcode 并在回调中进行相应处理即可,已授权状态下 my.getauthcode 二次调用不会再有弹框;
- 其他非常规项目(如刷脸认证等)的授权状态,请参考相关的产品接入文档。
object object
查看示例
属性 | 类型 | 默认值 | 必填 | 兼容性 | 描述 |
---|---|---|---|---|---|
withsubscriptions | boolean | false | 否 | 支付宝: 10.5.10 |
是否同时获取用户订阅消息的订阅状态,默认不获取 |
success | function | - | 否 | - | 调用成功的回调函数 |
fail | function | - | 否 | - | 调用失败的回调函数 |
complete | function | - | 否 | - | 调用结束的回调函数(调用成功、失败都会执行) |
success 回调函数
参数
object res
查看示例
属性 | 类型 | 兼容性 | 描述 | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
authsetting | object | - | 用户授权结果 |
||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
subscriptionssetting | object | 支付宝: 10.5.10 |
用户订阅消息设置,接口参数withsubscriptions 值为 true 时才会返回 |
||||||||||||||||||||||||||||||||||||||||
|
my.getsetting({
withsubscriptions: true,
success: res => {
const { album = false, location = false } = res.authsetting;
my.alert({ content: `相册已授权:${album};地理位置已授权:${location}` });
},
});
{
"authsetting": {
"location": true,
"album": true
},
"subscriptionssetting": {
"itemsettings": {
"8a28818e60fc4c58a53bbe9bbe8361fe": "accept"
},
"mainswitch": true
}
}
q:通过 my.getauthcode 进行的授权状态,可以通过 my.getsetting 接口查询吗?
暂不支持。开发者在恰当的时机调用 my.getauthcode 并在回调中进行相应处理即可。已授权状态下 my.getauthcode 二次调用不会再有弹框。
q:使用 my.getsetting 查询到 album location 授权为true,调用my.chooseimage my.getlocation 为何仍因为权限问题而失败?
my.getsetting 获取的只是用户在支付宝内对小程序的授权,但在系统级别用户可能关闭了相关功能或者未对支付宝授权。请参考本文 接入准备 部分的相关描述和建议。