2 votes

Comment accéder au fichier du dossier appdata de Google Drive avec Flutter ?

J'ai ce très vieux projet Android que je n'ai pas touché depuis un bon moment. Il stocke certaines données utilisateur dans le dossier appdata de Google Drive de l'utilisateur. Maintenant, je mets à jour l'application vers une version Flutter et depuis que l'API Google Drive est dépréciée, il n'y a pas de plugin pour Flutter, je crois que je dois utiliser googleapi pour cela maintenant. Mais je ne trouve pas grand-chose concernant mon problème pour Flutter. Je suis arrivé au point où je me suis connecté avec google_sign_in : ^4.0.7

GoogleSignIn _googleSignIn = GoogleSignIn(
    scopes: [
      'email',
      'https://www.googleapis.com/auth/drive.appdata',
      'https://www.googleapis.com/auth/drive.file',
    ],
  );
  try {
    GoogleSignInAccount account = await _googleSignIn.signIn();
  } catch (error) {
    print(error);
  }

Ça marche bien, mais je suis resté coincé là. Comment puis-je aller de là et lire un fichier dans le dossier appdata sur le Google Drive de l'utilisateur ?

EDIT1 : Cette réponse m'a aidé, j'ai réussi à obtenir le httpClient mais je ne sais toujours pas comment obtenir le dossier appdata et ses fichiers. Comment utiliser l'API Google dans flutter ?

Il semble que googleapi ne supporte pas l'appfolder puisque Google pourrait le déprécier dans le futur (il semble qu'ils l'aient déjà fait) afin de nous forcer à payer pour le stockage en utilisant firebase. Ok, très bien, mais comment puis-je le migrer si je ne peux pas accéder au dossier via googleapi ? Si je réinitialise mon application maintenant et que mes utilisateurs perdent toutes leurs données, je vais perdre les quelques utilisateurs que j'ai...

5voto

surrz Points 108

La méthode suivante fonctionne pour moi, (en utilisant l'option http paquet pour get y post )

Jeton d'authentification

Vous pouvez récupérer le jeton d'authentification à partir du compte retourné par signIn .

Future<String> _getAuthToken() async {
  final account = await sign_in_options.signIn();
  if (account == null) {
    return null;
  }
  final authentication = await account.authentication;
  return authentication.accessToken;
}

Recherche

Pour rechercher des fichiers dans le répertoire AppData, vous devez ajouter l'option spaces queryParameters et lui attribuer la valeur appDataFolder . La documentation est un peu trompeuse sur ce point.

final Map<String, String> queryParameters = {
  'spaces': 'appDataFolder',
  // more query parameters
};
final headers = { 'Authorization': 'Bearer $authToken' };
final uri = Uri.https('www.googleapis.com', '/drive/v3/files', queryParameters);
final response = await get(uri, headers: headers);

Télécharger

Pour télécharger un fichier, vous devez définir le paramètre parents a appDataFolder du corps de la requête initiale de téléchargement. Pour télécharger le fichier, vous n'avez besoin que de l'identifiant de fichier (fileId).

final headers = { 'Authorization': 'Bearer $authToken' };
final initialQueryParameters = { 'uploadType': 'resumable' };
final Map<String, dynamic> metaData = { 
  'name': fileName,
  'parents': ['appDataFolder ']
};
final initiateUri = Uri.https('www.googleapis.com', '/upload/drive/v3/files', initialQueryParameters);
final initiateResponse = await post(initiateUri, headers: headers, body: json.encode(metaData));
final location = initiateResponse.headers['location'];

Télécharger

Pour télécharger le fichier, il vous suffit de connaître l'adresse suivante fileId Si vous ne le connaissez pas, vous devez utiliser l'API de recherche pour le récupérer (voir ci-dessus).

final headers = { 'Authorization': 'Bearer $authToken' };
final url = 'https://www.googleapis.com/drive/v3/files/$fileId?alt=media';
final response = await get(url, headers: headers);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X