ตรวจสอบสถานะการลงทะเบียนแอปด้วย Android Developer ID Status 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 ของใบรับรองสาธารณะของแอปได้รับการลงทะเบียนในโปรแกรมการยืนยันนักพัฒนาแอป Android โดยนักพัฒนาแอปที่ผ่านการยืนยันแล้วหรือไม่ โดยใช้ลายนิ้วมือ SHA-256 ของใบรับรองสาธารณะที่ให้ไว้ หรือลายนิ้วมือ SHA-256 ของใบรับรองสาธารณะอื่น
  3. จัดการสถานะการลงทะเบียน API ในเวิร์กโฟลว์ IDE หรือเครื่องมือสำหรับนักพัฒนาแอป

สิ่งที่ต้องมีก่อน

เอกสารนี้มีไว้สำหรับนักพัฒนาแอป Android หรือนักพัฒนาเครื่องมือพัฒนาซอฟต์แวร์ คุณควรมีสิ่งต่อไปนี้ก่อนเริ่มต้น

  • สิทธิ์เข้าถึงระดับผู้ดูแลระบบในโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google
  • ความเข้าใจพื้นฐานเกี่ยวกับ RESTful API, JSON และลายนิ้วมือ SHA-256 ของใบรับรอง

นอกจากนี้ คุณควรทำความคุ้นเคยกับคำศัพท์ต่อไปนี้ด้วย

คำศัพท์ คำจำกัดความ
การยืนยันนักพัฒนาแอป Android การยืนยันนักพัฒนาแอป Android เป็นข้อกำหนดใหม่ที่ออกแบบมาเพื่อลิงก์เอนทิตีในโลกจริง (บุคคลและองค์กร) กับแอป Android Android จะกำหนดให้แอปทั้งหมดต้องลงทะเบียนโดยนักพัฒนาแอปที่ผ่านการยืนยันเพื่อให้ผู้ใช้ติดตั้งในอุปกรณ์ Android ที่ผ่านการรับรองได้
ลายนิ้วมือของใบรับรอง แฮช SHA-256 ของใบรับรองสาธารณะที่ใช้ลงนามแอป
สถานะการลงทะเบียน สถานะที่ API แสดงผลสำหรับชื่อแพ็กเกจของแอป หรือชื่อแพ็กเกจและลายนิ้วมือ SHA-256 ของใบรับรองสาธารณะของแอปเป็นคู่กัน สถานะนี้จะกำหนดการดำเนินการที่คุณต้องทำ (เช่น REGISTERED, NOT_REGISTERED)

ปลายทางบริการ

ปลายทางบริการ คือ URL ฐานที่ระบุที่อยู่เครือข่ายของบริการ API บริการนี้มีปลายทางบริการต่อไปนี้ และ URI ทั้งหมดจะเกี่ยวข้องกับปลายทางบริการนี้

https://androiddeveloperidstatus.googleapis.com

เปิดใช้ API

หากต้องการใช้ Android Developer ID Status 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 เพื่อยืนยันชื่อแพ็กเกจอย่างเดียว หรือตรวจสอบชื่อแพ็กเกจที่จับคู่กับลายนิ้วมือของใบรับรองที่เฉพาะเจาะจง

ตรวจสอบชื่อแพ็กเกจ

หากต้องการตรวจสอบว่าชื่อแพ็กเกจแอปได้รับการลงทะเบียนโดยนักพัฒนาแอปที่ผ่านการยืนยันแล้วหรือไม่ ให้ส่งคำขอ GET ที่มีการตรวจสอบสิทธิ์ซึ่งมีชื่อแพ็กเกจของแอป Android (เช่น com.example.app) ไปยังปลายทาง packageRegistrationStatus:check โดยไม่มีพารามิเตอร์ที่ไม่บังคับ

คำขอ:

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

ผลลัพธ์

การตอบกลับ (ลงทะเบียนแล้ว):

หากชื่อแพ็กเกจได้รับการลงทะเบียน คุณจะได้รับการตอบกลับ HTTP ต่อไปนี้ในเนื้อหาการตอบกลับ HTTP พร้อมโค้ดตอบกลับ HTTP 200

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

การดำเนินการที่แนะนำ: แจ้งให้นักพัฒนาแอปทราบว่าชื่อแพ็กเกจได้รับการลงทะเบียนแล้ว

การตอบกลับ (ยังไม่ได้ลงทะเบียน):

หากชื่อแพ็กเกจยังไม่ได้ลงทะเบียน คุณจะได้รับการตอบกลับ HTTP ต่อไปนี้ในเนื้อหาการตอบกลับ HTTP พร้อมโค้ดตอบกลับ HTTP 200

{
  "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 ต่อไปนี้ในเนื้อหาการตอบกลับ HTTP พร้อมโค้ดตอบกลับ HTTP 200

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

การตอบกลับ (ลงทะเบียนด้วยลายนิ้วมือของใบรับรองอื่น):

หากชื่อแพ็กเกจได้รับการลงทะเบียนด้วยลายนิ้วมือ SHA-256 ของใบรับรองอื่นที่ไม่ใช่ที่ให้ไว้ คุณจะได้รับการตอบกลับ HTTP ต่อไปนี้ในเนื้อหาการตอบกลับ HTTP พร้อมโค้ดตอบกลับ HTTP 200

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

การตอบกลับ (ยังไม่ได้ลงทะเบียน):

หากชื่อแพ็กเกจยังไม่ได้ลงทะเบียนด้วยฟิงเกอร์ปรินต์ SHA-256 ของใบรับรองสาธารณะที่ให้ไว้ คุณจะได้รับการตอบกลับ HTTP ต่อไปนี้ในเนื้อหาการตอบกลับ HTTP พร้อมโค้ดตอบกลับ HTTP 200

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

ตัวอย่างการใช้งาน Java

คลาส Java ต่อไปนี้แสดงวิธีเรียก API โดยใช้ HttpClient มาตรฐานของ 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();
  }
}

ทำความเข้าใจสถานะการลงทะเบียนและการจัดการข้อผิดพลาด

เมื่อคำขอ API ล้มเหลว Android Developer ID Status API จะแสดงผลออบเจ็กต์ข้อผิดพลาด JSON มาตรฐานของ Google Cloud ในเนื้อหาการตอบกลับ ออบเจ็กต์นี้มีโครงสร้างที่สอดคล้องกันเพื่อให้คุณเข้าใจและจัดการข้อผิดพลาดได้

ตัวอย่างการตอบกลับข้อผิดพลาด

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

ออบเจ็กต์ข้อผิดพลาดมีฟิลด์คีย์ต่อไปนี้

  • code: รหัสสถานะ HTTP (เช่น 400, 403, 500)
  • message: คำอธิบายข้อผิดพลาดเป็นภาษาอังกฤษสำหรับนักพัฒนาแอป ข้อความนี้ไม่เสถียรและอาจมีการเปลี่ยนแปลง ดังนั้นอย่าสร้างตรรกะการแยกวิเคราะห์รอบๆ ข้อความนี้
  • status: รหัสข้อผิดพลาด Canonical ที่ระบุประเภทข้อผิดพลาดโดยโปรแกรม (เช่น INVALID_ARGUMENT, PERMISSION_DENIED) ตรรกะการจัดการข้อผิดพลาดควรสร้างขึ้นจากตัวระบุที่เสถียรนี้

ตารางต่อไปนี้แสดงข้อผิดพลาดที่พบบ่อยที่สุดที่ API แสดงผลและการดำเนินการที่แนะนำ

สถานะ HTTP รหัสข้อผิดพลาด Canonical (status) ความหมายและสาเหตุที่พบบ่อย การดำเนินการที่แนะนำ ลองอีกครั้งได้ไหม
400 คำขอไม่ถูกต้อง INVALID_ARGUMENT คำขอมีรูปแบบไม่ถูกต้อง อย่าลองอีกครั้ง ตรวจสอบฟิลด์รายละเอียดในการตอบกลับข้อผิดพลาดเพื่อระบุการละเมิดฟิลด์ที่เฉพาะเจาะจง แก้ไขเพย์โหลดของคำขอแล้วส่งอีกครั้ง ไม่ได้
401 ไม่ได้รับอนุมัติ UNAUTHENTICATED โทเค็นเพื่อการเข้าถึงหายไป หมดอายุ หรือไม่ถูกต้อง อย่าลองอีกครั้งทันที ตรวจสอบว่าคุณใช้โทเค็นเพื่อการเข้าถึงหรือคีย์ที่ถูกต้อง ไม่ได้
403 ไม่ได้รับอนุญาต PERMISSION_DENIED คุณได้รับการตรวจสอบสิทธิ์แล้ว แต่โปรเจ็กต์ของคุณไม่มีสิทธิ์เข้าถึง API สาเหตุที่พบบ่อยที่สุดคือคุณยังไม่ได้เปิดใช้ API ในโปรเจ็กต์ Google Cloud อย่าลองอีกครั้ง ตรวจสอบว่าคุณใช้รหัสโปรเจ็กต์ที่ถูกต้องและเปิดใช้ API แล้ว ไม่ได้
429 คำขอมากเกินไป RESOURCE_EXHAUSTED คุณใช้โควต้า API สำหรับโปรเจ็กต์เกินขีดจำกัดแล้ว หยุดส่งคำขอและลองอีกครั้งหลังจากผ่านไปสักพัก ตรวจสอบโควต้าของโปรเจ็กต์ในคอนโซล Google Cloud ได้
500 ข้อผิดพลาดของเซิร์ฟเวอร์ภายใน INTERNAL เกิดข้อผิดพลาดที่ไม่คาดคิดในเซิร์ฟเวอร์ของ Google ข้อผิดพลาดนี้อาจเป็นปัญหาชั่วคราว ลองส่งคำขออีกครั้งโดยใช้กลยุทธ์ Exponential Backoff หากข้อผิดพลาดยังคงอยู่ ให้ติดต่อทีมสนับสนุน ได้
503 ไม่พร้อมให้บริการ UNAVAILABLE ไม่สามารถใช้บริการได้ชั่วคราว ลองส่งคำขออีกครั้งโดยใช้กลยุทธ์ Exponential Backoff ได้

ขีดจำกัดโควต้า

ระบบจะบังคับใช้โควต้าการใช้งานตามโปรเจ็กต์เพื่อให้มั่นใจถึงความน่าเชื่อถือของบริการ

เมธอดของ API ขีดจำกัดเริ่มต้น (ต่อโปรเจ็กต์) หมายเหตุ
CheckPackageRegistrationStatus 1,000 คำขอต่อวัน ผู้เรียกต้องจัดการการจำกัดอัตราคำขอภายในเพื่อป้องกันการละเมิด

ตรวจสอบการใช้งาน

คุณสามารถตรวจสอบการใช้งาน API ปัจจุบันของโปรเจ็กต์และดูว่าใกล้ถึงขีดจำกัดโควต้าแล้วหรือไม่ได้โดยตรงใน Google Cloud Console

  1. ไปที่หน้า API และบริการ > แดชบอร์ด
  2. เลือก Android Developer ID Status API
  3. คลิกแท็บโควต้า

แดชบอร์ดนี้จะแสดงรายละเอียดปริมาณคำขอตามช่วงเวลา