如何改善在Android源代码中使用HMS API密钥

问题描述

关于HMS API密钥

使用HMS(华为移动服务)时,某些套件需要API密钥。可以从Appgallery Connect-> [项目设置]-> [常规信息]

获取API密钥。

AppGallery Connect

Android源代码中HMS API密钥的重复定义

在内部源代码中,通常如下使用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)

[情况2]

strings.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文件夹下。

Android Studio Project

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

agconnect-services.json

将有重复的API密钥定义。在源代码中对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)

解决方法

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

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,可以取消它。