App-Registrierungsstatus mit der Android Developer ID Status API prüfen

Mit der Android Developer Status API können Sie prüfen, ob ein Android-App-Paketname bei einem bestätigten Entwickler registriert ist. Wenn Sie Softwareentwicklungstools, IDEs oder automatisierte CI/CD-Workflows erstellen, können Sie diese Server-zu-Server-API einbinden, um Folgendes zu tun:

  • Prüfen, ob ein App-Paketname bei einem bestätigten Entwickler registriert ist
  • Prüfen, ob der SHA-256-Fingerabdruck des Signaturzertifikats einer App mit den Anmeldedaten übereinstimmt, die für den registrierten Paketnamen hinterlegt sind
  • Entwickler über die Benutzeroberfläche Ihres Tools auffordern, nicht erkannte Apps im Programm zur Bestätigung für Android-Entwickler zu registrieren

Diese API unterstützt verschiedene Entwickler-Workflows:

Anwendungsfall Beschreibung API-Endpunkt
Berechtigung für Paketnamen Prüfen, ob ein Paketname bereits registriert wurde. Gibt REGISTERED zurück, wenn der Paketname mit einem bestätigten Entwickler verknüpft ist, andernfalls NOT_REGISTERED. CheckPackageRegistrationStatus
App wurde registriert Prüfen, ob ein bestimmtes Paar aus Paketname und Zertifikat-Fingerabdruck registriert ist. Gibt REGISTERED zurück, wenn das Paar aus Paketname und Zertifikat-Fingerabdruck registriert ist, NOT_REGISTERED, wenn es nicht registriert ist, oder REGISTERED_WITH_ANOTHER_CERTIFICATE_FINGERPRINT, wenn der Paketname mit einem anderen Zertifikat-Fingerabdruck registriert ist. CheckPackageRegistrationStatus

In diesem Leitfaden wird erklärt, wie Sie die folgenden Aufgaben ausführen:

  1. Google Cloud-API-Zugriff und -Authentifizierung einrichten.
  2. Prüfen, ob ein Paar aus Paketname und öffentlichem Zertifikat-SHA-256-Fingerabdruck einer App von einem bestätigten Entwickler im Programm zur Bestätigung für Android-Entwickler registriert wurde, entweder mit dem angegebenen öffentlichen Zertifikat-SHA-256-Fingerabdruck oder einem anderen öffentlichen Zertifikat-SHA-256-Fingerabdruck.
  3. API-Registrierungsstatus in Ihrem IDE- oder Entwicklertool-Workflow verarbeiten.

Vorbereitung

Dieses Dokument richtet sich an Android-App-Entwickler oder Entwickler von Softwareentwicklungstools. Bevor Sie beginnen, benötigen Sie Folgendes:

  • Administratorzugriff auf ein Google Cloud-Projekt.
  • Grundkenntnisse zu RESTful APIs, JSON und SHA-256-Zertifikat-Fingerabdrücken.

Sie sollten auch mit den folgenden Begriffen vertraut sein:

Begriff Definition
Bestätigung für Android-Entwickler Die Bestätigung für Android-Entwickler ist eine neue Anforderung, mit der reale Entitäten (Einzelpersonen und Organisationen) mit ihren Android-Apps verknüpft werden sollen. Alle Android-Apps müssen von bestätigten Entwicklern registriert werden, damit sie von Nutzern auf zertifizierten Android-Geräten installiert werden können.
Zertifikat-Fingerabdruck Der SHA-256-Hash des öffentlichen Zertifikats, das zum Signieren der App verwendet wurde.
Registrierungsstatus Der von der API zurückgegebene Status für den Paketnamen einer App oder das Paar aus Paketnamen und öffentlichem Zertifikat-SHA-256-Fingerabdruck einer App. Dieser Status bestimmt die Maßnahmen, die Sie ergreifen müssen (z. B. REGISTERED, NOT_REGISTERED).

Dienstendpunkt

Ein Dienstendpunkt ist eine Basis-URL, die die Netzwerkadresse eines API-Dienstes angibt. Dieser Dienst hat den folgenden Dienstendpunkt und alle URIs beziehen sich auf ihn:

https://androiddeveloperidstatus.googleapis.com

API aktivieren

Wenn Sie die Android Developer ID Status API verwenden möchten, müssen Sie die Einrichtungsschritte ausführen, um ein Projekt zu erstellen und die API zu aktivieren.

Google Cloud-Projekt erstellen

  1. Erstellen Sie ein Google Cloud-Konto, falls Sie noch keines haben.
  2. Öffnen Sie die Google Cloud Console.
  3. Erstellen Sie ein Google Cloud-Projekt.

API in Ihrem Projekt aktivieren

  1. Gehen Sie in der Google Cloud Console zu APIs & Dienste > Bibliothek.
  2. Wählen Sie Ihr Projekt im Drop-down-Menü aus.
  3. Suchen Sie nach Android Developer ID Status API.
  4. Klicken Sie auf Aktivieren.

Authentifizieren

Die API unterstützt API-Schlüssel-Anmeldedaten. So erhalten Sie einen API-Schlüssel:

  1. Rufen Sie in der Google Cloud Console APIs & Dienste > Anmeldedaten auf.
  2. Klicken Sie auf + Anmeldedaten erstellen und wählen Sie API-Schlüssel aus.
  3. Konfigurieren Sie den Schlüssel und kopieren Sie ihn. Verwenden Sie diesen Schlüssel in Ihren Anfrageheadern.

Registrierungsstatus der App prüfen

Sie können die Ressource PackageRegistrationStatus abfragen, um einen Paketnamen allein zu prüfen oder einen Paketnamen in Kombination mit einem bestimmten Zertifikat-Fingerabdruck zu prüfen.

Paketnamen prüfen

Wenn Sie prüfen möchten, ob ein App-Paketname von einem bestätigten Entwickler registriert wurde, senden Sie eine authentifizierte GET-Anfrage mit dem Paketnamen der Android-App (z. B. com.example.app) an den Endpunkt packageRegistrationStatus:check ohne optionale Parameter:

Anfrage :

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

Ergebnisse

Antwort (registriert) :

Wenn der Paketname registriert ist, erhalten Sie den folgenden HTTP-Antworttext mit dem HTTP-Antwortcode 200:

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

Empfohlene Maßnahme: Informieren Sie den Entwickler, dass der Paketname bereits registriert ist.

Antwort (nicht registriert) :

Wenn der Paketname nicht registriert ist, erhalten Sie den folgenden HTTP-Antworttext mit dem HTTP-Antwortcode 200:

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

Paare aus Paketnamen und Zertifikat-Fingerabdrücken prüfen

Wenn Sie prüfen möchten, ob ein App-Paketname mit einem bestimmten öffentlichen Zertifikat-SHA-256-Fingerabdruck registriert ist, übergeben Sie den Abfrageparameter certificateFingerprint:

Anfrage :

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

Ergebnisse

Antwort (mit übereinstimmendem Zertifikat-Fingerabdruck registriert) :

Wenn der Paketname mit dem angegebenen öffentlichen Zertifikat-SHA-256-Fingerabdruck registriert ist, erhalten Sie den folgenden HTTP-Antworttext mit dem HTTP-Antwortcode 200:

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

Antwort (mit anderem Zertifikat-Fingerabdruck registriert) :

Wenn der Paketname mit einem anderen Zertifikat-SHA-256-Fingerabdruck als dem angegebenen registriert ist, erhalten Sie den folgenden HTTP-Antworttext mit dem HTTP-Antwortcode 200:

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

Antwort (nicht registriert) :

Wenn der Paketname nicht mit dem angegebenen öffentlichen Zertifikat-SHA-256-Fingerabdruck registriert ist, erhalten Sie den folgenden HTTP-Antworttext mit dem HTTP-Antwortcode 200:

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

Beispiel für die Java-Implementierung

Die folgende Java-Klasse zeigt, wie die API mit dem Standard-HttpClient von Java 11 aufgerufen wird.

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();
  }
}

Registrierungsstatus und Fehlerbehandlung

Wenn eine API-Anfrage fehlschlägt, gibt die Android Developer ID Status API ein Standard-Google Cloud-JSON-Fehlerobjekt im Antworttext zurück. Dieses Objekt bietet eine konsistente Struktur zum Verstehen und Behandeln des Fehlers.

Beispiel für eine Fehlerantwort:

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

Das Fehlerobjekt enthält die folgenden Schlüsselfelder:

  • code: Der HTTP-Statuscode (z. B. 400, 403, 500).
  • message: Eine für Entwickler bestimmte englische Beschreibung des Fehlers. Diese Nachricht ist nicht stabil und kann sich ändern. Erstellen Sie daher keine Parsing-Logik dafür.
  • status: Ein kanonischer Fehlercode, der den Fehlertyp programmatisch identifiziert (z. B. INVALID_ARGUMENT, PERMISSION_DENIED). Ihre Fehlerbehandlungslogik sollte auf dieser stabilen Kennung basieren.

In der folgenden Tabelle sind die häufigsten von der API zurückgegebenen Fehler und die empfohlenen Maßnahmen aufgeführt.

HTTP-Status Kanonischer Fehlercode (status) Bedeutung und häufige Ursachen Empfohlene Maßnahmen Kann wiederholt werden?
400 Fehlerhafte Anfrage INVALID_ARGUMENT Die Anfrage war fehlerhaft. Wiederholen Sie den Vorgang nicht. Prüfen Sie das Feld „Details“ in der Fehlerantwort, um die spezifische Feldverletzung zu ermitteln. Korrigieren Sie die Anfragenutzlast und senden Sie sie noch einmal. Nein
401 Nicht autorisiert UNAUTHENTICATED Das Zugriffstoken fehlt, ist abgelaufen oder ungültig. Wiederholen Sie den Vorgang nicht sofort. Achten Sie darauf, dass Sie das richtige Zugriffstoken oder den richtigen Schlüssel verwenden. Nein
403 Unzulässig PERMISSION_DENIED Sie sind authentifiziert, aber Ihr Projekt hat keine Berechtigung für den Zugriff auf die API. Die häufigste Ursache ist, dass Sie die API in Ihrem Google Cloud-Projekt nicht aktiviert haben. Wiederholen Sie den Vorgang nicht. Prüfen Sie, ob Sie die richtige Projekt-ID verwenden und ob die API aktiviert ist. Nein
429 Zu viele Anfragen RESOURCE_EXHAUSTED Sie haben das API-Kontingent für Ihr Projekt überschritten. Senden Sie keine Anfragen mehr und versuchen Sie es nach einer Verzögerung noch einmal. Prüfen Sie die Kontingente Ihres Projekts in der Google Cloud Console. Ja
500 Interner Serverfehler INTERNAL Auf den Google-Servern ist ein unerwarteter Fehler aufgetreten. Wahrscheinlich handelt es sich dabei um ein vorübergehendes Problem. Wiederholen Sie die Anfrage mit einer exponentiellen Backoff-Strategie. Wenn der Fehler weiterhin auftritt, wenden Sie sich an den Support. Ja
503 Dienst nicht verfügbar UNAVAILABLE Dieser Dienst ist vorübergehend nicht verfügbar. Wiederholen Sie die Anfrage mit einer exponentiellen Backoff-Strategie. Ja

Kontingentlimits

Nutzungskontingente werden pro Projekt durchgesetzt, um die Zuverlässigkeit des Dienstes zu gewährleisten.

API-Methode Standardlimit (pro Projekt) Hinweise
CheckPackageRegistrationStatus 1.000 Anfragen pro Tag Anrufer müssen die interne Ratenbegrenzung verwalten, um Missbrauch zu verhindern.

Nutzung überwachen

Sie können die aktuelle API-Nutzung Ihres Projekts und die Nähe zu Ihren Kontingentlimits direkt in der Google Cloud Console überwachen.

  1. Rufen Sie die Seite „APIs & Dienste > Dashboard“ auf.
  2. Wählen Sie die Android Developer ID Status API aus.
  3. Klicken Sie auf den Tab Kontingente.

Dieses Dashboard bietet eine detaillierte Aufschlüsselung Ihres Anfragevolumens im Zeitverlauf.