HMSのAPIキー
ファーウェイ(Huawei)のHMS(Huawei Mobile Services)はプッシュキット(Push Kit)やマップキット(Map Kit)など、複数のキッドより構成されています。特定なキッドを利用するのに、APIキーが必要です。
APIキーの場所
APIキーはAppGallery Connectの[Project Setting] -> [General Information]にあります。
APIキーの導入とその問題点
通常、APIキーは次のように導入します。
// たとえば、private val API_KEY = "CgB6e3x9iW/qiE9l9wAUPK0e/bJQe5uIgTlYUD4bPc8gzjriSVxDDzX2fAVjCVdUHkP+tan0Xi0sf4tj7t11TJJe"
private val API_KEY = "Your API key"
// マップキットを利用するケース
MapsInitializer.setApiKey(API_KEY)
または、次のようにように導入します
<!-- たとえば、<string name="api_key">CgB6e3x9iW/qiE9l9wAUPK0e/bJQe5uIgTlYUD4bPc8gzjriSVxDDzX2fAVjCVdUHkP+tan0Xi0sf4tj7t11TJJe</string> -->
<string name="api_key">Your API key</string>
// マップキットを利用するケース
MapsInitializer.setApiKey(getString(R.string.api_key))
しかし、上記の導入方法ですと、APIキーを明示的にソースコードに記載しなければなりません。
HMSを利用するのに、agconnect-services.jsonをAppGallery Connectからダウンロードし、プロジェクトのappフォルダに置く必要があります。
agconnect-services.jsonを開くと、client -> api_keyにAPIキーが載っています。
これですと、APIキーが二重定義になってしまい、ソースコードとしてはあまりよろしくありません。
解決策
次のように書けば、APIキーの二重定義の問題が解決されるだけでなく、agconnect-services.jsonに載っているAPIキーをそのまま利用するので、APIキーの記載間違いも起きません。
val api_key = AGConnectServicesConfig.fromContext(applicationContext).getString("client/api_key")
// マップキットを利用するケース
MapsInitializer.setApiKey(api_key)