You need to enable JavaScript to run this app. Android Place SDK使用绑定包名与SHA1的受限API密钥未授权报错问题
优惠活动
大模型
产品
解决方案
定价
更多

Android Place SDK使用绑定包名与SHA1的受限API密钥未授权报错问题

问题核心原因

当前项目引入的com.google.maps:google-maps-services是面向服务端场景的Java客户端工具库,并非Android平台专用的Places SDK。这类服务端库发起网络请求时,不会携带Android密钥校验所要求的应用包名、签名SHA1等鉴权参数,仅会以设备当前的公网IP对外发起请求,因此会直接触发鉴权校验失败,弹出“IP、站点或移动应用未被授权”的报错,且请求无referer信息。
另外原有代码中使用.await()的同步阻塞调用方式,在Android 4.0以上系统会直接触发主线程网络请求异常,无法正常运行。

具体修正步骤
  • 替换错误依赖
    首先移除不适用于Android场景的服务端库依赖:
    implementation 'com.google.maps:google-maps-services:0.18.0'
    
    引入Google官方Android专用Places SDK依赖:
    implementation 'com.google.android.libraries.places:places:3.5.0'
    
    原有单独引入的implementation 'com.squareup.okhttp3:okhttp:4.9.0'可保留,Android专用Places SDK已内置兼容版本的okhttp组件,无需额外调整。
  • 重构业务调用逻辑
    原代码中基于GeoApiContext、同步等待的调用逻辑全部来自服务端库,需替换为Android SDK提供的标准异步接口逻辑:
    1. 在应用初始化阶段(如Application.onCreate())完成SDK初始化:
      // 初始化Places SDK,绑定当前应用上下文与API密钥
      Places.initialize(getApplicationContext(), BuildConfig.MAPS_API_KEY);
      // 创建全局可复用的Places客户端实例
      PlacesClient placesClient = Places.createClient(this);
      
    2. 替换原有附近搜索逻辑,使用异步接口发起请求,避免阻塞主线程:
      public void fetchNearbyBakery(LatLng location) {
          // 构造附近位置搜索请求
          NearbySearchRequest searchRequest = placesClient.newNearbySearchRequest();
          searchRequest.setLocation(Location.newInstance(location.latitude, location.longitude));
          searchRequest.setRadius(5000);
          searchRequest.setKeyword("Shivam");
          searchRequest.setType(Place.Type.BAKERY);
      
          // 异步执行请求,通过回调获取执行结果
          searchRequest.execute()
              .addOnSuccessListener(response -> {
                  List<Place> resultList = response.getResults();
                  // 在此处处理业务返回的搜索结果
              })
              .addOnFailureListener(error -> {
                  // 在此处处理异常逻辑
                  error.printStackTrace();
              });
      }
      
  • 校验云控制台配置
    • 在Google Cloud控制台开启Places API for Android接口,不要仅开启适配服务端场景的通用Places API
    • 核对Android API密钥的访问限制配置:确保填入的SHA1签名包含当前调试、正式编译场景使用的所有证书指纹,且配置的包名与应用实际的applicationId完全匹配

内容的提问来源于stack exchange,提问作者Smeet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 12:36:05