5

我正在使用 Here maps Premium SDK 3.15,在文档中,它说要在 android manifest 文件中设置 id、token 和 license。我将 build.gradle 中的 id、token 和 license 设置为清单占位符,并放入 Android.manifest 中,如下所示。

    <!-- Here Maps -->
    <meta-data android:name="com.here.android.maps.appid"
        android:value="${here_map_app_id}"/>
    <meta-data android:name="com.here.android.maps.apptoken"
        android:value="${here_map_app_code}"/>
    <meta-data android:name="com.here.android.maps.license.key"
        android:value="${here_map_licence_key}"/>

我的项目遇到了静态代码分析,其中一项发现是“应用程序代码中存在硬编码的秘密令牌”。这意味着我将此处的地图凭据保留在 build.gradle 中,这不行。

我的问题是我应该将这些凭据保存在哪里,有没有一种方法设置 Here 以编程方式而不是 Android 映射 SDK。清单(以防万一,我不保留在项目中并从后端检索)

4

3 回答 3

1

您可以使用清单占位符https ://developer.android.com/studio/build/manifest-build-variables

然后将您的密钥放在 env 中或local.properties如下所示(build.gradle

manifestPlaceholders = [
     HERE_SDK_APP_ID     : System.getenv("HERE_SDK_APP_ID") ?: "APP_ID",
     HERE_SDK_APP_TOKEN  : System.getenv("HERE_SDK_APP_TOKEN") ?: "APP_TOKEN",
     HERE_SDK_LICENSE_KEY: System.getenv("HERE_SDK_LICENSE_KEY") ?: "APP_LICENSE",
]

并在AndroidManifest.xml

<meta-data
    android:name="com.here.android.maps.appid"
    android:value="${HERE_SDK_APP_ID}" />
<meta-data
    android:name="com.here.android.maps.apptoken"
    android:value="${HERE_SDK_APP_TOKEN}" />
<meta-data
     android:name="com.here.android.maps.license.key"
     android:value="${HERE_SDK_LICENSE_KEY}" />
于 2021-01-05T14:14:34.063 回答
1

不,您不能以编程方式更改清单文件或资源,除非通过 gradle 注入。根据 Here maps:https ://developer.here.com/documentation/android-premium/3.15/dev_guide/topics/credentials.html只有一种方法可以设置凭据,但是您可以采取一些安全措施,请参阅https: //stackoverflow.com/a/46475968/8461344

于 2020-06-17T08:52:30.497 回答
0

我认为这已经在这里得到了回答Dynamic API KEY for Google Maps on Android

很明显,谷歌地图不支持动态 API 密钥插入。

对于任何其他动态 API 密钥,如果您不想在项目中硬编码,您可以查看 Firebase RemoteConfig。这是链接, https://firebase.google.com/docs/remote-config/use-config-android

于 2020-06-21T11:33:33.753 回答