web-dev-qa-db-ja.com

com.google.Android.gms.common.api.ApiException:17:API:Drive.API_CONNECTIONLESSはこのデバイスでは使用できません

これがその話です。 3年ほど前にGoogleドライブAndroid SDK(8.1.0)をアプリ( AnyCopy )に統合しました。そして、チュートリアルに従って、資格情報とAPIキー。すべてが正常に機能しました。データを問題なくバックアップおよび復元できました。今日でも、Google Playからダウンロードすれば問題なく動作します。

最近、AnyCopyをリファクタリングして、最新のGoogleドライブAndroid SDK(Google Play Serviceバージョン番号12.0.1))をアプリに統合しようとしていて、メッセージで奇妙なエラーが発生しています

Java.util.concurrent.ExecutionException:com.google.Android.gms.common.api.ApiException:17:API:Drive.API_CONNECTIONLESSはこのデバイスでは使用できません。 com.google.Android.gms.tasks.Tasks.zzc(Unknown Source)でcom.google.Android.gms.tasks.Tasks.await(Unknown Source)で

ただし、別の署名鍵を使用してGoogleコンソールで新しい認証情報を作成すると、そして問題は解決されました。この問題は、資格情報の構成に起因していることがわかりました。ただし、GoogleドライブSDKの下位互換性バグの可能性があるため、解決方法を理解できませんでした。他の誰かがこの問題に遭遇したことがありますか?どんな提案でも彼は高く​​評価します。

13
Tony Thompson

同じエラーが発生しました。新しいプロジェクトを作成し、Google APIの認証情報を取得しましたが、Google Drive APIを有効にするのを忘れました。ダッシュボードに移動し、GoogleドライブAPIを有効にするとうまくいきました。お役に立てば幸いです。

2
KoM

使用している新しいAPIには、古いバージョンのインスタンスとフォルダーがまだあります。 Androidからプロジェクトと外部ライブラリに切り替えることで確認できます。そのAPIの古いバージョンが存在する場合は、リフレクターを試し、プロジェクトをクリーンアップして再構築してください。確かに後方互換性の問題です。

0
Jay Patel

私の場合に起こったことは、 DriveClient オブジェクトがサポートしているスコープとは異なる承認スコープを設定していたことで、drives.fileのみでしたdrive.appfolderこちらをご覧ください

注:GoogleドライブAndroid APIは現在、drive.fileおよびdrive.appfolder承認スコープのみをサポートしています。アプリケーションで追加の権限が必要な場合、またはドライブでまだ利用できない機能Android API、Google APIを使用する必要がありますJavaクライアント。

私の場合、ドライブへのフルアクセスを使用しようとしましたが、エラーは実際には接続の種類に関係していませんでした。 CommonStatusCodesクラス を調べて見つけました。

それを解決するために、私は他のすべてのスコープを削除し、drives.fileだけを残しました。 :Dでは、アクセスを取り消してユーザーをアプリからログアウトし、再ログインして再度Googleドライブへのアクセスをリクエストする必要がある場合とそうでない場合があります。

Firebaseを使用している場合、コードは次のようになります。

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

ただし、ストレート GoogleSignInClient のみを使用している場合は、次のようになります。

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

filesappfolderへのアクセス以上のものが必要な場合は、 DriveClientクラスを使用でき、そのドキュメントによれば、Google APIを使用した接続と承認Java =クライアント

本当にお役に立てば幸いです。残念ながら、気付くまで数時間失ってしまいました。

よろしくお願いいたします。

0
Denis Raison