Skip to content

uni.authorize、uni.getSetting、uni.openSetting 区别和选择使用

问题

我一直对 uni.authorize、uni.getSetting、uni.openSetting 的使用感到纠结。

以获取位置授权为例,

大多数人判断用户是否授权都是先使用 getSetting 判断用户已授权的列表,

如果需要授权的那一项为true可以直接使用uni.getLocation获取用户位置信息;

但如果为false,就使用authorize进行授权,

但因为之前已经拒绝授权,所以会直接走失败回调,

然后我们在失败回调里使用uni.openSetting提示用户打开位置权限。

我就感觉这里有点多余,直接使用 uni.authorize 或者 uni.getSetting 判断是否授权,然后是否需要使用 uni.openSetting 就好了,为什么要判断两次呢?

理解

js
uni.authorize

如果是第一次,会弹框让用户判断是否授权。
会去判断某个权限是否已经授权。已授权走成功回调,没授权走失败回调。

uni.getSetting

会去获取用户已经授权的权限。成功回调的参数res是授权的列表。

uni.openSetting

是打开设置,开启或关闭某个权限。

微信中在manifest.json中必须配置如下,然后在用户打开小程序时自动弹框提示用户是否授权小程序使用位置信息。
  "mp-weixin": {
    "appid": "wx58a7869155c1d656",
    "permission": {
        "scope.userLocation": {
        "desc": "你的位置信息将用于院区自动选择"
        }
   },

个人结论

最后我个人认为如果某个功能必须要用户打开某个权限,直接使用 uni.authorize 即可。

uni.getSetting 也行,只不过多一次判断。然后再根据业务需求使用 uni.openSetting 让用户打开某项设置权限即可。

最后最后,如果大佬觉得我的理解是错了,请评论帮我纠正一下,多谢!

Released under the MIT License.