从 Android 应用程序调用时,Huawei Map Kit 抛出网络错误(代码 060001)
Huawei Map Kit throws Network Error (Code 060001) when calling it from Android app
我正在我的 Android 应用程序上实施 Map Kit。按照official documentation安装HMS Core SDK后,我有:
- 在 AppGallery Connect 上启用地图服务包、定位服务包和站点服务包。
- 添加了 agconnect-services.json
- 使用
URLEncoder
和 utf-8
对我的 API 密钥进行了编码。
- 为我的发布版本和调试版本复制了我的 SHA-256 证书指纹(使用不同的密钥库条目)。
- 请求位置许可。
- 在加载 MapsInitializer 之前设置我的 API 键。
总而言之,我的代码如下所示:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
try {
API_KEY = URLEncoder.encode(
getString(R.string.api_key),
"utf-8"
)
MapsInitializer.setApiKey(API_KEY)
} catch (ignored: UnsupportedEncodingException) {
}
binding = ActivityMapBinding.inflate(layoutInflater)
setContentView(binding.root)
viewModel = ViewModelProvider(
this,
MapViewModel.MyViewModelFactory(application)
)[MapViewModel::class.java]
var mapViewBundle: Bundle? = null
if (savedInstanceState != null) {
mapViewBundle = savedInstanceState.getBundle(MAPVIEW_BUNDLE_KEY)
}
mMapView = binding.mapView
mMapView.onCreate(mapViewBundle)
mMapView.getMapAsync(this)
siteInfo = binding.siteInfo
siteInfo.visibility = View.GONE
// ...
}
但是当我输入 activity 时,我得到的只是我在空白地图上的位置的蓝点和 Toast
说 REQUEST_DENIED
。
检查日志,似乎没有 API 身份验证或签名错误,但很可能是 Petal Maps API 已关闭:
E/HmsMapKit_ErrorTraceLogPusher_4: cache error trace log : ErrorTraceLogDTO{ scenario = ACCESS_SERVICE_ERROR', message='060001 : NETWORK_ERROR'}
com.huawei.hms.maps.foundation.client.mac: *e*v*r*A*d*e*s*f*o* *R* *s*e*p*y*
at com.huawei.hms.maps.foundation.client.mac$maa.b(Unknown Source:25)
这令人不安,因为 official Map Kit error codes documentation 中没有此错误代码的迹象。有谁知道发生了什么事?提前致谢!
更新
该问题已在最新版本的HMS Core中修复。尝试将HMS Core apk升级到最新版本,可能会解决此问题。
目前HMS Core最新版本为6.5.0.312.
感谢您提供有关此问题的信息。我们已将此问题反馈给研发团队处理,请问您的设备是否安装了HMS Core 6.4.0?建议回退到HMS Core 6.3版本apk。并且我们会尽快发布补丁包修复该问题。
解决了!这是我的配置:
HMS Core: 最新版本 14/03/2022 (6.4.0.306)
Map Kit: 截至 2022 年 3 月 14 日的最新版本 (implementation 'com.huawei.hms:maps:6.3.1.300'
)
主要原因: 我的 build.gradle
文件中缺少我的应用程序签名配置。
解决步骤:
删除了我现有的密钥库 (.jks)。 免责声明:如果您的应用程序在 AppGallery 中发布,您将失去更新该应用程序的能力。请作为最后的手段。
在我的 Android Studio 项目中创建了一个新的密钥库,在 app
目录下。
为 release
生成了签名 APK 并获得了 SHA-256 指纹。
在 AppGallery Connect 中用新指纹替换了我以前的指纹。
在我的地图 activity 中,没有对我的 API 密钥进行编码(感谢雪莉!)
重建我的项目。
完整的说明是here。
我正在我的 Android 应用程序上实施 Map Kit。按照official documentation安装HMS Core SDK后,我有:
- 在 AppGallery Connect 上启用地图服务包、定位服务包和站点服务包。
- 添加了 agconnect-services.json
- 使用
URLEncoder
和utf-8
对我的 API 密钥进行了编码。 - 为我的发布版本和调试版本复制了我的 SHA-256 证书指纹(使用不同的密钥库条目)。
- 请求位置许可。
- 在加载 MapsInitializer 之前设置我的 API 键。
总而言之,我的代码如下所示:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
try {
API_KEY = URLEncoder.encode(
getString(R.string.api_key),
"utf-8"
)
MapsInitializer.setApiKey(API_KEY)
} catch (ignored: UnsupportedEncodingException) {
}
binding = ActivityMapBinding.inflate(layoutInflater)
setContentView(binding.root)
viewModel = ViewModelProvider(
this,
MapViewModel.MyViewModelFactory(application)
)[MapViewModel::class.java]
var mapViewBundle: Bundle? = null
if (savedInstanceState != null) {
mapViewBundle = savedInstanceState.getBundle(MAPVIEW_BUNDLE_KEY)
}
mMapView = binding.mapView
mMapView.onCreate(mapViewBundle)
mMapView.getMapAsync(this)
siteInfo = binding.siteInfo
siteInfo.visibility = View.GONE
// ...
}
但是当我输入 activity 时,我得到的只是我在空白地图上的位置的蓝点和 Toast
说 REQUEST_DENIED
。
检查日志,似乎没有 API 身份验证或签名错误,但很可能是 Petal Maps API 已关闭:
E/HmsMapKit_ErrorTraceLogPusher_4: cache error trace log : ErrorTraceLogDTO{ scenario = ACCESS_SERVICE_ERROR', message='060001 : NETWORK_ERROR'}
com.huawei.hms.maps.foundation.client.mac: *e*v*r*A*d*e*s*f*o* *R* *s*e*p*y*
at com.huawei.hms.maps.foundation.client.mac$maa.b(Unknown Source:25)
这令人不安,因为 official Map Kit error codes documentation 中没有此错误代码的迹象。有谁知道发生了什么事?提前致谢!
更新
该问题已在最新版本的HMS Core中修复。尝试将HMS Core apk升级到最新版本,可能会解决此问题。
目前HMS Core最新版本为6.5.0.312.
感谢您提供有关此问题的信息。我们已将此问题反馈给研发团队处理,请问您的设备是否安装了HMS Core 6.4.0?建议回退到HMS Core 6.3版本apk。并且我们会尽快发布补丁包修复该问题。
解决了!这是我的配置:
HMS Core: 最新版本 14/03/2022 (6.4.0.306)
Map Kit: 截至 2022 年 3 月 14 日的最新版本 (
implementation 'com.huawei.hms:maps:6.3.1.300'
)
主要原因: 我的 build.gradle
文件中缺少我的应用程序签名配置。
解决步骤:
删除了我现有的密钥库 (.jks)。 免责声明:如果您的应用程序在 AppGallery 中发布,您将失去更新该应用程序的能力。请作为最后的手段。
在我的 Android Studio 项目中创建了一个新的密钥库,在
app
目录下。为
release
生成了签名 APK 并获得了 SHA-256 指纹。在 AppGallery Connect 中用新指纹替换了我以前的指纹。
在我的地图 activity 中,没有对我的 API 密钥进行编码(感谢雪莉!)
重建我的项目。
完整的说明是here。