web-dev-qa-db-ja.com

GoogleCredentialからアクセストークンを取得するにはどうすればよいですか?

GooglePlayを使用するためのアクセストークンを取得しようとしていますAndroid Developer API、そしてこれまでのところ Google API Java Clientドキュメントの例

_HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
JsonFactory JSON_FACTORY = new JacksonFactory();

GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(HTTP_TRANSPORT)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId("...gserviceaccount.com")
    .setServiceAccountScopes("https://www.googleapis.com/auth/androidpublisher")
    .setServiceAccountPrivateKeyFromP12File(keyFile)
    .build();
_

しかし、この資格情報からアクセストークンを取得するにはどうすればよいですか? credential.getAccessToken()nullを返します。私は何か間違ったことをしているのですか、それともいくつかのステップを逃していますか?

21
Kalina

とった。 credential.getAccessToken()の前にcredential.refreshToken()を呼び出す必要があります。ドキュメントのどこにもこれは書かれていませんが、それがそれをしているのです。

credential.refreshToken();
accessToken = credential.getAccessToken();
52
Kalina

ServiceAccountCredentials.fromStream()を使用して資格情報オブジェクトを作成する場合は、createScoped()メソッドも呼び出す必要がある場合があります。

    FileInputStream fileInputStream = new FileInputStream(KEY_FILE_PATH);
    GoogleCredentials credentials = ServiceAccountCredentials.fromStream(fileInputStream);
    credentials = credentials.createScoped(SCOPES);
    AccessToken accessToken = credentials.refreshAccessToken();

そうしないと、エラーが発生します

Java.io.IOException:スコープがサービスアカウント用に構成されていません。スコープは、createScopedを呼び出すか、スコープをコンストラクターに渡すことによって指定する必要があります。

2
lordofmax