首页 > 解决方案 > 如何改进在 Android 源代码中使用 HMS API 密钥

问题描述

关于 HMS API Key

在使用 HMS(Huawei Mobile Services)时,部分套件需要 API key。API key 可以从 AppGallery Connect -> [项目设置] -> [General Information] 获取

AppGallery Connect

Android源码中HMS API key的重复定义

在源代码中,通常使用 API 密钥,如下所示。

[情况1]

MainActivity.kt

// For example : private val API_KEY = "CgB6e3x9iW/qiE9l9wAUPK0e/bJQe5uIgTlYUD4bPc8gzjriSVxDDzX2fAVjCVdUHkP+tan0Xi0sf4tj7t11TJJe"
private val API_KEY = "Your API key"

// If using map kit
MapsInitializer.setApiKey(API_KEY)

【案例二】

字符串.xml

<!-- For example : <string name="api_key">CgB6e3x9iW/qiE9l9wAUPK0e/bJQe5uIgTlYUD4bPc8gzjriSVxDDzX2fAVjCVdUHkP+tan0Xi0sf4tj7t11TJJe</string> -->
<string name="api_key">Your API key</string>

MainActivity.kt

// If using map kit
MapsInitializer.setApiKey(getString(R.string.api_key))

但是,这些情况必须将 API 密钥直接放入源代码中。

实际上,使用 HSM 时,您必须从 AppGallery Connect 下载 agconnect-services.json 并将其放在 app 文件夹下。

安卓工作室项目

如果您打开 agconnect-services.json,您会发现 API 密钥已经包含在内。

agconnect-services.json

API key 会有重复的定义。它不利于源代码中的 API 密钥管理。

解决方案

最好的解决方案是直接使用 agconnect-services.json 中的 API 密钥,不要在源代码中添加其他定义。下面是一个例子。

MainActivity.kt

val api_key = AGConnectServicesConfig.fromContext(applicationContext).getString("client/api_key")

// If using map kit
MapsInitializer.setApiKey(api_key)

标签: androidapi-keyhuawei-mobile-services

解决方案


我最近使用了地图套件。我使用地图套件版本:

implementation 'com.huawei.hms:maps:5.1.0.300'

现在更简单了。如果包含 agconnect-services.json 和 *.jks 并正确配置为华为官网: https ://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides-V5/android-sdk-config -agc-0000001061560289-V5

不需要编写 MapsInitializer.setApiKey(api_key)。

//        MapsInitializer.setApiKey("Your API key");

官方 SDK demo 的 java 代码中可能包含 MapsInitializer.setApiKey("Your API key");如果配置了 agconnect-services.json,可以取消它。


推荐阅读