Проверьте статус регистрации приложения с помощью API статуса идентификатора разработчика Android.

Используйте API статуса разработчика Android, чтобы проверить, зарегистрировано ли имя пакета приложения Android на имя проверенного разработчика. Если вы разрабатываете инструменты разработки программного обеспечения, IDE или автоматизированные рабочие процессы CI/CD, вы можете интегрировать этот API между серверами для выполнения следующих задач:

  • Проверьте, зарегистрировано ли имя пакета приложения на имя проверенного разработчика.
  • Проверьте, совпадает ли отпечаток SHA-256 сертификата подписи приложения с учетными данными, хранящимися в файле для зарегистрированного имени пакета.
  • В интерфейсе вашего инструмента предложите разработчикам зарегистрировать неопознанные приложения в программе проверки разработчиков Android.

Этот API разработан для поддержки различных рабочих процессов разработчиков:

Вариант использования Описание конечная точка API
Соответствие названия пакета требованиям Проверка, зарегистрировано ли уже имя пакета. Возвращает REGISTERED если имя пакета связано с каким-либо проверенным разработчиком, в противном случае NOT_REGISTERED . CheckPackageRegistrationStatus
Приложение зарегистрировано. Проверка регистрации конкретной пары «имя пакета и отпечаток сертификата». Возвращает REGISTERED если пара «имя пакета и отпечаток сертификата» зарегистрирована, NOT_REGISTERED если пара «имя пакета и отпечаток сертификата» не зарегистрирована, или REGISTERED_WITH_ANOTHER_CERTIFICATE_FINGERPRINT если имя пакета зарегистрировано с другим отпечатком сертификата. CheckPackageRegistrationStatus

В этом руководстве объясняется, как выполнить следующие задачи:

  1. Настройте доступ к API Google Cloud и аутентификацию.
  2. Проверьте, зарегистрированы ли имя пакета приложения и пара отпечатков SHA-256 открытого сертификата в программе проверки разработчиков Android проверенным разработчиком, используя либо предоставленный отпечаток SHA-256 открытого сертификата, либо другой отпечаток SHA-256 открытого сертификата.
  3. Обрабатывайте состояния регистрации API в рамках рабочего процесса вашей IDE или инструментов разработчика.

Предварительные требования

Этот документ предназначен для разработчиков приложений для Android или разработчиков инструментов разработки программного обеспечения. Прежде чем начать, вам необходимо:

  • Административный доступ к проекту Google Cloud.
  • Базовое понимание RESTful API, JSON и отпечатков сертификатов SHA-256.

Вам также следует ознакомиться со следующими терминами:

Срок Определение
проверка разработчика Android Проверка разработчиков Android — это новое требование, призванное связать реальные организации (частных лиц и компании) с их приложениями для Android. Android потребует, чтобы все приложения были зарегистрированы проверенными разработчиками, чтобы пользователи могли устанавливать их на сертифицированные устройства Android.
Отпечаток пальца сертификата Хэш SHA-256 открытого сертификата, использованного для подписи приложения.
Штат регистрации Статус, возвращаемый API для имени пакета приложения или пары «имя пакета приложения и отпечаток SHA-256 открытого сертификата». Это состояние определяет действие, которое необходимо выполнить (например, REGISTERED , NOT_REGISTERED ).

конечная точка сервиса

Конечная точка сервиса — это базовый URL-адрес, указывающий сетевой адрес API-сервиса. Данный сервис имеет следующую конечную точку, и все URI являются относительными к этой конечной точке сервиса:

https://androiddeveloperidstatus.googleapis.com

Включить API

Для использования API статуса идентификатора разработчика Android необходимо выполнить шаги по настройке, чтобы создать проект и включить API.

Создайте проект в Google Cloud.

  1. Если у вас его еще нет, создайте учетную запись Google Cloud .
  2. Откройте консоль Google Cloud .
  3. Создайте проект в Google Cloud .

Включите API в своем проекте.

  1. В консоли Google Cloud перейдите в раздел API и сервисы > Библиотека .
  2. Выберите свой проект из выпадающего меню.
  3. Найдите API для определения статуса идентификатора разработчика Android .
  4. Нажмите «Включить» .

Аутентификация

API поддерживает учетные данные в виде ключа API. Чтобы получить ключ API:

  1. В консоли Google Cloud перейдите в раздел API и сервисы > Учетные данные .
  2. Нажмите «+ Создать учетные данные» и выберите «Ключ API» .
  3. Настройте ключ и скопируйте его. Используйте этот ключ в заголовках запроса.

Проверить статус регистрации приложения

Вы можете запросить ресурс PackageRegistrationStatus , чтобы проверить только имя пакета, или проверить имя пакета в сочетании с конкретным отпечатком сертификата.

Проверьте название пакета

Чтобы проверить, зарегистрировано ли имя пакета приложения каким-либо проверенным разработчиком, выполните аутентифицированный GET запрос, содержащий имя пакета приложения Android (например, com.example.app ), к конечной точке packageRegistrationStatus:check без необязательных параметров:

Запрос:

curl -X GET "https://androiddeveloperidstatus.googleapis.com/v1/packages/com.example.app/packageRegistrationStatus:check" \
  -H "X-Goog-Api-Key: [key]"

Результаты

Ответ (зарегистрированный):

Если имя пакета зарегистрировано, вы получите следующее тело HTTP-ответа с кодом HTTP-ответа 200 :

{
  "name": "packages/com.example.app/packageRegistrationStatus",
  "state": "REGISTERED"
}

Рекомендуемое действие: сообщить разработчику, что имя пакета уже зарегистрировано.

Ответ (не зарегистрирован):

Если имя пакета не зарегистрировано, вы получите следующее тело HTTP-ответа с кодом 200 :

{
  "name": "packages/com.example.app/packageRegistrationStatus",
  "state": "NOT_REGISTERED"
}

Проверьте пары «имя пакета» и «отпечаток сертификата».

Чтобы проверить, зарегистрировано ли имя пакета приложения с определенным отпечатком SHA-256 открытого сертификата, передайте параметр запроса certificateFingerprint :

Запрос:

curl -X GET "https://androiddeveloperidstatus.googleapis.com/v1/packages/com.example.app/packageRegistrationStatus:check?certificateFingerprint=d6ac89ed1d0a805aad4b087d06d5f41645b814480b133fbc867ef7498d069e06" \
  -H "X-Goog-Api-Key: [key]"

Результаты

Ответ (зарегистрирован с соответствующим отпечатком сертификата):

Если имя пакета зарегистрировано с использованием предоставленного отпечатка SHA-256 открытого сертификата, вы получите следующий HTTP-ответ с кодом 200 :

{
  "name": "packages/com.example.app/packageRegistrationStatus",
  "state": "REGISTERED"
}

Ответ (зарегистрирован с другим отпечатком сертификата):

Если имя пакета зарегистрировано с использованием другого отпечатка SHA-256 сертификата, отличного от предоставленного, вы получите следующее тело HTTP-ответа с кодом ответа 200 :

{
  "name": "packages/com.example.app/packageRegistrationStatus",
  "state": "REGISTERED_WITH_ANOTHER_CERTIFICATE_FINGERPRINT"
}

Ответ (не зарегистрирован):

Если имя пакета не зарегистрировано с использованием предоставленного отпечатка SHA-256 открытого сертификата, вы получите следующий HTTP-ответ с кодом 200 :

{
  "name": "packages/com.example.app/packageRegistrationStatus",
  "state": "NOT_REGISTERED"
}

Пример реализации на Java.

Следующий Java-класс демонстрирует, как вызывать API, используя стандартный класс HttpClient из Java 11.

import java.io.IOException;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;

public class DeveloperIdStatusClient {

  private static final String API_ENDPOINT = "https://androiddeveloperidstatus.googleapis.com";

  public static void main(String[] args) {
    String apiKey = "YOUR_API_KEY";
    String packageName = "com.example.app";
    String certificateFingerprint = "d6ac89ed1d0a805aad4b087d06d5f41645b814480b133fbc867ef7498d069e06";

    try {
      String response = checkPackageRegistrationStatus(apiKey, packageName, certificateFingerprint);
      System.out.println("Response: " + response);
    } catch (IOException | InterruptedException e) {
      e.printStackTrace();
    }
  }

  /**
   *   Checks the registration status of an Android package.
   *
   *   @param apiKey The Google API key for authentication.
   *   @param packageName The fully-qualified Android package name (for example, "com.example.app").
   *   @param certificateFingerprint Optional SHA-256 certificate fingerprint. Pass null or empty to omit.
   *   @return The JSON response string from the API.
   */
  public static String checkPackageRegistrationStatus(
      String apiKey, String packageName, String certificateFingerprint)
      throws IOException, InterruptedException {

    // 1. Build the URL path (accepts dots directly)
    // Format: /v1/packages/{package}/packageRegistrationStatus:check
    String path = String.format("/v1/packages/%s/packageRegistrationStatus:check", packageName);

    // 2. Build query parameters (only certificateFingerprint if provided)
    StringBuilder queryBuilder = new StringBuilder();
    if (certificateFingerprint != null && !certificateFingerprint.isEmpty()) {
      queryBuilder.append("certificateFingerprint=")
          .append(URLEncoder.encode(certificateFingerprint, StandardCharsets.UTF_8));
    }

    String fullUrl = API_ENDPOINT + path;
    if (queryBuilder.length() > 0) {
      fullUrl += "?" + queryBuilder.toString();
    }

    // 3. Create and send the HTTP GET request with API Key header
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create(fullUrl))
        .header("Accept", "application/json")
        .header("X-Goog-Api-Key", apiKey)
        .GET()
        .build();

    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

    if (response.statusCode() != 200) {
      throw new IOException("Unexpected response code: " + response.statusCode() + ", body: " + response.body());
    }

    return response.body();
  }
}

Разберитесь в состояниях регистрации и обработке ошибок.

При сбое API-запроса API статуса идентификатора разработчика Android возвращает стандартный JSON-объект ошибки Google Cloud в теле ответа. Этот объект обеспечивает согласованную структуру для понимания и обработки ошибки.

Пример сообщения об ошибке:

{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT"
  }
}

Объект ошибки содержит следующие ключевые поля:

  • code : Код состояния HTTP (например, 400 , 403 , 500 ).
  • message : Описание ошибки на английском языке, понятное разработчикам. Это сообщение нестабильно и может меняться, поэтому не стоит строить логику анализа на его основе.
  • status : Канонический код ошибки, который программно определяет тип ошибки (например, INVALID_ARGUMENT , PERMISSION_DENIED ). Ваша логика обработки ошибок должна строиться на основе этого стабильного идентификатора.

В таблице ниже перечислены наиболее распространенные ошибки, возвращаемые API, и рекомендуемый порядок действий.

HTTP-статус Канонический код ошибки ( status ) Смысл и общая причина Рекомендуемые действия Можно ли попробовать ещё раз?
400 Неверный запрос INVALID_ARGUMENT Запрос был составлен некорректно. Повторная попытка не требуется. Проверьте поле "Подробности" в ответе об ошибке, чтобы определить конкретное нарушение в этом поле. Исправьте полезную нагрузку запроса и отправьте его снова. Нет
401 Несанкционированный доступ UNAUTHENTICATED Токен доступа отсутствует, истек срок его действия или недействителен. Не повторяйте попытку сразу. Убедитесь, что используете правильный токен или ключ доступа. Нет
403 Запрещено PERMISSION_DENIED Вы авторизованы, но ваш проект не имеет разрешения на доступ к API. Наиболее распространенная причина — отсутствие включенного API в вашем проекте Google Cloud. Повторять попытку не нужно. Убедитесь, что вы используете правильный идентификатор проекта и что API включен. Нет
429 Слишком много запросов RESOURCE_EXHAUSTED Вы превысили квоту API для своего проекта. Прекратите отправку запросов и повторите попытку через некоторое время. Проверьте квоты вашего проекта в консоли Google Cloud. Да
Ошибка 500 (внутренняя ошибка сервера) INTERNAL На серверах Google произошла непредвиденная ошибка. Вероятно, это временная проблема. Повторите запрос, используя стратегию экспоненциальной задержки. Если ошибка сохраняется, обратитесь в службу поддержки. Да
Сервис 503 недоступен UNAVAILABLE Сервис временно недоступен. Повторите запрос, используя стратегию экспоненциальной задержки. Да

Ограничения квот

Для обеспечения надежности обслуживания в каждом проекте устанавливаются квоты на использование ресурсов.

метод API Ограничение по умолчанию (для каждого проекта) Примечания
CheckPackageRegistrationStatus 1000 запросов в день Абоненты обязаны управлять внутренними ограничениями скорости для предотвращения злоупотреблений.

Отслеживайте свое использование

Вы можете отслеживать текущее использование API вашего проекта и видеть, насколько близки вы к пределам квоты, непосредственно в консоли Google Cloud.

  1. Перейдите на страницу API и сервисы > Панель управления .
  2. Выберите API статуса идентификатора разработчика Android.
  3. Нажмите вкладку «Квоты» .

Эта панель мониторинга предоставляет подробную разбивку объема ваших запросов за определенный период времени.