MapActivity:以编程方式设置 APIKey

发布于 2024-09-15 12:34:09 字数 734 浏览 5 评论 0原文

我目前在我的应用程序中使用 MapActivity。 我将它与 2 个 API 密钥一起使用。一个用于调试,一个用于“生产”,

我厌倦了在 xml 布局中更改这些值:

 <view class="com.google.android.maps.MapView" 
        android:id="@+id/myGmap" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:enabled="true"
        android:clickable="true"
        android:apiKey="@string/api_key_prod" />

我厌倦了每次尝试更改 apikey 并每次用 debug 替换 prod。

是否可以在我的应用程序的 onCreate() 中更改此键。

想象一下,我有一个布尔首选项,如下所示:isDebug。

我可以在手机上检查此首选项,并在用户应用程序中默认禁用它。并写出类似的话:

 if (isDebug)
     myMap.setApiKey(R.string.api_key_debug)
 else
     myMap.setApiKey(R.string.api_key_prod)

非常感谢您的帮助。

I currently use a MapActivity in my application.
I use it with 2 API Keys. One for debugging, and one for "production"

I am fed up with changing these values in the xml layout:

 <view class="com.google.android.maps.MapView" 
        android:id="@+id/myGmap" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:enabled="true"
        android:clickable="true"
        android:apiKey="@string/api_key_prod" />

I am fed up trying to change the apikey each time and replace prod by debug each time.

Is that possible to change this key within the onCreate() of my application.

Imagine that I have a boolean preference that look like: isDebug.

I may check thi preference on my phone and disable it by default on user application. and make something like:

 if (isDebug)
     myMap.setApiKey(R.string.api_key_debug)
 else
     myMap.setApiKey(R.string.api_key_prod)

Thank a lot for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

左秋 2024-09-22 12:34:09

您不能既在布局中包含小部件,又在 Java 中设置 API 密钥。

如果您通过其构造函数动态创建 MapView,则可以通过 Java 代码以这种方式提供 API 密钥,但随后您需要将其动态添加到您的布局中。

话虽这么说,我会通过您的构建过程来处理问题(例如,基于调试/生产构建,将正确的 XML 文件复制到正确的目录中)。

You cannot both have the widget in your layout and set the API key in Java.

If you dynamically create the MapView via its constructor, you can supply the API key that way from Java code, but then you will need to dynamically add it to your layout.

That being said, I'd deal with the problem via your build process (e.g., based on debug/production build, copy the right XML file into the right directory).

浅忆流年 2024-09-22 12:34:09

这对我有用。

MapView 构造函数的这种变体记录在此处:
https://developers.google.com/maps /documentation/android/reference/com/google/android/maps/MapView

@Override
protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
    String mapApiKey = <your choice logic here>
    mMapView = new MapView(this, mapApiKey);
    setContentView(mMapView);

This works for me.

This variant of MapView constructor is documented here:
https://developers.google.com/maps/documentation/android/reference/com/google/android/maps/MapView

@Override
protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
    String mapApiKey = <your choice logic here>
    mMapView = new MapView(this, mapApiKey);
    setContentView(mMapView);
一个人的旅程 2024-09-22 12:34:09

您应该使用产品风味< /strong>

例如:

android {
    ...


    defaultConfig {
        minSdkVersion 8
        versionCode 10
    }


    productFlavors {
        dev {
            resValue "string", "google_maps_api_key", "DEV_API_KEY"
         }

        prod {
            resValue "string", "google_maps_api_key", "PROD_API_KEY"
         }
    }
}

You should use Product Flavors.

For example:

android {
    ...


    defaultConfig {
        minSdkVersion 8
        versionCode 10
    }


    productFlavors {
        dev {
            resValue "string", "google_maps_api_key", "DEV_API_KEY"
         }

        prod {
            resValue "string", "google_maps_api_key", "PROD_API_KEY"
         }
    }
}
娇纵 2024-09-22 12:34:09

您必须动态创建谷歌地图对象。您的布局将仅包含用于创建对象的父布局。

You have to create google maps object dynamically. Your layout will contaion only parent layout for creating object.

迷爱 2024-09-22 12:34:09

为了获得额外的安全性,请将您的 API 密钥和机密放入 local.properties 文件中,并使用 BuildConfig 访问它,如下所示:

  1. 在您的顶级 设置中。 gradle 文件,在 pluginManagement 块下包含 Gradle 插件门户、Google Maven 存储库和 Maven 中央存储库。 pluginManagement 块必须出现在脚本中任何其他语句之前。

    插件管理 {
        存储库{
            gradlePluginPortal()
            谷歌()
            mavenCentral()
        }
    }
    
  2. 在 Android Studio 中,打开项目级 build.gradle 文件并将以下代码添加到 buildscript 下的依赖项元素中:

    插件 {
        // ...
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' 版本 '2.0.1' 应用 false
    }
    
  3. 打开模块级 build.gradle文件并将以下代码添加到 plugins 元素中。

    插件 {
        // ...
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    }
    
  4. 保存文件并将您的项目与 Gradle 同步。

  5. 打开项目级别目录中的local.properties,然后添加以下代码。将 YOUR_API_KEY 替换为您的 API 密钥。

    MAPS_API_KEY=YOUR_API_KEY
    
  6. 保存文件。

    • 访问 AndroidManifest.xml 文件中的密钥:
      AndroidManifest.xml 文件中,转到 com.google.android.geo.API_KEY 并使用 MAPS_API_KEY 更新 android:value 属性,如下所示:

       <元数据
            android:name="com.google.android.geo.API_KEY"
            android:value="${MAPS_API_KEY}" />
      
    • 访问 Java/Kotlin 代码中的密钥:只需使用 BuildConfig,如下所示:

      <前><代码> BuildConfig.MAPS_API_KEY

更多内容可以在 文档

For extra security put your API key and secrets in the local.properties file and access it using BuildConfig as follows:

  1. In your top-level settings.gradle file, include the Gradle plugin portal, Google Maven repository, and Maven central repository under the pluginManagement block. The pluginManagement block must appear before any other statements in the script.

    pluginManagement {
        repositories {
            gradlePluginPortal()
            google()
            mavenCentral()
        }
    }
    
  2. In Android Studio, open your project-level build.gradle file and add the following code to the dependencies element under buildscript:

    plugins {
        // ...
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
    }
    
  3. Open your module-level build.gradle file and add the following code to the plugins element.

    plugins {
        //  ...
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    }
    
  4. Save the file and sync your project with Gradle.

  5. Open the local.properties in your project level directory, and then add the following code. Replace YOUR_API_KEY with your API key.

    MAPS_API_KEY=YOUR_API_KEY
    
  6. Save the file.

    • Access the key within AndroidManifest.xml file:
      In your AndroidManifest.xml file, go to com.google.android.geo.API_KEY and update the android:value attribute with MAPS_API_KEY as follows:

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="${MAPS_API_KEY}" />
      
    • Access the key within Java/Kotlin code: Just use BuildConfig as follows:

        BuildConfig.MAPS_API_KEY
      

More can be found in docs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文