Используйте 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 |
В этом руководстве объясняется, как выполнить следующие задачи:
- Настройте доступ к API Google Cloud и аутентификацию.
- Проверьте, зарегистрированы ли имя пакета приложения и пара отпечатков SHA-256 открытого сертификата в программе проверки разработчиков Android проверенным разработчиком, используя либо предоставленный отпечаток SHA-256 открытого сертификата, либо другой отпечаток SHA-256 открытого сертификата.
- Обрабатывайте состояния регистрации 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.
- Если у вас его еще нет, создайте учетную запись Google Cloud .
- Откройте консоль Google Cloud .
- Создайте проект в Google Cloud .
Включите API в своем проекте.
- В консоли Google Cloud перейдите в раздел API и сервисы > Библиотека .
- Выберите свой проект из выпадающего меню.
- Найдите API для определения статуса идентификатора разработчика Android .
- Нажмите «Включить» .
Аутентификация
API поддерживает учетные данные в виде ключа API. Чтобы получить ключ API:
- В консоли Google Cloud перейдите в раздел API и сервисы > Учетные данные .
- Нажмите «+ Создать учетные данные» и выберите «Ключ API» .
- Настройте ключ и скопируйте его. Используйте этот ключ в заголовках запроса.
Проверить статус регистрации приложения
Вы можете запросить ресурс 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.
- Перейдите на страницу API и сервисы > Панель управления .
- Выберите API статуса идентификатора разработчика Android.
- Нажмите вкладку «Квоты» .
Эта панель мониторинга предоставляет подробную разбивку объема ваших запросов за определенный период времени.