web-dev-qa-db-fra.com

com.google.Android.gms.common.api.ApiException: 17: API: Drive.API_CONNECTIONLESS n'est pas disponible sur cet appareil.

Voici l'histoire. J'avais intégré Google Drive Android SDK (8.1.0) à mon application ( AnyCopy ) il y a environ trois ans. Et j'ai suivi le tutoriel pour configurer correctement, y compris l'ajout d'informations d'identification et la clé API. Tout a bien fonctionné. Je pourrais sauvegarder et restaurer mes données sans aucun problème. Même aujourd'hui, cela fonctionne bien si je le télécharge depuis Google Play.

Récemment, j'ai essayé de refactoriser AnyCopy et d'intégrer le dernier SDK Google Drive Android (version 12.0.1 du service Google Play) dans mon application et de rencontrer une erreur étrange avec un message 

Java.util.concurrent.ExecutionException: com.google.Android.gms.common.api.ApiException: 17: API: Drive.API_CONNECTIONLESS n'est pas disponible sur ce périphérique . sur com.google.Android.gms.tasks.Tasks.zzc (Source inconnue) sur com.google.Android.gms.tasks.Tasks.await (Source inconnue)

Toutefois, si je crée une nouvelle information d'identification sur la console Google avec une clé de signature différente. Et le problème est résolu. Je me rends compte que le problème dérive de la configuration des informations d'identification. Cependant, je ne savais pas comment le résoudre car il pourrait s'agir d'un bogue de compatibilité ascendante du SDK Google Drive. Quelqu'un d'autre a déjà rencontré ce problème? Toute suggestion sera très appréciée.

12
Tony Thompson

J'ai eu la même erreur. J'ai créé un nouveau projet et obtenu les informations d'identification de l'API Google, mais j'ai oublié d'activer l'API Google Drive. Aller sur le tableau de bord et activer l'API Google Drive a fait l'affaire… .. J'espère que cela vous aidera.

2
KoM

La nouvelle API que vous utilisez possède toujours les instances et les dossiers de l'ancienne version. Vous pouvez simplement vérifier en passant d’Android à votre projet et à des bibliothèques externes. S'il y a présence de l'ancienne version de cette API, essayez de réfracteur, nettoyez le projet et reconstruisez-le. J'espère que cela vous convient. Sûrement un problème de compatibilité ascendante.

0
Jay Patel

Ce qui s’est passé dans mon cas, c’est que je définissais une étendue d’autorisation différente de celle que l’objet DriveClient pris en charge n’est que drives.file et drive.appfolder comme vous voyez ici :

Remarque: l'API Android de Google Drive ne prend actuellement en charge que le fichier drive.file et étendues d'autorisation drive.appfolder. Si votre application nécessite autorisations ou fonctionnalités supplémentaires non encore disponibles dans le lecteur Android, vous devez utiliser le client Java des API Google.

Dans mon cas, j'essayais d'utiliser l'accès complet au lecteur et l'erreur n'était pas vraiment liée au type de connexion. Je l'ai trouvé en regardant la classe CommonStatusCodes .

Pour résoudre ce problème, je viens de supprimer toutes les autres étendues et de ne laisser que le fichier drives.file . Vous devrez ou non: D, révoquer l'accès, déconnecter les utilisateurs de votre application et vous reconnecter. et demander à nouveau l'accès à leur lecteur google.

Si vous utilisez firebase, votre code ressemblera un peu à ça:

AuthUI.IdpConfig.GoogleBuilder()
                    .setScopes(Arrays.asList(Scopes.DRIVE_FILE))
                    .build()

Mais si vous utilisez uniquement le GoogleSignInClient cela ressemblerait à ça:

GoogleSignInOptions signInOptions =
            new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestScopes(Drive.SCOPE_FILE)
                    .build();
GoogleSignIn.getClient(this, signInOptions)

Si vous avez besoin de plus que de simples accès à files et appfolder, vous ne pourrez pas utiliser la classe DriveClient et, selon leur documentation, devrez Connexion et autorisation avec Google API Java Client.

J'espère vraiment que cela vous aidera, j'ai perdu quelques heures jusqu'à ce que je le remarque, malheureusement.

Merci,

0
Denis Raison