ここで説明されているように、通常の 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 つのドライブ アカウントが必要ですが、サービス アカウント (指定されたクライアント) ではなく、通常のアカウントが必要です。
- AccountManager またはその他の認証システムに基づいています。同じ理由で受け入れられません。
- は、Google API の悪質さに恐怖のあまり手を挙げます。要求を昔ながらの方法で行うことを提案します。
ちなみに、クライアント シークレットが設定されていない場合はNullPointerException
、Preconditions.class
. これについてはあまり教えてくれません。また、GoogleCredential をサブクラス化して直接作成しようとしましたが、 を使用するように指示されましたGoogleCredential.Builder
。これが、ここにいる理由です。
このクライアント シークレットの問題を回避するにはどうすればよいですか?