Vérifier l'état d'enregistrement d'une application avec l'API Android Developer ID Status

Utilisez l'API Android Developer Status pour vérifier si un nom de package d'application Android est enregistré auprès d'un développeur validé. Si vous créez des outils de développement logiciel, des IDE ou des workflows CI/CD automatisés, vous pouvez intégrer cette API de serveur à serveur pour effectuer les opérations suivantes :

  • Vérifier si un nom de package d'application est enregistré auprès d'un développeur validé
  • Vérifier si l'empreinte SHA-256 du certificat de signature d'une application correspond aux identifiants enregistrés pour le nom de package
  • Inviter les développeurs dans l'interface de votre outil à enregistrer les applications non reconnues dans le programme de validation des développeurs Android

Cette API est conçue pour prendre en charge différents workflows de développement :

Cas d'utilisation Description Point de terminaison de l'API
Éligibilité du nom de package Vérifier si un nom de package a déjà été enregistré. Renvoie REGISTERED si le nom de package est associé à un développeur validé, sinon NOT_REGISTERED. CheckPackageRegistrationStatus
Application enregistrée Vérifier si une paire spécifique de nom de package et d'empreinte du certificat est enregistrée. Renvoie REGISTERED si la paire de nom de package et d'empreinte du certificat est enregistrée, NOT_REGISTERED si elle ne l'est pas, ou REGISTERED_WITH_ANOTHER_CERTIFICATE_FINGERPRINT si le nom de package est enregistré avec une empreinte du certificat différente. CheckPackageRegistrationStatus

Ce guide explique comment effectuer les tâches suivantes :

  1. Configurer l'accès et l'authentification de l'API Google Cloud.
  2. Vérifier si la paire de nom de package et d'empreinte SHA-256 du certificat public d'une application a été enregistrée dans le programme de validation des développeurs Android par un développeur validé, avec l'empreinte SHA-256 du certificat public fournie ou une autre empreinte SHA-256 du certificat public.
  3. Gérer les états d'enregistrement de l'API dans votre IDE ou votre workflow d'outil de développement.

Prérequis

Ce document est destiné aux développeurs d'applications Android ou d'outils de développement logiciel. Avant de commencer, vous devez disposer des éléments suivants :

  • Accès administrateur à un projet Google Cloud.
  • Connaissances de base des API RESTful, de JSON et des empreintes de certificat SHA-256.

Vous devez également connaître les termes suivants :

Terme Définition
Validation des développeurs Android La validation des développeurs Android est une nouvelle exigence conçue pour associer des entités réelles (personnes physiques et organisations) à leurs applications Android. Android exigera que toutes les applications soient enregistrées par des développeurs validés pour que les utilisateurs puissent les installer sur des appareils Android certifiés.
Empreinte du certificat Hachage SHA-256 du certificat public utilisé pour signer l'application.
État d'enregistrement État renvoyé par l'API pour le nom de package d'une application ou pour la paire de nom de package et d'empreinte SHA-256 du certificat public d'une application. Cet état détermine l'action que vous devez effectuer (par exemple, REGISTERED, NOT_REGISTERED).

Point de terminaison de service

Un point de terminaison de service est une URL de base qui spécifie l'adresse réseau d'un service d'API. Ce service possède le point de terminaison de service suivant, et tous les URI sont relatifs à ce point de terminaison de service :

https://androiddeveloperidstatus.googleapis.com

Activer l'API

Pour utiliser l'API Android Developer ID Status, vous devez suivre les étapes de configuration pour créer un projet et activer l'API.

Créer un projet Google Cloud

  1. Créez un compte Google Cloud si vous n'en avez pas.
  2. Ouvrez la console Google Cloud.
  3. Créez un projet Google Cloud.

Activer l'API dans votre projet

  1. Dans la console Google Cloud, accédez à API et services > Bibliothèque.
  2. Sélectionnez votre projet dans le menu déroulant.
  3. Recherchez API Android Developer ID Status.
  4. Cliquez sur Activer.

Authentifier

L'API est compatible avec les identifiants de clé API. Pour obtenir une clé API :

  1. Dans la console Google Cloud, accédez à API et services > Identifiants.
  2. Cliquez sur + Créer des identifiants , puis sélectionnez Clé API.
  3. Configurez la clé et copiez-la. Utilisez cette clé dans les en-têtes de vos requêtes.

Vérifier l'état d'enregistrement de l'application

Vous pouvez interroger la ressource PackageRegistrationStatus pour vérifier un nom de package seul ou vérifier un nom de package associé à une empreinte du certificat spécifique.

Vérifier un nom de package

Pour vérifier si un nom de package d'application est enregistré par un développeur validé, envoyez une requête GET authentifiée contenant le nom de package de l'application Android (par exemple, com.example.app) au point de terminaison packageRegistrationStatus:check sans paramètres facultatifs :

Requête :

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

Résultats

Réponse (enregistrée) :

Si le nom de package est enregistré, vous recevrez le corps de réponse HTTP suivant avec le code de réponse HTTP 200 :

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

Action recommandée : Informez le développeur que le nom de package est déjà enregistré.

Réponse (non enregistrée) :

Si le nom de package n'est pas enregistré, vous recevrez le corps de réponse HTTP suivant avec le code de réponse HTTP 200 :

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

Vérifier les paires de nom de package et d'empreinte du certificat

Pour vérifier si un nom de package d'application est enregistré avec une empreinte SHA-256 de certificat public spécifique, transmettez le paramètre de requête certificateFingerprint :

Requête :

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

Résultats

Réponse (enregistrée avec l'empreinte du certificat correspondante) :

Si le nom de package est enregistré avec l'empreinte SHA-256 du certificat public fournie, vous recevrez le corps de réponse HTTP suivant avec le code de réponse HTTP 200 :

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

Réponse (enregistrée avec une empreinte de certificat différente) :

Si le nom de package est enregistré avec une empreinte SHA-256 de certificat différente de celle fournie, vous recevrez le corps de réponse HTTP suivant avec le code de réponse HTTP 200 :

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

Réponse (non enregistrée) :

Si le nom de package n'est pas enregistré avec l'empreinte SHA-256 du certificat public fournie, vous recevrez le corps de réponse HTTP suivant avec le code de réponse HTTP 200 :

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

Exemple d'implémentation Java

La classe Java suivante montre comment appeler l'API à l'aide de la classe HttpClient standard de 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();
  }
}

Comprendre les états d'enregistrement et la gestion des erreurs

Lorsqu'une requête API échoue, l'API Android Developer ID Status renvoie un objet d'erreur JSON Google Cloud standard dans le corps de la réponse. Cet objet fournit une structure cohérente pour comprendre et gérer l'erreur.

Exemple de réponse d'erreur :

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

L'objet d'erreur contient les champs clés suivants :

  • code : code d'état HTTP (par exemple, 400, 403, 500).
  • message : description de l'erreur en anglais destinée aux développeurs. Ce message n'est pas stable et peut changer. N'y basez donc pas de logique d'analyse.
  • status: code d'erreur canonique qui identifie par programmation le type d'erreur (par exemple, INVALID_ARGUMENT, PERMISSION_DENIED). Votre logique de gestion des erreurs doit être basée sur cet identifiant stable.

Le tableau suivant répertorie les erreurs les plus courantes renvoyées par l'API et les mesures recommandées.

État HTTP Code d'erreur canonique (status) Signification et cause courante Action recommandée Peut-on réessayer ?
400 Requête incorrecte INVALID_ARGUMENT La requête était mal formulée. Ne réessayez pas. Inspectez le champ "details" dans la réponse d'erreur pour identifier la violation de champ spécifique. Corrigez la charge utile de la requête et renvoyez-la. Non
401 Opération non autorisée UNAUTHENTICATED Le jeton d'accès est manquant, expiré ou non valide. Ne réessayez pas immédiatement. Assurez-vous d'utiliser le jeton ou la clé d'accès appropriés. Non
403 Interdit PERMISSION_DENIED Vous êtes authentifié, mais votre projet n'est pas autorisé à accéder à l'API. La cause la plus fréquente est que vous n'avez pas activé l'API dans votre projet Google Cloud. Ne réessayez pas. Vérifiez que vous utilisez l'ID de projet correct et que l'API est activée. Non
429 Trop de demandes RESOURCE_EXHAUSTED Vous avez dépassé le quota d'API pour votre projet. Arrêtez d'envoyer des requêtes et réessayez après un délai. Vérifiez les quotas de votre projet dans la console Google Cloud. Oui
500 Erreur interne du serveur INTERNAL Une erreur inattendue s'est produite sur les serveurs de Google. Il s'agit probablement d'un problème temporaire. Réessayez d'envoyer la requête en utilisant une stratégie d'intervalle exponentiel entre les tentatives. Si l'erreur persiste, contactez l'assistance. Oui
503 Service indisponible UNAVAILABLE Le service est momentanément indisponible. Réessayez d'envoyer la requête en utilisant une stratégie d'intervalle exponentiel entre les tentatives. Oui

Limites de quota

Les quotas d'utilisation sont appliqués par projet pour garantir la fiabilité du service.

Méthode API Limite par défaut (par projet) Remarques
CheckPackageRegistrationStatus 1 000 requêtes par jour Les appelants doivent gérer la limitation du débit interne pour éviter les abus.

Surveiller votre utilisation

Vous pouvez surveiller l'utilisation actuelle de l'API de votre projet et voir à quel point vous vous approchez de vos limites de quota directement dans la console Google Cloud.

  1. Accédez à la page API et services > Tableau de bord.
  2. Sélectionnez l'API Android Developer ID Status.
  3. Cliquez sur l'onglet Quotas.

Ce tableau de bord fournit une répartition détaillée du volume de vos requêtes au fil du temps.