Comment obtenir les crédits Google au sein d'une appli Android ?

Le problème exposé dans ce sujet a été résolu.

Salut tout le monde,

Je travaille sur une appli Android qui doit communiquer avec une base de données Firestore. Pour ce faire, il faut que je m’authentifie en fournissant des crédits Google : il s’agit d’instancier la classe GoogleCredentials.

La façon de faire la plus simple, c’est d’exécuter le programme sur une machine de Google (en souscrivant au service Google Cloud Compute), mais bien entendu ce n’est absolument pas ce que je veux puisque dans mon cas je réalise une appli Android ! M’enfin, dans ce cas précis, je me contenterais juste d’écrire cette ligne et ça devrait marcher : GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();.

Dans mon cas, je ne peux donc pas faire appel à la ligne précédente. D’autres façons de récupérer un GoogleCredentials existent :

  1. oAuth2, sauf que cette techno doit être utilisée pour connecter les utilisateurs de mon appli aux services de Google. Or moi, je veux connecter seulement mon appli à seulement Firestore.

  2. Server to server / Service to Service : c’est la techno que j’essaie d’utiliser. Il s’agit de créer un compte de service, ce que j’ai fait, à l’issue duquel on télécharger un fichier JSON contenant les crédits Google. Du coup je l’ai fait, je l’ai déplacé dans un répertoire de mon appli, et j’essaie actuellement de l’utiliser pour instancier GoogleCredentials.

Questions

  1. De toutes les technos possibles pour récupérer un GoogleCredentials, aucune ne me semble permettre de simplement connecter mon appli Android à Firestore. La "Server to Server / Service to Service" me paraît la plus adaptée, MAIS a) mon appli n’est pas un serveur évidemment, donc déjà c’est chelou et b) le fichier JSON contenant les crédits Google étant stocké dans un répertoire de mon appli, il sera disponible dans l’APK téléchargé par mes utilisateurs : n’est-ce pas dangereux pour la sécurité de ma base de données ??? :waw:

  2. J’ai placé mon fichier JSON dans le répertoire res. GoogleCredentials comporte la méthode suivante : GoogleCredentials credentials = GoogleCredentials.fromStream(FileStream);. Comment instancier un FileStream pointant vers mon fichier JSON ? J’ai cherché et il se trouve que la méthode Uri.parse("android.resource://com.your.package/raw/filename"); pourrait être un début de solution. Cependant j’ai aussi trouvé qu’il n’était pas possible de récupérer le chemin vers un fichier dans res sur le smartphone de l’utilisateur, mais seulement dans la machine de développement…

Merci d’avance pour votre aide.

Salut,

Il ne faut pas que ton appli Andrdoid se connecte directement à la base de données. A la place, tu dois développer une API (une appli Web dans le cas qui nous intéresse ici) hébergée sur un serveur quelconque et c’est cette API qui se connectera à la base de données. Ton appli Android, elle, effectuera des appels à ton API qui expose des services permettant d’utiliser les données et suivre les processus métiers que tu souhaites développer.

+0 -0

Salut,

Il ne faut pas que ton appli Andrdoid se connecte directement à la base de données. A la place, tu dois développer une API (une appli Web dans le cas qui nous intéresse ici) hébergée sur un serveur quelconque et c’est cette API qui se connectera à la base de données. Ton appli Android, elle, effectuera des appels à ton API qui expose des services permettant d’utiliser les données et suivre les processus métiers que tu souhaites développer.

Fumble

Sérieux?

Mais faut que je trouve un serveur où mettre cette API ?

Et puis comment l’appli communiquerait avec l’api ? En rest ?

Si tu veux rester chez Google, regarde Google App Engine. Sinon, selon le langage que tu souhaites utiliser, un simple hébergement Web ou un VPS chez OVH/Online/Gandi ou autre fera l’affaire. A voir selon ton budget. Sachant que pendant la phase de développement, tout peut se faire en local sur ton PC.

Ça communiquera en HTTP. Et si possible HTTPS avec un certificat histoire de chiffrer les communications entre ton appli et le serveur. Et oui, utiliser l’architecture REST est une bonne idée.

+0 -0

App engine semble être payant. Une solution gratuite pendant 1 an existe mais je n’en veux pas.

J’ai déjà un hébergement Web chez ovh. Du coup ce serait possible de communiquer avec firestore.

Par contre ce que je ne comprends pas, c’est pourquoi est-ce que l’appli ne peut pas communiquer directement avec firestore ? C’est la première fois que je vois ça. Jusque-là quand un client avait besoin de communiquer avec 1 base de données, il le faisait sans intermédiaire. Là tu me dis littéralement qu’il faut un intermédiaire : l’api rest hébergée chez app engine ou en l’occurrence chez mon hébergement Web ovh

Re Fumble !

Finalement je confirme ce que je disais : il est tout à fait possible de faire communiquer l’appli Android avec Firestore. Tout se base sur le JSON également, qui est placé dans l’appli. C’est une méthode recommandée par Google. Je suppose donc qu’il n’y a aucun risque.

Sources :

  1. https://www.youtube.com/watch?v=cNPCgJW8c-E

  2. Aller dans la console Firebase (https://console.firebase.google.com/), choisir le projet, cliquer sur "Ajouter une application" et choisir "Android", suivre les 2 ou 3 petites instructions : à l’issue desquelles Google fournit un JSON "google-services.json" qu’on met à la racine de l’appli.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte