Android デベロッパー ID ステータス API でアプリの登録ステータスを確認する

Android Developer Status API を使用して、Android アプリのパッケージ名が確認済みのデベロッパーに登録されているかどうかを確認します。ソフトウェア開発ツール、IDE、自動化された CI/CD ワークフローを構築する場合は、このサーバー間 API を統合して次の操作を行うことができます。

  • アプリ パッケージ名が確認済みのデベロッパーに登録されているかどうかを確認する
  • アプリの署名証明書の SHA-256 フィンガープリントが、登録済みパッケージ名のファイルにある認証情報と一致するかどうかを検証します
  • ツール内のインターフェースで、認識されていないアプリを Android デベロッパーの確認プログラムに登録するようデベロッパーに促す

この API は、さまざまなデベロッパー ワークフローをサポートするように設計されています。

ユースケース 説明 API エンドポイント
パッケージ名の適格性 パッケージ名がすでに登録されているかどうかを確認します。パッケージ名が確認済みのデベロッパーにリンクされている場合は REGISTERED、それ以外の場合は NOT_REGISTERED を返します。 CheckPackageRegistrationStatus
アプリが登録されました 特定のパッケージ名と証明書フィンガープリントのペアが登録されているかどうかを確認します。パッケージ名と証明書フィンガープリントのペアが登録されている場合は REGISTERED、登録されていない場合は NOT_REGISTERED、パッケージ名が別の証明書フィンガープリントで登録されている場合は REGISTERED_WITH_ANOTHER_CERTIFICATE_FINGERPRINT を返します。 CheckPackageRegistrationStatus

このガイドでは、次のタスクを行う方法について説明します。

  1. Google Cloud API のアクセスと認証を設定します。
  2. アプリのパッケージ名と公開証明書の SHA-256 フィンガープリントのペアが、提供された公開証明書の SHA-256 フィンガープリントまたは別の公開証明書の SHA-256 フィンガープリントのいずれかを使用して、確認済みのデベロッパーによって Android デベロッパー確認プログラムに登録されているかどうかを確認します。
  3. IDE またはデベロッパー ツール ワークフローで API 登録状態を処理します。

前提条件

このドキュメントは、Android アプリ デベロッパーまたはソフトウェア開発ツール デベロッパーを対象としています。始める前に、次のものを用意する必要があります。

  • Google Cloud プロジェクトに対する管理者権限。
  • RESTful API、JSON、SHA-256 証明書のフィンガープリントに関する基本的な知識。

以下の用語についても知っておく必要があります。

用語 定義
Android デベロッパーの確認 Android デベロッパーの確認とは、現実世界のエンティティ(個人や組織)と Android アプリを関連付けることを目的とした新しい要件です。これにより、認定済み Android デバイスにインストールできるのは、確認済みのデベロッパーによって登録されたアプリのみとなります。
証明書フィンガープリント アプリの署名に使用される公開証明書の SHA-256 ハッシュ。
登録の状態 アプリのパッケージ名、またはアプリのパッケージ名と公開証明書の SHA-256 フィンガープリントのペアに対して API が返すステータス。この状態によって、必要なアクション(REGISTEREDNOT_REGISTERED など)が決まります。

サービス エンドポイント

サービス エンドポイントは、API サービスのネットワーク アドレスを指定するベース URL です。このサービスには次のサービス エンドポイントがあり、すべての URI はこのサービス エンドポイントを基準とします。

https://androiddeveloperidstatus.googleapis.com

API を有効にする

Android デベロッパー ID ステータス API を使用するには、設定手順を完了してプロジェクトを作成し、API を有効にする必要があります。

Google Cloud プロジェクトを作成する

  1. Google Cloud アカウントをお持ちでない場合は、作成します。
  2. Google Cloud コンソールを開きます。
  3. Google Cloud プロジェクトを作成します。

プロジェクトで API を有効にする

  1. Google Cloud コンソールで、[API とサービス] > [ライブラリ] に移動します。
  2. プルダウン メニューからプロジェクトを選択します。
  3. Android Developer ID Status API を検索します。
  4. [有効にする] をクリックします。

認証

この API は API キー認証情報をサポートしています。API キーを取得するには:

  1. Google Cloud コンソールで、[API とサービス] > [認証情報] に移動します。
  2. [認証情報を作成] をクリックして [API キー] を選択します。
  3. キーを構成してコピーします。このキーはリクエスト ヘッダーで使用します。

アプリの登録ステータスを確認する

PackageRegistrationStatus リソースをクエリして、パッケージ名のみを検証したり、特定の証明書フィンガープリントとペアになっているパッケージ名を確認したりできます。

パッケージ名を確認する

アプリ パッケージ名が確認済みのデベロッパーによって登録されているかどうかを確認するには、Android アプリのパッケージ名(com.example.app など)を含む認証済みの GET リクエストを、省略可能なパラメータなしで packageRegistrationStatus:check エンドポイントに送信します。

リクエスト:

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

結果

レスポンス(登録済み):

パッケージ名が登録されている場合は、HTTP レスポンス コード 200 とともに次の HTTP レスポンス本文が返されます。

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

推奨される対応策: パッケージ名がすでに登録されていることをデベロッパーに通知します。

回答(未登録):

パッケージ名が登録されていない場合は、HTTP レスポンス コード 200 で次の HTTP レスポンスの本文が返されます。

{
  "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 で次の HTTP レスポンス本文が返されます。

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

レスポンス(別の証明書フィンガープリントで登録されている場合):

パッケージ名が、指定されたものとは異なる証明書 SHA-256 フィンガープリントで登録されている場合、HTTP レスポンス コード 200 で次の HTTP レスポンス本文が返されます。

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

回答(未登録):

パッケージ名が指定された公開証明書の SHA-256 フィンガープリントで登録されていない場合、HTTP レスポンス コード 200 で次の HTTP レスポンス本文が返されます。

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

Java の実装例

次の Java クラスは、Java 11 の標準 HttpClient を使用して API を呼び出す方法を示しています。

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 リクエストが失敗すると、Android デベロッパー ID ステータス API は、レスポンスの本文に標準の Google Cloud JSON エラー オブジェクトを返します。このオブジェクトは、エラーを理解して処理するための整合性のある構造を提供します。

エラー レスポンスの例:

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

エラー オブジェクトには次のキーフィールドが含まれます。

  • code: HTTP ステータス コード(400403500 など)。
  • message: デベロッパー向けの英語のエラー説明。このメッセージは安定しておらず、変更される可能性があるため、このメッセージを中心に解析ロジックを構築しないでください。
  • status: エラータイプをプログラムで識別する正規エラーコード(INVALID_ARGUMENTPERMISSION_DENIED など)。エラー処理ロジックは、この安定した識別子に基づいて構築する必要があります。

次の表に、API から返される最も一般的なエラーと、推奨される対応策を示します。

HTTP ステータス 標準的なエラーコード(status 意味と一般的な原因 推奨される対処方法 再試行できますか?
400 Bad Request(不正なリクエスト) INVALID_ARGUMENT リクエストの形式が正しくありません。 再試行しないでください。エラー レスポンスの詳細フィールドを調べて、特定のフィールド違反を特定します。リクエスト ペイロードを修正して、もう一度送信します。 いいえ
401 Unauthorized(未承認) UNAUTHENTICATED アクセス トークンがない、期限切れ、または無効です。 すぐに再試行しないでください。正しいアクセス トークンまたはキーを使用していることを確認します。 いいえ
403 Forbidden(禁止) PERMISSION_DENIED 認証はされていますが、プロジェクトに API へのアクセス権がありません。最も一般的な原因は、Google Cloud プロジェクトで API が有効になっていないことです。 再試行しないでください。正しいプロジェクト ID を使用していることと、API が有効になっていることを確認します。 いいえ
429 Too Many Requests RESOURCE_EXHAUSTED プロジェクトの API 割り当てを超過しました。 リクエストの送信を停止し、遅延後に再試行します。Google Cloud コンソールでプロジェクトの割り当てを確認します。
500 内部サーバーエラー INTERNAL Google のサーバーで予期しないエラーが発生しました。 これは一時的な問題である可能性があります。指数バックオフ戦略を使用してリクエストを再試行します。エラーが解消されない場合は、サポートまでお問い合わせください。
503 Service Unavailable(サービス利用不可) UNAVAILABLE このサービスは一時的にご利用いただけません。 指数バックオフ戦略を使用してリクエストを再試行する。

割り当て上限

使用量割り当ては、サービスの信頼性を確保するためにプロジェクトごとに適用されます。

API メソッド デフォルトの上限(プロジェクトごと) メモ
CheckPackageRegistrationStatus 1 日あたり 1,000 回のリクエスト 呼び出し元は、不正使用を防ぐために内部レート制限を管理する必要があります。

使用状況をモニタリングする

プロジェクトの現在の API 使用量をモニタリングし、割り当て上限にどれだけ近づいているかを Google Cloud コンソールで直接確認できます。

  1. [API とサービス] > [ダッシュボード] ページに移動します。
  2. Android Developer ID Status API を選択します。
  3. [割り当て] タブをクリックします。

このダッシュボードには、リクエスト数の経時的な詳細な内訳が表示されます。