Получение установок домена для моего надстройки Google Документов

У нас есть надстройка Google-docs (построенная на скрипте Google Apps), для которой мы включили SDK Google Apps Marketplace, чтобы администраторы Google Apps могли установить нашу надстройку на уровне домена.

Мы заметили, что несколько доменов уже установили нашу надстройку, но я не могу найти способ получить информацию о том, какие домены установили нас. Это вообще возможно?

Я пробовал использовать API лицензии Marketplace https://developers.google.com/apps-marketplace/v2/reference/, но возникает ошибка 403 - Нет прав доступа к идентификатору приложения.

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "forbidden",
    "message": "Not authorized to access the application ID"
   }
  ],
  "code": 403,
  "message": "Not authorized to access the application ID"
 }
}

Я даже попытался создать учетную запись службы и получил доступ к API с помощью учетной записи службы, но получил ту же ошибку.

Любой ввод был бы потрясающим.

Вот мой код Java (технически Groovy) (ответ - это json, который я вставил выше):

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
import com.google.api.client.http.GenericUrl
import com.google.api.client.http.HttpRequest
import com.google.api.client.http.HttpRequestFactory
import com.google.api.client.http.HttpTransport
import com.google.api.client.json.JsonFactory
import com.google.api.client.json.jackson2.JacksonFactory
import org.springframework.security.access.annotation.Secured

class DataController {

    /**
     * Be sure to specify the name of your application. If the application name is {@code null} or
     * blank, the application will log a warning. Suggested format is "MyCompany-ProductName/1.0".
     */
    private static final String APPLICATION_NAME = "My app name";

    private static final String APPLICATION_ID = "12 digit project number";

    /** E-mail address of the service account. */
    private static final String SERVICE_ACCOUNT_EMAIL = "[email protected]";

    /** Global instance of the HTTP transport. */
    private static HttpTransport httpTransport;

    /** Global instance of the JSON factory. */
    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();




    def getLicensedInfo() {

        try {
            try {
                httpTransport = GoogleNetHttpTransport.newTrustedTransport();



                GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                        .setJsonFactory(JSON_FACTORY)
                        .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
                        .setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/appsmarketplace.license"))
                        .setServiceAccountPrivateKeyFromP12File(new File("a/valid/path/to/key.p12"))
                        .build();


                credential.refreshToken();
                String token = credential.getAccessToken();

                HttpRequestFactory requestFactory = httpTransport.createRequestFactory(credential);


                GenericUrl url = new GenericUrl("https://www.googleapis.com/appsmarket/v2/licenseNotification/"+APPLICATION_ID);

                HttpRequest request = requestFactory.buildGetRequest(url);

                com.google.api.client.http.HttpResponse response = request.execute();

                log.debug(response.parseAsString());


                return;
            } catch (IOException e) {
                System.err.println(e.getMessage());
            }
        } catch (Throwable t) {
            t.printStackTrace();
        }

    }



}

person The Fat Oracle    schedule 09.03.2016    source источник


Ответы (1)


При отправке запроса к API лицензий GAM вам необходимо использовать тот же проект Google Developers Console, который вы использовали для своего листинга. В случае надстройки это консольный проект, связанный со скриптом.

person Eric Koleda    schedule 31.03.2016
comment
Спасибо, Эрик. Я трижды проверил детали проекта, которые использую, но все равно где-то ошибаюсь. Сообщите мне, если следующее кажется правильным: * Идентификатор приложения - это 12-значный номер проекта консольного проекта, связанного со сценарием. * Идентификатором учетной записи службы должен быть адрес электронной почты учетной записи службы, связанный с тем же проектом консоли. Я создал учетную запись службы с включенным делегированием домена. Он имеет формат: [email protected] * Также используется файл закрытого ключа для этой учетной записи службы. - person The Fat Oracle; 31.03.2016
comment
Вам не нужно использовать учетную запись службы для доступа к этому API. Пробуем использовать обычный пользовательский поток OAuth2. - person Eric Koleda; 31.03.2016
comment
Привет, Эрик, это первое, что я попробовал с помощью ссылки «Попробовать» на справочной странице LicenseNotification.list. Получил 403 запрещенную ошибку. Снимок экрана: evernote.com/l/AAJuA7KEmyNGmLCbwuVdbpoWV4iU0, и в нем было несколько рекомендаций, и в этом случае возникла проблема, и в ней было несколько рекомендаций. использовать сервисный аккаунт - тоже не вышло. - person The Fat Oracle; 31.03.2016
comment
Ссылка "Попробовать", также известная как APIs Explorer, не будет работать, поскольку она использует другой проект консоли разработчика Google, нежели ваше приложение. - person Eric Koleda; 06.04.2016
comment
конечно есть :). Я попробую использовать обычный поток OAuth, используя свою учетную запись, и сообщу о результатах. Спасибо еще раз. - person The Fat Oracle; 09.04.2016
comment
Нет, согласно документации поле seatCount устарело: разработчики. google.com/apps-marketplace/v2/reference/ - person Eric Koleda; 15.04.2016
comment
Как эта информация недоступна в консоли GCP? - person Nth.gol; 17.02.2019