uni-app集成高德地图后登录前提示位置权限问题:app需登录后使用,但登录前就提示访问位置权限,拒绝后下次打开仍提示获取权限

uni-app集成高德地图后登录前提示位置权限问题:app需登录后使用,但登录前就提示访问位置权限,拒绝后下次打开仍提示获取权限

操作步骤:

【报Bug】app中集成了高德地图后,app需要登录后才能用。在用户登录app之前,就会提示访问用户的位置权限?如果拒绝,下次打开app,还是会提示获取权限

预期结果:

【报Bug】app中集成了高德地图后,app需要登录后才能用。在用户登录app之前,就会提示访问用户的位置权限?如果拒绝,下次打开app,还是会提示获取权限

实际结果:

【报Bug】app中集成了高德地图后,app需要登录后才能用。在用户登录app之前,就会提示访问用户的位置权限?如果拒绝,下次打开app,还是会提示获取权限

bug描述:

【报Bug】app中集成了高德地图后,app需要登录后才能用。在用户登录app之前,就会提示访问用户的位置权限?如果拒绝,下次打开app,还是会提示获取权限


更多关于uni-app集成高德地图后登录前提示位置权限问题:app需登录后使用,但登录前就提示访问位置权限,拒绝后下次打开仍提示获取权限的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

解决了吗

更多关于uni-app集成高德地图后登录前提示位置权限问题:app需登录后使用,但登录前就提示访问位置权限,拒绝后下次打开仍提示获取权限的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题是由于高德地图SDK在初始化时自动请求位置权限导致的。以下是解决方案:

核心原因: 高德地图SDK在new AMap.Map()或相关API调用时会自动触发位置权限请求,即使你还没真正使用定位功能。

解决方案:

  1. 延迟初始化地图 在登录成功后再初始化高德地图组件:

    // 登录成功后初始化地图
    onLoginSuccess() {
      // 设置标志位,表示已登录
      this.isLoggedIn = true
      // 此时再初始化地图组件
      this.initMap()
    }
    
  2. 使用条件渲染 在模板中使用v-if控制地图组件的显示:

    <template>
      <view>
        <!-- 登录前显示登录界面 -->
        <login-page v-if="!isLoggedIn" />
        
        <!-- 登录后才显示地图 -->
        <map-component v-if="isLoggedIn" />
      </view>
    </template>
    
  3. 配置高德SDK(Android) 在Android原生配置中延迟权限请求:

    <!-- AndroidManifest.xml -->
    <meta-data
      android:name="com.amap.api.location.REQUEST_LOCATION_PERMISSION"
      android:value="false" />
    
  4. 手动控制权限请求 使用uni-app的权限API手动控制:

    // 在需要时手动请求权限
    uni.authorize({
      scope: 'scope.userLocation',
      success: () => {
        // 用户同意后再初始化地图
        this.initMap()
      }
    })
    
  5. 检查manifest.json配置 确保没有在manifest.json中过早声明定位权限:

    {
      "app-plus": {
        "distribute": {
          "android": {
            "permissions": [
              // 不要在这里提前声明定位权限
            ]
          }
        }
      }
    }
回到顶部