ใช้ 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 ของใบรับรองสาธารณะของแอปกับโปรแกรมการยืนยันนักพัฒนาแอป Android แล้วหรือไม่ โดยใช้ลายนิ้วมือ SHA-256 ของใบรับรองสาธารณะที่ให้มาหรือลายนิ้วมือ SHA-256 ของใบรับรองสาธารณะอื่น
- จัดการสถานะการลงทะเบียน 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
- สร้างบัญชี Google Cloud หากคุณยังไม่มี
- เปิด คอนโซล Google Cloud
- สร้างโปรเจ็กต์ Google Cloud
เปิดใช้ API ในโปรเจ็กต์
- ในคอนโซล Google Cloud ให้ไปที่API และบริการ > คลัง
- เลือกโปรเจ็กต์จากเมนูแบบเลื่อนลง
- ค้นหา Android Developer ID Status API
- คลิกเปิดใช้
ตรวจสอบสิทธิ์
API รองรับข้อมูลเข้าสู่ระบบคีย์ API วิธีรับคีย์ API
- ในคอนโซล Google Cloud ให้ไปที่API และบริการ > ข้อมูลเข้าสู่ระบบ
- คลิก + สร้างข้อมูลเข้าสู่ระบบ แล้วเลือก คีย์ API
- กำหนดค่าคีย์แล้วคัดลอก ใช้คีย์นี้ในส่วนหัวของคำขอ
ตรวจสอบสถานะการลงทะเบียนแอป
คุณสามารถค้นหาทรัพยากร 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 200
{
"name": "packages/com.example.app/packageRegistrationStatus",
"state": "REGISTERED"
}
การดำเนินการที่แนะนำ: หากคุณทำการตรวจสอบนี้ในนามของนักพัฒนาแอปรายอื่น ให้แจ้งนักพัฒนาแอปรายนั้นว่ามีการลงทะเบียนชื่อแพ็กเกจแล้ว
การตอบกลับ (ไม่ได้ลงทะเบียน):
หากไม่มีการลงทะเบียนชื่อแพ็กเกจ คุณจะได้รับเนื้อหาการตอบกลับ HTTP ต่อไปนี้พร้อมโค้ดตอบกลับ HTTP 200
{
"name": "packages/com.example.app/packageRegistrationStatus",
"state": "NOT_REGISTERED"
}
การดำเนินการที่แนะนำ: หากคุณทำการตรวจสอบนี้ในนามของนักพัฒนาแอปรายอื่น ให้แจ้งนักพัฒนาแอปรายนั้นว่าไม่มีการลงทะเบียนชื่อแพ็กเกจ
ตัวอย่าง Java
ตัวอย่าง Java นี้เรียก API โดยไม่มีพารามิเตอร์การค้นหาเพื่อตรวจสอบว่ามีการลงทะเบียนชื่อแพ็กเกจหรือไม่
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();
}
}
ยืนยันชื่อแพ็กเกจและลายนิ้วมือของใบรับรองคู่หนึ่งๆ
หากต้องการตรวจสอบว่ามีการลงทะเบียนชื่อแพ็กเกจแอปด้วยลายนิ้วมือ 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 200
{
"name": "packages/com.example.app/packageRegistrationStatus",
"state": "REGISTERED"
}
การดำเนินการที่แนะนำ: หากคุณทำการตรวจสอบนี้ในนามของนักพัฒนาแอปรายอื่น ให้แจ้งนักพัฒนาแอปรายนั้นว่ามีการลงทะเบียนชื่อแพ็กเกจด้วยลายนิ้วมือของใบรับรองที่ให้มา
การตอบกลับ (ลงทะเบียนด้วยลายนิ้วมือของใบรับรองอื่น):
หากมีการลงทะเบียนชื่อแพ็กเกจด้วยลายนิ้วมือ SHA-256 ของใบรับรองอื่นที่ไม่ใช่ที่ให้มา คุณจะได้รับเนื้อหาการตอบกลับ HTTP ต่อไปนี้พร้อมโค้ดตอบกลับ HTTP 200
{
"name": "packages/com.example.app/packageRegistrationStatus",
"state": "REGISTERED_WITH_ANOTHER_CERTIFICATE_FINGERPRINT"
}
การดำเนินการที่แนะนำ: หากคุณทำการตรวจสอบนี้ในนามของนักพัฒนาแอปรายอื่น ให้แจ้งนักพัฒนาแอปรายนั้นว่ามีการลงทะเบียนชื่อแพ็กเกจแล้ว แต่ใช้ลายนิ้วมือของใบรับรองอื่นที่ไม่ใช่ที่ให้มา
การตอบกลับ (ไม่ได้ลงทะเบียน):
หากไม่มีการลงทะเบียนชื่อแพ็กเกจด้วยลายนิ้วมือ SHA-256 ของใบรับรองสาธารณะที่ให้มา คุณจะได้รับเนื้อหาการตอบกลับ HTTP ต่อไปนี้พร้อมโค้ดตอบกลับ HTTP 200
{
"name": "packages/com.example.app/packageRegistrationStatus",
"state": "NOT_REGISTERED"
}
การดำเนินการที่แนะนำ: หากคุณทำการตรวจสอบนี้ในนามของนักพัฒนาแอปรายอื่น ให้แจ้งนักพัฒนาแอปรายนั้นว่าไม่มีการลงทะเบียนชื่อแพ็กเกจด้วยลายนิ้วมือของใบรับรองที่ให้มา
ตัวอย่าง Java
ตัวอย่าง Java นี้รวม certificateFingerprint เป็นพารามิเตอร์การค้นหาที่เข้ารหัส URL อย่างชัดเจนเพื่อยืนยันการจับคู่แพ็กเกจและลายนิ้วมือที่เฉพาะเจาะจง
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();
}
}
ทำความเข้าใจสถานะการลงทะเบียนและการจัดการข้อผิดพลาด
เมื่อคำขอ 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 Bad Request |
INVALID_ARGUMENT |
คำขอมีรูปแบบไม่ถูกต้อง | อย่าลองอีกครั้ง ตรวจสอบฟิลด์รายละเอียดในการตอบกลับข้อผิดพลาดเพื่อระบุการละเมิดฟิลด์ที่เฉพาะเจาะจง แก้ไขเพย์โหลดของคำขอแล้วส่งอีกครั้ง | ไม่ได้ |
401 Unauthorized |
UNAUTHENTICATED |
โทเค็นเพื่อการเข้าถึงหายไป หมดอายุ หรือไม่ถูกต้อง | อย่าลองอีกครั้งทันที ตรวจสอบว่าคุณใช้โทเค็นเพื่อการเข้าถึงหรือคีย์ที่ถูกต้อง | ไม่ได้ |
403 Forbidden |
PERMISSION_DENIED |
คุณได้รับการตรวจสอบสิทธิ์แล้ว แต่โปรเจ็กต์ของคุณไม่มีสิทธิ์เข้าถึง API สาเหตุที่พบบ่อยที่สุดคือคุณไม่ได้เปิดใช้ API ในโปรเจ็กต์ Google Cloud | อย่าลองอีกครั้ง ตรวจสอบว่าคุณใช้รหัสโปรเจ็กต์ที่ถูกต้องและเปิดใช้ API แล้ว | ไม่ได้ |
429 Too Many Requests |
RESOURCE_EXHAUSTED |
คุณใช้โควต้า API สำหรับโปรเจ็กต์เกินแล้ว | หยุดส่งคำขอและลองอีกครั้งหลังจากรอสักครู่ ตรวจสอบโควต้าของโปรเจ็กต์ในคอนโซล Google Cloud | ได้ |
500 Internal Server Error |
INTERNAL |
เกิดข้อผิดพลาดที่ไม่คาดคิดในเซิร์ฟเวอร์ของ Google | ข้อผิดพลาดนี้มักเป็นปัญหาชั่วคราว ลองส่งคำขออีกครั้งโดยใช้กลยุทธ์ Exponential Backoff หากข้อผิดพลาดยังคงอยู่ โปรดติดต่อทีมสนับสนุน | ได้ |
503 Service Unavailable |
UNAVAILABLE |
ไม่สามารถใช้บริการได้ชั่วคราว | ลองส่งคำขออีกครั้งโดยใช้กลยุทธ์ Exponential Backoff | ได้ |
ขีดจำกัดโควต้า
ระบบจะบังคับใช้โควต้าการใช้งานตามโปรเจ็กต์เพื่อให้มั่นใจในความน่าเชื่อถือของบริการ
| เมธอด API | ขีดจำกัดเริ่มต้น (ต่อโปรเจ็กต์) | หมายเหตุ |
|---|---|---|
CheckPackageRegistrationStatus |
1,000 คำขอต่อวัน | ผู้เรียกต้องจัดการการจำกัดอัตราคำขอภายในเพื่อป้องกันการละเมิด |
ตรวจสอบการใช้งาน
คุณสามารถตรวจสอบการใช้งาน API ปัจจุบันของโปรเจ็กต์และดูว่าใกล้ถึงขีดจำกัดโควต้าแล้วหรือยังได้โดยตรงใน Google Cloud Console
- ไปที่หน้า API และบริการ > แดชบอร์ด
- เลือก Android Developer ID Status API
- คลิกแท็บโควต้า
แดชบอร์ดนี้จะแสดงรายละเอียดปริมาณคำขอตามช่วงเวลา