uni-app uni.getSetting 在支付宝小程序端返回的结果与文档不一致

uni-app uni.getSetting 在支付宝小程序端返回的结果与文档不一致

类别 信息
产品分类 uniapp/小程序/阿里
操作系统 Windows
操作系统版本 Windows 10 专业版
第三方工具版本 Version 2.5.3
基础库版本 2.0.0-alpha-32920211110002
项目创建方式 CLI
CLI版本 4.5.15

操作步骤:

uni.getSetting({ success: ({ authSetting }) => { console.log(authSetting) } })

预期结果:

uni.getSetting({ success: ({ authSetting }) => { console.log(authSetting) } })  
// authSetting => { 'scope.userLocation': true }

实际结果:

uni.getSetting({ success: ({ authSetting }) => { console.log(authSetting) } })  
// authSetting => { 'location': true }

bug描述:

调用uni.getSetting,期望返回 UniApp.AuthSetting 接口所定义的属性名,但获取到的属性名不一致。比如希望获取到'scope.userLocation': true,但实际获取'location': true


更多关于uni-app uni.getSetting 在支付宝小程序端返回的结果与文档不一致的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app uni.getSetting 在支付宝小程序端返回的结果与文档不一致的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据你的描述,这是支付宝小程序平台与uni-app标准API之间的差异导致的。uni.getSetting在支付宝小程序端返回的权限字段名遵循的是支付宝小程序原生的规范,而非uni-app跨端标准。

在支付宝小程序中,权限字段使用的是简写形式,如'location': true对应的是地理位置权限。而uni-app文档中定义的'scope.userLocation'是微信小程序的字段命名风格。

解决方案:

  1. 条件编译处理:针对支付宝小程序平台做特殊处理
uni.getSetting({
  success: ({ authSetting }) => {
    // #ifdef MP-ALIPAY
    const hasLocationPermission = authSetting['location'] === true
    // #endif
    
    // #ifndef MP-ALIPAY
    const hasLocationPermission = authSetting['scope.userLocation'] === true
    // #endif
    
    console.log('位置权限:', hasLocationPermission)
  }
})
  1. 统一封装工具函数:创建一个兼容各平台的权限检查函数
function checkPermission(permissionKey) {
  return new Promise((resolve) => {
    uni.getSetting({
      success: ({ authSetting }) => {
        // 支付宝小程序字段映射
        const alipayMap = {
          'scope.userLocation': 'location',
          'scope.userInfo': 'userInfo',
          'scope.record': 'record'
        }
        
        let hasPermission = false
        // #ifdef MP-ALIPAY
        const alipayKey = alipayMap[permissionKey] || permissionKey
        hasPermission = authSetting[alipayKey] === true
        // #endif
        
        // #ifndef MP-ALIPAY
        hasPermission = authSetting[permissionKey] === true
        // #endif
        
        resolve(hasPermission)
      }
    })
  })
}

// 使用示例
checkPermission('scope.userLocation').then(hasPermission => {
  console.log('位置权限:', hasPermission)
})
回到顶部