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 des Paketnamens | 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 Paketname- und Zertifikat-Fingerabdruck-Paar registriert ist. Gibt REGISTERED zurück, wenn das Paketname- und Zertifikat-Fingerabdruck-Paar 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 erläutert, wie Sie die folgenden Aufgaben ausführen:
- Google Cloud-API-Zugriff und -Authentifizierung einrichten.
- Prüfen, ob das Paketname- und SHA‑256-Fingerabdruck-Paar des öffentlichen Zertifikats einer App von einem bestätigten Entwickler im Programm zur Bestätigung für Android-Entwickler registriert wurde, entweder mit dem angegebenen SHA‑256-Fingerabdruck des öffentlichen Zertifikats oder mit einem anderen SHA‑256-Fingerabdruck des öffentlichen Zertifikats.
- 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. Ab 2026 müssen alle Android-Apps 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 Paketname- und SHA‑256-Fingerabdruck-Paar des öffentlichen Zertifikats 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 Netzwerk adresse 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
- Erstellen Sie ein Google Cloud-Konto, falls Sie noch keines haben.
- Öffnen Sie die Google Cloud Console.
- Erstellen Sie ein Google Cloud-Projekt.
API in Ihrem Projekt aktivieren
- Gehen Sie in der Google Cloud Console zu API & Dienste > Bibliothek.
- Wählen Sie Ihr Projekt im Drop-down-Menü aus.
- Suchen Sie nach Android Developer ID Status API.
- Klicken Sie auf Aktivieren.
Authentifizieren
Die API unterstützt API-Schlüssel-Anmeldedaten. So erhalten Sie einen API-Schlüssel:
- Rufen Sie in der Google Cloud Console API & Dienste > Anmeldedaten auf.
- Klicken Sie auf + Anmeldedaten erstellen und wählen Sie API-Schlüssel aus.
- 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: Wenn Sie diese Prüfung im Namen eines anderen Entwicklers durchführen, informieren Sie ihn darüber, dass der Paketname 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"
}
Empfohlene Maßnahme: Wenn Sie diese Prüfung im Namen eines anderen Entwicklers durchführen, informieren Sie ihn darüber, dass der Paketname nicht registriert ist.
Beispiel für Java
In diesem Java-Beispiel wird die API ohne Abfrageparameter aufgerufen, um zu prüfen, ob der Paketname registriert ist.
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class CheckPackageNameClient {
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";
try {
String response = checkPackageRegistrationStatus(apiKey, packageName);
System.out.println("Response: " + response);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
/**
* Checks the registration status of an Android package.
*/
public static String checkPackageRegistrationStatus(String apiKey, String packageName)
throws IOException, InterruptedException {
String fullUrl = String.format("%s/v1/packages/%s/packageRegistrationStatus:check", API_ENDPOINT, packageName);
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();
}
}
Paketname- und Zertifikat-Fingerabdruck-Paare prüfen
Wenn Sie prüfen möchten, ob ein App-Paketname mit einem bestimmten SHA‑256-Fingerabdruck des öffentlichen Zertifikats 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 SHA‑256-Fingerabdruck des öffentlichen Zertifikats registriert ist, erhalten Sie den folgenden HTTP-Antworttext mit dem HTTP-Antwortcode 200:
{
"name": "packages/com.example.app/packageRegistrationStatus",
"state": "REGISTERED"
}
Empfohlene Maßnahme: Wenn Sie diese Prüfung im Namen eines anderen Entwicklers durchführen, informieren Sie ihn darüber, dass der Paketname mit dem angegebenen Zertifikat-Fingerabdruck registriert ist.
Antwort (mit anderem Zertifikat-Fingerabdruck registriert) :
Wenn der Paketname mit einem anderen SHA‑256-Zertifikat-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"
}
Empfohlene Maßnahme: Wenn Sie diese Prüfung im Namen eines anderen Entwicklers durchführen, informieren Sie ihn darüber, dass der Paketname registriert ist, aber mit einem anderen Zertifikat-Fingerabdruck als dem angegebenen.
Antwort (nicht registriert) :
Wenn der Paketname nicht mit dem angegebenen SHA‑256-Fingerabdruck des öffentlichen Zertifikats registriert ist, erhalten Sie den folgenden HTTP-Antworttext mit dem HTTP-Antwortcode 200:
{
"name": "packages/com.example.app/packageRegistrationStatus",
"state": "NOT_REGISTERED"
}
Empfohlene Maßnahme: Wenn Sie diese Prüfung im Namen eines anderen Entwicklers durchführen, informieren Sie ihn darüber, dass der Paketname nicht mit dem angegebenen Zertifikat-Fingerabdruck registriert ist.
Beispiel für Java
In diesem Java-Beispiel wird certificateFingerprint explizit als URL-codierter Abfrageparameter angegeben, um eine bestimmte Paket- und Fingerabdruck-Kombination zu prüfen.
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 CheckPackageAndFingerprintClient {
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 = checkPackageAndFingerprintRegistrationStatus(apiKey, packageName, certificateFingerprint);
System.out.println("Response: " + response);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
/**
* Checks the registration status of a specific Android package and certificate fingerprint pair.
*/
public static String checkPackageAndFingerprintRegistrationStatus(
String apiKey, String packageName, String certificateFingerprint)
throws IOException, InterruptedException {
String path = String.format("/v1/packages/%s/packageRegistrationStatus:check", packageName);
String encodedFingerprint = URLEncoder.encode(certificateFingerprint, StandardCharsets.UTF_8);
String fullUrl = API_ENDPOINT + path + "?certificateFingerprint=" + encodedFingerprint;
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-JSON-Fehlerobjekt von Google Cloud 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 Beschreibung des Fehlers auf Englisch. 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 diesem stabilen Bezeichner 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 auf Projektbasis 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.
- Rufen Sie die Seite „API & Dienste > Dashboard“ auf.
- Wählen Sie die Android Developer ID Status API aus.
- Klicken Sie auf den Tab Kontingente.
Dieses Dashboard bietet eine detaillierte Aufschlüsselung Ihres Anfragevolumens im Zeitverlauf.