Administración de las claves API de Google Maps

Mi aplicación utiliza un gran número de pantallas MapView y estoy tratando de averiguar cómo administrar la clave de la API entre el entorno de depuración y la producción. Aparentemente, no hay manera de cambiar la clave de la aplicación de depuración en Eclipse, así que debo usar una clave de API de mapa de depuración en ese entorno. Por el contrario, no hay forma de exportar un paquete para pruebas beta sin una clave de aplicación de producción, así que debo cambiar la clave del mapa API en cada vista para crear un paquete de trabajo.

Mi primera idea fue hacer esto:

Todos los archivos MapView.xml tienen esto:

android:apiKey="@string/googleMapsAPIKey" 

Y luego en strings.xml pongo esto:

 <string name="googleMapsPIKey">@string/debugGoogleMapsAPIKey</string> <string name="debugGoogleMapsAPIKey">TheMagicKeyString</string> 

Si esto funcionara, me permitiría cambiar una única línea en strings.xml y todos los MapViews se actualizarían en la reconstrucción. Pero no funcionó. Supongo que strings.xml no puede hacer referencias en sí mismo. ¿Alguna otra idea?

Gracias

Recomiendo un enfoque más simple que implica aprovechar una carpeta de activos improbable, pero más específica para alojar su clave de depuración. Para configurar esto, cree un archivo res / values ​​/ maps-apikey.xml con los siguientes contenidos:

 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="maps_apikey">[productionApiKey]</string> </resources> 

A continuación, cada desarrollador local agregará un archivo derivado de éste en res / values-v1 / maps-apikey.xml donde se proporciona su clave de API de depuración. En tiempo de ejecución, el sistema Android favorecerá la versión más específica res / values-v1 / maps-apikey.xml para todas las versiones de Android (ya que todas son al menos en el nivel 1 de la API o superior).

Los sistemas de control de origen como git y svn permiten agregar un archivo "ignorar" que dirige las herramientas a ignorar este archivo res / values-v1 / maps-apikey.xml para que cada desarrollador no lo envíe accidentalmente al repositorio. Para hacer esto para git, simplemente agregue un archivo res / .gitignore que contenga sólo los valores de línea-v1 y luego confiera este archivo.

Para liberar el software, simplemente elimine el archivo res / values-v1 / maps-apikey.xml antes de exportar una versión. El APK resultante hará referencia a la versión en res / values ​​/ maps-apikey.xml, que es la clave de producción correcta.

Usted está haciendo lo correcto, pero no de la manera correcta creo. Declare su cadena en strings.xml como esto:

 <string name="googleMapsAPIKey">TheMagicKeyString</string> <!-- You can add this at the end as comment to keep a copy of another key for instance, to exchange it between debug and production--> 

Observe que usted no dio el mismo nombre en sus 2 secuencias … Uno se llama depuración y no el otro.

Estoy usando maven y maven-android-plugin , con un directorio res-overlay que solo se usa en la configuración de la versión.

En consecuencia, tengo un archivo res/values/google_api_key.xml que contiene la clave de depuración y un archivo res-overlay-production/values/google_api_key.xml que contiene la clave de producción y el último reemplaza al primero en la versión de producción.

También utilizo Eclipse ADT, pero esto no conoce la configuración de la versión, por lo que es feliz ver la clave de depuración y puedo usar los editores de Android XML para configurar mis vistas de mapa.

Estoy usando maven-android-plugin y estoy usando un mecanismo de sustitución de token sneaky para hacer esto.

Estoy utilizando la muestra "morseflash", y agregó esto a la configuración del complemento de maven-resources:

 <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <phase>initialize</phase> <goals> <goal>resources</goal> </goals> </execution> </executions> <configuration> <delimiters> <delimiter>${*}</delimiter> <delimiter>&gt;08*&lt;</delimiter> </delimiters> </configuration> </plugin> 

El complemento de recursos le permite definir delimitadores extraños para buscar / reemplazar. El delimitador predeterminado es ${*} , pero he añadido >*< para que coincida con el contenido del elemento XML. (En realidad usé >08*< , explicaré por qué en un momento.)

Entonces, en mis strings.xml, escribí esto:

 <string name="googleMapsAPIKey">08DEBUGKEYABCDEFBLAHBLAHBLAH</string> 

Y definió una propiedad Maven en el perfil de lanzamiento, así:

 <profile> <id>release</id> <!-- via this activation the profile is automatically used when the release is done with the maven release plugin --> <activation> <property> <name>performRelease</name> <value>true</value> </property> </activation> <properties> <DEBUGKEYABCDEFBLAHBLAHBLAH>&gt;08RELEASEKEYABCDEFBLAHBLAHBLAH&lt;</DEBUGKEYABCDEFBLAHBLAHBLAH> </properties> <-- ... --> </profile> 

Esto crea una propiedad Maven nombrada después de la clave de mapas de depuración, cuyo valor es la clave de depuración de la versión.

Lamentablemente, las propiedades de Maven no pueden comenzar con números. Mi clave de depuración y mi clave de liberación ambos comenzaron con 08Wfj... Así que usé el delimitador >08*< y me aseguré de incluir >08 en mi cadena de reemplazo.

Creo que esta es una buena manera de hacerlo! Con la corrección de Sephy debería funcionar perfectamente.

Además de eso, si quieres cambiar las claves automáticamente entre las compilaciones de depuración y lanzamiento, puedes echar un vistazo a este post que acabo de escribir: http://blog.cuttleworks.com/2011/02/android-dev-prod -construye / . Me ayudó a dejar de preocuparme por la configuración al construir para diferentes entornos.

Intente algo como esto:

 String debugMapKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; String releaseMapKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; String mapKey = BuildConfig.DEBUG ? debugMapKey : releaseMapKey; MapView mv = new MapView(this, mapKey); 

Puede configurar el depurador personalizado en la ventana de Prefs -> Android-> Build.

En la consola de desarrolladores de google, puedes crear una clave para varios códigos sha1 https://stackoverflow.com/a/13881624/1433372

  • Google Map Android API v2 no puede mostrar el mapa en la aplicación de Google Play Store
  • Cómo utilizar mapas de google coloca autocompletar api y sugerencias de lista en un listview y no un menú desplegable
  • Android geocoder ubicación inversa - forma fiable para obtener la ciudad?
  • ¿Cómo obtener la dirección completa desde la latitud y la longitud?
  • Android: Mock Location cambia de nuevo a Original después de unos segundos
  • ¿Cómo obtengo una clave de la API de Google Places para mi aplicación para Android?
  • Google Maps de PhoneGap - el mapa no muestra
  • GoogleMaps - llamando a OnPause ()
  • DefaultClusterRenderer getMarker () devuelve null cuando se hace zoom
  • Cómo resolver para viewpager: El niño especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
  • Activación de un evento de mapa (como un clic de marcador) en Google Maps Android V2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.