L'API App Store Review consente agli store di terze parti registrati su Google Play tramite il programma Store di terze parti su Play di fornire i dettagli richiesti per le app ospitate nel loro store. Sono inclusi metadati dell'app, schede, file binari APK e dichiarazioni di conformità alle norme.
Per un elenco completo di endpoint, metodi e schemi delle risorse, consulta il Riferimento API App Store Review.
Prima di iniziare
Prima di poter effettuare chiamate all'API App Store Review, devi completare la Guida introduttiva principale per configurare l'accesso all'API, le credenziali di servizio e il progetto Google Cloud. L'API App Store Review prevede al massimo 300 richieste al minuto per app store.
Progettazione e architettura delle API
L'API App Store Review funziona con un pattern di snapshot atomico. Anziché utilizzare sessioni transazionali, carichi i file singolarmente e poi esegui il commit dello stato completo in una singola chiamata atomica:
- Carichi singoli file e asset (APK, immagini e file dei criteri) in chiamate dirette separate.
- Memorizzi nella cache gli ID restituiti per questi file.
- Invii una singola richiesta
UpdateAppStoreHostedAppfinale per eseguire il commit dell'intero stato dell'app ospitata in modo atomico.
1. Registrazione
Per registrare un'app ospitata, chiama il metodo
createappstorehostedapp, specificando il nome del pacchetto dell'app e il nome del pacchetto del tuo store.
Per informazioni dettagliate sugli schemi di richiesta e risposta, consulta il Riferimento API.
2. Caricamenti di file binari e asset
Una volta registrata l'app ospitata, devi caricare i relativi asset utilizzando gli endpoint di caricamento specializzati:
- APK: tutti i binari APK dell'app distribuiti attivamente (utilizzando
uploadapk). - Immagini: asset immagine, come l'icona dell'app e gli screenshot (utilizzando
uploadimage). - Norme: (se pertinente) documentazione relativa alle norme (utilizzando
uploadappstoreapppolicydeclarationfile).
Memorizzazione nella cache e riutilizzo degli asset
Per ottimizzare la larghezza di banda e il rendimento, non caricare di nuovo asset identici.
Tutti i token apkId, imageId e fileId restituiti sono persistenti. Puoi memorizzare nella cache questi ID nel tuo database di backend e riutilizzarli negli aggiornamenti successivi delle app ospitate. Ad esempio, se stai aggiornando la descrizione di un'app ospitata, ma l'icona e gli screenshot dell'app rimangono invariati, utilizza i token imageId memorizzati nella cache nella chiamata di aggiornamento successiva.
3. Assembla e invia
Dopo aver caricato correttamente tutti gli asset e recuperato i rispettivi ID, devi assemblare lo stato completo dell'app ospitata e eseguirne il commit utilizzando il metodo updateappstorehostedapp. Questo metodo accetta una rappresentazione completa e atomica dei dettagli dell'app ospitata, delle schede dello store localizzate, dei set di APK attivi e delle dichiarazioni di sicurezza.
Questa chiamata sostituisce qualsiasi stato attivo precedente con il nuovo stato descritto nella richiesta.
Esempio di corpo della richiesta
Di seguito è riportato un corpo della richiesta JSON realistico e valido dal punto di vista sintattico che illustra tutti gli elementi chiave:
{
"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
]
}
Dichiarazioni relative alle norme
Quando invii o aggiorni le informazioni sull'app utilizzando l'API, devi includere tutte le dichiarazioni richieste dalle norme.
Requisiti della dichiarazione
Rientrano nell'ambito di applicazione le seguenti dichiarazioni:
Obbligatorio per tutte le app per confermare se sono necessarie dichiarazioni aggiuntive:
- App per la salute:comunicaci le funzionalità per la salute utilizzate dall'app per aiutarci a capire quali requisiti previsti dalle norme relative alle app per la salute deve soddisfare.
- Funzionalità finanziarie:le app che offrono funzionalità finanziarie potrebbero dover essere conformi a determinate normative in alcuni paesi o regioni. Invia dettagli precisi e aggiornati sulle funzionalità finanziarie dell'app per permetterci di assicurarci che l'app inviata venga esaminata dai team giusti.
- ID pubblicità:aiutaci a capire se l'app utilizza un ID pubblicità.
- Credenziali di test (dettagli di accesso): se alcune parti dell'app sono limitate in base a dettagli di accesso, abbonamenti, posizione o altre forme di autenticazione, fornisci istruzioni su come accedervi.
- Norme sulla privacy: un link e dettagli sulle norme sulla privacy dell'app.
- Pubblico di destinazione e contenuti:devi comunicarci la fascia d'età target dell'app e altre informazioni relative ai suoi contenuti. Ciò contribuisce a garantire che le app destinate ai bambini siano sicure e appropriate.
- Annunci:devi farci sapere se l'app contiene annunci.
Obbligatorio in base alle condizioni:
- App governative:comunicaci se l'app è destinata all'utilizzo da parte di governi di qualsiasi tipo. Sono inclusi i governi nazionali e statali, le amministrazioni comunali e le autorità locali. In questo modo possiamo assicurarci che l'app inviata venga esaminata dai team giusti. Se questa dichiarazione non viene completata, l'app verrà considerata non governativa.
- Norme sugli standard di sicurezza dei bambini:obbligatorie per le app delle categorie "Social" o "Incontri". Le app delle categorie social o di incontri devono fornire gli standard di sicurezza pubblicati e i dati di contatto per essere conformi alle nostre norme sugli standard di sicurezza dei minori.
- App di notizie e riviste:obbligatorio per le app nella categoria "Notizie e riviste". Aggiungi dettagli sull'app di notizie e riviste per garantire la trasparenza in merito alle entità che la gestiscono.
Struttura della richiesta API
Le dichiarazioni relative alle norme sono fornite all'interno dell'array policyDeclarations nel corpo di UpdateAppStoreHostedAppRequest.
Ogni elemento di questo array è un oggetto AppStoreAppPolicyDeclaration.
AppStoreAppPolicyDeclaration Oggetto:
declarationId(stringa, obbligatorio): l'identificatore univoco della dichiarazione delle norme (ad es.POLICY_DECLARATION_ID_FINANCE,POLICY_DECLARATION_ID_TARGET_AUDIENCE_CONTENT).responses(array diPolicyResponse, obbligatorio): un elenco di risposte alle domande all'interno di quella dichiarazione specifica.
PolicyResponse Oggetto:
questionId(stringa, obbligatorio): l'identificatore univoco della domanda specifica a cui si risponde (ad es.POLICY_QUESTION_ID_FINANCIAL_PRODUCT_TYPES,POLICY_QUESTION_ID_TAC_TARGET_AGE_GROUPS).value(Obbligatorio): la risposta stessa, che può essere uno dei seguenti tipi:booleanResponse: Per le domande con risposta Sì o No.value(booleano)
stringResponse: per risposte in testo normale, inclusi gli URL.value(stringa)
singleChoiceResponse: Quando è possibile selezionare una sola opzione da un elenco.value(stringa): l'ID della scelta di risposta selezionata.
multipleChoiceResponse: quando è possibile selezionare più opzioni.values(array di stringhe): gli ID delle scelte di risposta selezionate.
documentResponse: Per domande che richiedono il caricamento di un documento. Consulta Gestione dei caricamenti di documenti.groupResponse: Per set ripetuti di domande nidificate.keyedGroupResponse: Per insiemi di domande nidificate raggruppate in base a una chiave specifica.
Per esempi di snippet per la dichiarazione, consulta la guida dettagliata.
Gestione dei caricamenti di documenti
Per alcune domande relative alle norme è necessario fornire documenti giustificativi (ad es.
licenze per le funzionalità finanziarie). I documenti non possono essere incorporati direttamente in
UpdateAppStoreHostedAppRequest.
Devi invece:
Carica il documento:utilizza l'endpoint
UploadAppStoreAppPolicyDeclarationFile. Questa è una richiesta di caricamento di contenuti multimediali.fileTypedeve essere impostato suDECLARATION_FILE_TYPE_DOCUMENT.- Endpoint:
POST /androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/policyDeclarationFiles:upload - Le risposte di caricamento riuscito includeranno un
fileId.
- Endpoint:
Fai riferimento all'ID documento:nel
PolicyResponseper la domanda sul documento, utilizza il tipodocumentResponse. Compila il campodocumentIdcon ilfileIdottenuto dal passaggio di caricamento.
PolicyDocumentResponse Oggetto:
documentId(stringa, obbligatorio): l'ID restituito dall'endpointUploadAppStoreAppPolicyDeclarationFile.expiryDate(data, facoltativo): la data di scadenza del documento, se applicabile.nonExpiring(booleano, facoltativo): impostalo sutruese il documento non scade.
Esempio per la risposta del documento:
// 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. Controllare la disponibilità
Una volta eseguito il commit dello stato dell'app ospitata utilizzando
UpdateAppStoreHostedApp,
l'app viene elaborata automaticamente e contrassegnata come pubblicata per impostazione predefinita in
Google Play per lo store di terze parti.
Per controllare la disponibilità dell'app dopo il commit, chiama il metodo
updateappstorehostedapppublishstatus
per aggiornarne lo stato:
- Annullamento della pubblicazione di un'app: per rendere non disponibile l'app ospitata, imposta il campo
publishStatesuAPP_STORE_APP_PUBLISH_STATE_UNPUBLISHED. - Ripubblicazione di un'app: per rendere nuovamente disponibile un'app precedentemente non pubblicata senza modificare le schede o ricaricare gli asset, imposta il campo
publishStatesuAPP_STORE_APP_PUBLISH_STATE_PUBLISHED.