1

ここで説明されているように、通常の Google ドライブ アカウントをアプリケーション所有のアカウントとして使用する Android アプリを非常に簡潔に作成しています。

通常の Google アカウントをアプリケーション所有のアカウントとして使用する

残念ながら、ドライブで何かを行う方法のすべての説明は、クライアント シークレットを参照しており、次のように説明されています。

Google API コンソール - クライアント シークレットがありません

インストールされたアプリには、もはや存在しません。実際の Web ページを作成することで、信じられないほどの苦労で OAuth2 トークンを取得することができました。これから、最初のリンクで説明されているように、アクセス トークンとリフレッシュ トークンを取得しました。これらでオブジェクトを作成したいのですが、GoogleCredential私が見る限り、これは次のように機能するはずです:

    HttpTransport httpTransport = new NetHttpTransport();
    JsonFactory jsonFactory = new JacksonFactory();
    GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(jsonFactory)
    .setClientSecrets(
            new GoogleClientSecrets().setInstalled(
                    new Details()
                    .setAuthUri(AUTH_URI)
                    .setClientId(CLIENT_ID)
                    //.setClientSecret("but I haven't got one!")
                    .setRedirectUris(REDIRECT_URIS)
            )
    )
    .build()
    .setAccessToken(ACCESS_TOKEN) //defined above
    .setRefreshToken(REFRESH_TOKEN); //defined above
    Drive.Builder driveBuilder = new Drive.Builder(httpTransport, jsonFactory, null);
    driveBuilder.setHttpRequestInitializer(credential);

setClientSecret(...)インストールされたアプリケーションのクライアント シークレットを持っていないため、コメント アウトしたとおりに呼び出しを挿入しました。

基本的に、私はこの資格証明を作成できません。私が見た資格証明の作成に関するすべての提案は、次の 3 つのカテゴリのいずれかに分類されます。

  1. ユーザーが自分のアカウントにログインできるように設計されています。受け付けできません; すべてのユーザーに 1 つのドライブ アカウントが必要ですが、サービス アカウント (指定されたクライアント) ではなく、通常のアカウントが必要です。
  2. AccountManager またはその他の認証システムに基づいています。同じ理由で受け入れられません。
  3. は、Google API の悪質さに恐怖のあまり手を挙げます。要求を昔ながらの方法で行うことを提案します。

ちなみに、クライアント シークレットが設定されていない場合はNullPointerExceptionPreconditions.class. これについてはあまり教えてくれません。また、GoogleCredential をサブクラス化して直接作成しようとしましたが、 を使用するように指示されましたGoogleCredential.Builder。これが、ここにいる理由です。

このクライアント シークレットの問題を回避するにはどうすればよいですか?

4

2 に答える 2

0

受け入れられた回答の助けを借りて、編集で独自の回答を提供する質問へのリンクを次に示します。

Android アプリ内で Google ドライブ資格情報を設定する方法

要するに、主なことは、開発者 API コンソールから単純な API アクセス キーを取得する必要があるということです。見つからない場合は、おそらくドライブ API アクセスを設定する必要があります。

于 2014-03-15T22:29:10.150 に答える
0

答えは、行のコメントを外すことのようです。クライアント シークレット フィールドに何かGoogleCredential.Builderが含まれている限り、 はクレデンシャル オブジェクトの作成に成功します。しかし、それは実際にドライブを取得しますか? くっつき回る。

編集: いいえ、「invalid_client」エラーが発生しています。これは非常にイライラします。

于 2013-02-22T17:17:38.737 に答える