¿Debo agregar google-services.json (de Firebase) a mi repositorio?

101

Me acabo de registrar en Firebase y creé un nuevo proyecto. Firebase me pidió el dominio de mi aplicación y una clave de depuración SHA1. Ingresé estos detalles y generó un archivo google-services.json para agregar en la raíz del módulo de mi aplicación.

Mi pregunta es, ¿debería agregarse este archivo .json a un repositorio público (código abierto)? ¿Es algo que debería ser secreto, como una clave API?

hitraj47
fuente

Respuestas:

94

Un google-services.jsonarchivo es, del documento de Firebase :

Firebase administra todas las configuraciones y credenciales de su API a través de un solo archivo de configuración.
El archivo se nombra google-services.jsonen Android y GoogleService-Info.plisten iOS.

Parece tener sentido agregarlo a un .gitignorerepositorio público y no incluirlo.
Esto se discutió en el número 26 , con más detalles sobre lo que google-services.jsoncontiene.

Un proyecto como googlesamples/google-serviceslo tiene en su,.gitignore por ejemplo.
Aunque, como se ha comentado por stepheaw , este hilo hace mención

Para una biblioteca o muestra de código abierto, no incluimos el archivo JSON porque la intención es que los usuarios inserten el suyo propio para apuntar el código a su propio backend.
Es por eso que no verá archivos JSON en la mayoría de nuestros repositorios de base de fuego en GitHub.

Si la "URL de la base de datos, la clave de la API de Android y el depósito de almacenamiento" no son secretos para usted, entonces podría considerar agregar el archivo a su repositorio.
Como se menciona en " ¿Google-services.json está a salvo de los piratas informáticos? ", Esto no es tan simple.

baueric pregunta en los comentarios :

En ese post dice:

El archivo JSON no contiene información súper sensible (como una clave de API de servidor)

Pero google-services.jsontiene una entrada llamada api_key.
¿Es una clave de API diferente a " server api key"?

Willie Chalmers III señala " ¿Google-services.json está a salvo de los piratas informáticos? " Y agrega:

Sí, esa clave de API no es una clave de API de servidor que nunca debería ser pública, por lo que está bien si google-services.jsonotros pueden verla .

En cualquier caso, aún debe restringir cómo se puede usar la clave API de su cliente en la consola de Google Cloud.

VonC
fuente
11
Esto no es realmente correcto; un ingeniero de Firebase dijo que está bien verificar el control de fuente. La respuesta de @Yaron se mantiene.
Willie Chalmers III
2
@WillieChalmersIII Está bien. He modificado la respuesta en consecuencia.
VonC
@WillieChalmersIII En esa publicación, dice "El archivo JSON no contiene ninguna información súper sensible (como una clave de API del servidor)", pero google-services.jsontiene una entrada llamada api_key. ¿Es una clave de API diferente a una "clave de API de servidor"?
baueric
1
@baueric Vea esta respuesta para obtener más información. Sí, esa clave de API no es una clave de API de servidor que nunca debería ser pública, por lo que está bien si google-services.jsonotros pueden verla . En cualquier caso, aún debe restringir cómo se puede usar la clave API de su cliente en la consola de Google Cloud.
Willie Chalmers III
36

A partir de esta discusión, parece que puede agregarlo a un repositorio público. Su contenido termina en el APK de todos modos y probablemente sea fácil de extraer.

Yaron
fuente
1
Estoy de acuerdo y estoy trabajando en este problema ahora mismo. ¿Hay alguna forma de cifrar las claves en ese archivo de alguien que descompila el APK?
stepheaw
13
Si bien es definitivamente cierto que las claves de API se pueden extraer fácilmente de un apk, la pregunta era si google-services.jsondebería comprometerse con el control de fuente en un repositorio público de código abierto . Y en la gran mayoría de los casos, la respuesta es definitivamente NO , a menos que el propietario del repositorio quiera que todo el mundo use la cuota de API de su cuenta de Google de forma predeterminada. La respuesta de @ VonC se mantiene.
friederbluemle
2
hitraj47 preguntó acerca de agregarlo a un repositorio público . Esa discusión no menciona los repositorios públicos y parece que están discutiendo un repositorio privado.
Eugene