收藏
回答

wx.onLocationChange所遇到的疑问?

1.iOS和Android的差异

1.1 当用户关闭微信应用级别授权时,iOS仍旧进入success回调,Android进入fail回调,errMsg为startLocationUpdate:fail:system permission denied

1.2 当用户拒绝小程序授权时,iOS和Android均进入fail回调,但是errMsg会有所不同,iOS为:startLocationUpdate:fail auth deny

Android为startLocationUpdate:fail:auth denied

1.3 wx.onLocationChange在Android环境下,开发模式和非开发模式所返回的errMsg不一致

2.所遇到的问题

2.1面对应用级别的授权和小程序的授权,需要进行不同的提示,当关闭微信位置权限时,iOS无法做出判断,如何解决?

2.2是否能提供相关打开手机设置的API,例如支付宝小程序的my.showAuthGuide?

3.代码片段举例

startPosition() {
    let that = this
    const _locationChangeFn = (result) => {
      console.log(result)
      wx.offLocationChange(_locationChangeFn)
      wx.stopLocationUpdate()
    }
    return new Promise(resolve => {
      wx.startLocationUpdate({
        success: res => {
          wx.onLocationChange(_locationChangeFn)
          that.globalData.isDenyAuthPosi = false
          // 此处iOS有问题,当关闭微信应用级授权时
          that.globalData.sysPermissionDeny = false
          resolve(true)
        },
        fail: err => {
          // 苹果手机:拒绝小程序位置授权 err.errMsg:startLocationUpdate:fail auth deny
          // 安卓手机:拒绝小程序位置授权 err.errMsg:startLocationUpdate:fail:auth denied
          if (err.errMsg.indexOf('auth den') !== -1) {
            that.globalData.isDenyAuthPosi = true
            resolve(true)
          }
          // 苹果手机:拒绝系统位置授权会走success回调!!!
          // 安卓手机:拒绝系统位置授权 err.errMsg:startLocationUpdate:fail:system permission denied
          if (err.errMsg.indexOf('system permission denied') !== -1) {
            that.globalData.sysPermissionDeny = true
            resolve(true)
          }
        }
      })
    })
  }
回答关注问题邀请回答
收藏

1 个回答

  • 亮
    2023-03-10

    兄弟好,这个定位问题确实在各种场景下有各种问题, 能否加个微信,相互学习探讨?

    2023-03-10
    有用
    回复
登录 后发表内容