App Store Review API memungkinkan app store pihak ketiga yang terdaftar di Google Play melalui program App store pihak ketiga di Google Play untuk memberikan detail yang diperlukan bagi aplikasi yang dihosting di app store mereka. Hal ini mencakup metadata aplikasi, listingan, program biner APK, dan pernyataan kepatuhan terhadap kebijakan.
Untuk mengetahui daftar lengkap endpoint, metode, dan skema resource, lihat Referensi App Store Review API.
Sebelum Memulai
Anda harus menyelesaikan Panduan Memulai utama untuk menyiapkan akses API, kredensial layanan, dan project Google Cloud sebelum dapat melakukan panggilan ke App Store Review API. App Store Review API mendukung maksimal 300 permintaan per menit per app store.
Desain & Arsitektur API
App Store Review API beroperasi pada pola snapshot atomik. Alih-alih menggunakan sesi transaksional, Anda harus mengupload file satu per satu, lalu melakukan commit status lengkap dalam satu panggilan atomik:
- Anda harus mengupload file dan aset individual (APK, gambar, dan file kebijakan) dalam panggilan langsung yang terpisah.
- Anda harus meng-cache ID yang ditampilkan untuk file-file tersebut.
- Anda harus mengirimkan satu permintaan
UpdateAppStoreHostedAppterakhir untuk melakukan commit status aplikasi yang dihosting secara atomik.
1. Pendaftaran
Untuk mendaftarkan aplikasi yang dihosting, panggil metode
createappstorehostedapp
dengan menentukan nama paket aplikasi dan nama paket app store Anda.
Untuk mengetahui detail skema permintaan dan respons, lihat referensi API.
2. Upload program biner dan aset
Setelah aplikasi yang dihosting didaftarkan, Anda harus mengupload asetnya menggunakan endpoint upload khusus:
- APK: Semua program biner APK aplikasi yang didistribusikan secara aktif (menggunakan
uploadapk). - Gambar: Aset gambar, seperti ikon aplikasi dan screenshot (menggunakan
uploadimage). - Kebijakan: (Jika relevan) Dokumentasi terkait kebijakan (menggunakan
uploadappstoreapppolicydeclarationfile).
Melakukan Cache & Penggunaan Ulang Aset
Untuk mengoptimalkan bandwidth dan performa, jangan mengupload ulang aset yang identik.
Semua token apkId, imageId, dan fileId yang ditampilkan bersifat persisten. Anda dapat
meng-cache ID ini di database backend Anda sendiri dan menggunakannya kembali dalam update aplikasi
yang dihosting berikutnya. Misalnya, jika Anda memperbarui deskripsi aplikasi yang dihosting, tetapi
ikon aplikasi dan screenshot tetap tidak berubah, gunakan token imageId yang di-cache
dalam permintaan update berikutnya.
3. Susun dan commit
Setelah semua aset berhasil diupload dan ID masing-masing diperoleh, Anda
harus menyusun status aplikasi yang dihosting sepenuhnya dan melakukan commit menggunakan metode
updateappstorehostedapp. Metode ini menerima representasi lengkap dan atomik dari detail aplikasi yang dihosting,
listingan Google Play Store yang dilokalkan, set APK aktif, dan pernyataan
keamanan.
Panggilan ini menggantikan status aktif sebelumnya dengan status baru yang dijelaskan dalam permintaan.
Contoh Isi Permintaan
Berikut adalah isi permintaan JSON yang realistis dan valid secara sintaksis yang menggambarkan semua elemen utama:
{
"appStorePackageName": "com.example.thirdparty.store",
"packageName": "com.example.hostedapp.game",
"appDetails": {
"developerName": "Adventure Games Studio Ltd.",
"contactEmail": "support@adventuregames.example.com",
"developerWebsite": "https://adventuregames.example.com"
},
"activeLocalizedStoreListings": [
{
"languageCode": "en-US",
"appName": "Super Quest Legends",
"shortDescription": "An epic fantasy RPG adventure.",
"fullDescription": "Super Quest Legends is an immersive action RPG featuring real-time battles, customizable classes, and a deep fantasy narrative. Journey through a magical realm, fight epic bosses, and team up with friends in dungeon raids.",
"appIconId": "987123",
"screenshotId": [
"102938",
"475869",
"384756"
],
"videoLink": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
},
{
"languageCode": "es-ES",
"appName": "Super Quest Leyendas",
"shortDescription": "Una aventura épica de RPG fantástico.",
"fullDescription": "Super Quest Leyendas es un RPG de acción inmersivo con batallas en tiempo real, clases personalizables y una profunda narrativa de fantasía. Viaja a través de un reino mágico, lucha contra jefes épicos y únete a amigos en incursiones.",
"appIconId": "987123",
"screenshotId": [
"102938",
"475869",
"384756"
]
}
],
"activeApks": {
"activeApkSets": [
{
"baseApkId": "554433"
},
{
"baseApkId": "990011"
}
]
},
"policyDeclarations": [
{
"declarationId": "POLICY_DECLARATION_ID_TARGET_AUDIENCE_CONTENT",
"responses": [
{
"questionId": "POLICY_QUESTION_ID_TAC_TARGET_AGE_GROUPS",
"multipleChoiceResponse": {
"values": [
"POLICY_RESPONSE_CHOICE_ID_TAC_AGE_EIGHTEEN_AND_ABOVE"
]
}
},
// ... other responses for TAC
]
},
{
"declarationId": "POLICY_DECLARATION_ID_ADVERTISING_ID",
"responses": [
{
"questionId": "POLICY_QUESTION_ID_AD_ID_IS_USED",
"booleanResponse": {
"value": false
}
}
// ... other responses for AD_ID
]
}
// ... other declarations
]
}
Pernyataan Kebijakan
Saat mengirimkan atau memperbarui informasi aplikasi menggunakan API, Anda harus menyertakan pernyataan kebijakan yang diperlukan.
Persyaratan Pernyataan
Pernyataan berikut termasuk dalam cakupan:
Diwajibkan untuk semua aplikasi guna mengonfirmasi apakah pernyataan tambahan diperlukan:
- Aplikasi Kesehatan: Beri tahu kami fitur kesehatan apa yang digunakan aplikasi agar kami dapat menentukan persyaratan mana yang harus dipenuhi aplikasi berdasarkan kebijakan Aplikasi kesehatan.
- Fitur Keuangan: Aplikasi yang menyediakan fitur keuangan mungkin harus mematuhi peraturan tertentu di beberapa negara atau wilayah. Kirimkan detail fitur keuangan yang akurat dan terbaru di aplikasi Anda untuk membantu kami memastikan tim yang tepat meninjau kiriman Anda.
- ID Iklan: Membantu kami memahami apakah aplikasi menggunakan ID iklan atau tidak.
- Kredensial Pengujian (Detail login): Jika ada bagian aplikasi yang dibatasi berdasarkan detail login, langganan, lokasi, atau bentuk autentikasi lainnya, berikan petunjuk cara mengaksesnya.
- Kebijakan Privasi: Link ke kebijakan privasi aplikasi beserta detailnya.
- Audiens Target dan Konten: Anda harus memberi tahu kami kelompok usia target aplikasi, dan informasi lainnya tentang konten aplikasi tersebut. Hal ini membantu memastikan bahwa aplikasi yang didesain untuk anak-anak terjamin aman dan sesuai.
- Iklan: Anda harus memberi tahu kami apakah aplikasi berisi iklan atau tidak.
Wajib Bersyarat:
- Aplikasi Pemerintah: Beri tahu kami apakah aplikasi akan digunakan oleh berbagai tingkat pemerintah. Pemerintah dalam hal ini termasuk pemerintah pusat, negara bagian, dan kota, serta otoritas setempat. Hal ini membantu kami untuk memastikan tim yang tepat meninjau kiriman Anda. Jika pernyataan ini tidak diselesaikan, aplikasi akan dianggap bukan aplikasi pemerintah.
- Standar Keselamatan Anak: Diwajibkan untuk aplikasi dalam kategori "Sosial" atau "Kencan". Aplikasi dalam kategori sosial atau kencan harus memberikan standar keselamatan yang dipublikasikan dan informasi kontak untuk mematuhi kebijakan standar keselamatan anak kami.
- Aplikasi Berita dan Majalah: Diwajibkan untuk aplikasi dalam kategori "Berita dan Majalah". Tambahkan detail tentang aplikasi berita dan majalah untuk memberikan transparansi terkait entitas yang menaungi aplikasi tersebut.
Struktur Permintaan API
Pernyataan kebijakan diberikan dalam array policyDeclarations
pada isi
UpdateAppStoreHostedAppRequest.
Setiap item dalam array ini adalah objek AppStoreAppPolicyDeclaration.
Objek AppStoreAppPolicyDeclaration:
declarationId(string, Wajib): ID unik untuk deklarasi kebijakan (misalnyaPOLICY_DECLARATION_ID_FINANCE,POLICY_DECLARATION_ID_TARGET_AUDIENCE_CONTENT).responses(ArrayPolicyResponse, Wajib): Daftar jawaban untuk pertanyaan dalam pernyataan tertentu tersebut.
Objek PolicyResponse:
questionId(string, Wajib): ID unik untuk pertanyaan tertentu yang dijawab (misalnya,POLICY_QUESTION_ID_FINANCIAL_PRODUCT_TYPES,POLICY_QUESTION_ID_TAC_TARGET_AGE_GROUPS).value(Wajib): Jawaban itu sendiri, yang dapat berupa salah satu jenis berikut:booleanResponse: Untuk pertanyaan Ya atau Tidak.value(boolean)
stringResponse: Untuk jawaban teks biasa, termasuk URL.value(string)
singleChoiceResponse: Jika hanya satu opsi yang dapat dipilih dari daftar.value(string): ID pilihan respons yang dipilih.
multipleChoiceResponse: Jika beberapa opsi dapat dipilih.values(Array string): ID pilihan respons yang dipilih.
documentResponse: Untuk pertanyaan yang memerlukan upload dokumen. Lihat Menangani Upload Dokumen.groupResponse: Untuk mengulang kumpulan pertanyaan bertingkat.keyedGroupResponse: Untuk kumpulan pertanyaan bertingkat yang dikelompokkan menurut kunci tertentu.
Untuk contoh cuplikan deklarasi, lihat panduan mendetail.
Menangani Upload Dokumen
Beberapa pertanyaan kebijakan mengharuskan Anda memberikan dokumen pendukung (misalnya,
lisensi untuk Fitur Keuangan). Dokumen tidak dapat disematkan langsung di
UpdateAppStoreHostedAppRequest.
Sebagai gantinya, Anda harus:
Mengupload Dokumen: Gunakan endpoint
UploadAppStoreAppPolicyDeclarationFile. Ini adalah permintaan upload media.fileTypeharus disetel keDECLARATION_FILE_TYPE_DOCUMENT.- Endpoint:
POST /androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/policyDeclarationFiles:upload - Respons upload yang berhasil akan menyertakan
fileId.
- Endpoint:
Merujuk ID Dokumen: Dalam
PolicyResponseuntuk pertanyaan dokumen, gunakan jenisdocumentResponse. Isi kolomdocumentIddenganfileIdyang diperoleh dari langkah upload.
Objek PolicyDocumentResponse:
documentId(string, Wajib): ID yang ditampilkan dari endpointUploadAppStoreAppPolicyDeclarationFile.expiryDate(Tanggal, Opsional): Tanggal habis masa berlaku dokumen, jika berlaku.nonExpiring(boolean, Opsional): Setel ketruejika dokumen tidak berakhir.
Contoh Respons Dokumen:
// Inside a PolicyResponse object
{
"questionId": "POLICY_QUESTION_ID_FINANCE_CRYPTO_US_FINCEN_LICENSE", // Example ID
"documentResponse": {
"documentId": "123456789", // The fileId from upload
"expiryDate": {
"year": 2027,
"month": 6,
"day": 1
}
}
}
4. Mengontrol ketersediaan
Setelah Anda melakukan commit status aplikasi yang dihosting menggunakan
UpdateAppStoreHostedApp,
aplikasi akan otomatis diproses dan ditandai sebagai dipublikasikan secara default di
Google Play untuk app store pihak ketiga.
Untuk mengontrol ketersediaan aplikasi setelah melakukan commit, panggil metode
updateappstorehostedapppublishstatus
untuk memperbarui statusnya:
- Membatalkan Publikasi Aplikasi: Agar aplikasi yang dihosting tidak tersedia, tetapkan kolom
publishStatekeAPP_STORE_APP_PUBLISH_STATE_UNPUBLISHED. - Mempublikasikan Ulang Aplikasi: Untuk membuat aplikasi yang sebelumnya tidak dipublikasikan tersedia
lagi tanpa mengubah listingan atau mengupload ulang aset, tetapkan kolom
publishStatekeAPP_STORE_APP_PUBLISH_STATE_PUBLISHED.