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 |
このガイドでは、次のタスクを行う方法について説明します。
- Google Cloud API のアクセスと認証を設定します。
- アプリのパッケージ名と公開証明書の SHA-256 フィンガープリントのペアが、提供された公開証明書の SHA-256 フィンガープリントまたは別の公開証明書の SHA-256 フィンガープリントのいずれかを使用して、確認済みのデベロッパーによって Android デベロッパー確認プログラムに登録されているかどうかを確認します。
- IDE またはデベロッパー ツール ワークフローで API 登録状態を処理します。
前提条件
このドキュメントは、Android アプリ デベロッパーまたはソフトウェア開発ツール デベロッパーを対象としています。始める前に、次のものを用意する必要があります。
- Google Cloud プロジェクトに対する管理者権限。
- RESTful API、JSON、SHA-256 証明書のフィンガープリントに関する基本的な知識。
以下の用語についても知っておく必要があります。
| 用語 | 定義 |
|---|---|
| Android デベロッパーの確認 | Android デベロッパーの確認とは、現実世界のエンティティ(個人や組織)と Android アプリを関連付けることを目的とした新しい要件です。これにより、認定済み Android デバイスにインストールできるのは、確認済みのデベロッパーによって登録されたアプリのみとなります。 |
| 証明書フィンガープリント | アプリの署名に使用される公開証明書の SHA-256 ハッシュ。 |
| 登録の状態 | アプリのパッケージ名、またはアプリのパッケージ名と公開証明書の SHA-256 フィンガープリントのペアに対して API が返すステータス。この状態によって、必要なアクション(REGISTERED、NOT_REGISTERED など)が決まります。 |
サービス エンドポイント
サービス エンドポイントは、API サービスのネットワーク アドレスを指定するベース URL です。このサービスには次のサービス エンドポイントがあり、すべての URI はこのサービス エンドポイントを基準とします。
https://androiddeveloperidstatus.googleapis.com
API を有効にする
Android デベロッパー ID ステータス API を使用するには、設定手順を完了してプロジェクトを作成し、API を有効にする必要があります。
Google Cloud プロジェクトを作成する
- Google Cloud アカウントをお持ちでない場合は、作成します。
- Google Cloud コンソールを開きます。
- Google Cloud プロジェクトを作成します。
プロジェクトで API を有効にする
- Google Cloud コンソールで、[API とサービス] > [ライブラリ] に移動します。
- プルダウン メニューからプロジェクトを選択します。
- Android Developer ID Status API を検索します。
- [有効にする] をクリックします。
認証
この API は API キー認証情報をサポートしています。API キーを取得するには:
- Google Cloud コンソールで、[API とサービス] > [認証情報] に移動します。
- [認証情報を作成] をクリックして [API キー] を選択します。
- キーを構成してコピーします。このキーはリクエスト ヘッダーで使用します。
アプリの登録ステータスを確認する
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 ステータス コード(400、403、500など)。message: デベロッパー向けの英語のエラー説明。このメッセージは安定しておらず、変更される可能性があるため、このメッセージを中心に解析ロジックを構築しないでください。status: エラータイプをプログラムで識別する正規エラーコード(INVALID_ARGUMENT、PERMISSION_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 コンソールで直接確認できます。
- [API とサービス] > [ダッシュボード] ページに移動します。
- Android Developer ID Status API を選択します。
- [割り当て] タブをクリックします。
このダッシュボードには、リクエスト数の経時的な詳細な内訳が表示されます。