templates: app / subscription-app answer dataSafety.partialDeletion; teaser Data safety row count 766

This commit is contained in:
CRTkafa 2026-10-12 08:28:16 +08:00
parent 97ab76e9c8
commit 147cee9721
4 changed files with 14 additions and 6 deletions

View file

@ -981,7 +981,9 @@ Checked against each tool's own docs in October 2026:
pay-as-you-go offers as a `relativeDiscount`, Play "developer determined" offers as offers without targeting plus an
offer tag, the ISO 8601 strings for Play billing periods (Google lists them only in words), the Play subscription
benefit length (40, from Play Console), the Data safety sign-up method ids (`PSL_ACM_*`, Google publishes none:
compare with a Console export) and the delete-account URL question id (use `dataSafety.extra`). From the store
compare with a Console export) and the data deletion question ids (`PSL_ACCOUNT_DELETION_URL` is confirmed by a
Play 400; `PSL_SUPPORT_DATA_DELETION_BY_USER` and `PSL_DATA_DELETION_URL` come from reported Play answers, override
with `dataSafety.extra` if an export differs). From the store
operations (built from the App Store Connect API 4.5.1 OpenAPI spec and the cited Help pages, tested with recorded
answers, not yet run live): the first IAP of a type sent through `reviewSubmissionItems` next to the app version
(`--no-submit` leaves the draft for the UI if Apple refuses it), free IAP offer code and win-back prices without a

View file

@ -184,7 +184,7 @@ export const DECL_AT = 0.4, DECL_STEP = 0.25, ASK_AT = 1.5;
export const DATA_SAFETY_ROWS = ['Device or other IDs', 'Approximate location', 'App interactions', 'Diagnostics', 'Name', 'Email address', 'User IDs'];
export const FORM_AT = 1.9, FORM_STEP = 0.14;
/** Data safety CSV rows `storebound check` builds from the config. */
export const DECL_TOTAL = 764;
export const DECL_TOTAL = 766;
export const FORMS_PILL = { at: 3.0, text: 'Data safety answers' };
// ---------- 7 rejections: three findings with a plain reason each, then fixed ----------

View file

@ -81,9 +81,12 @@ const config: ShipConfig = {
encryptedInTransit: true,
deletionRequest: true,
// Sign-up methods. Google does not publish these ids: compare with Play Console > App content > Data safety >
// Export to CSV before the first import. The delete-account URL question that follows: add it under `extra` with
// the exact id from that export, e.g. { question: '<id from the export>', value: 'https://example.com/delete-account' }.
// Export to CSV before the first import. The delete-account URL (PSL_ACCOUNT_DELETION_URL) comes from
// accounts.deletionUrl; `storebound check` names any other row Play requires.
accountCreation: ['PSL_ACM_USER_ID_PASSWORD'],
// Play asks this once there are accounts (PSL_SUPPORT_DATA_DELETION_BY_USER): can people delete some or all of their
// data without deleting the account? Ask the owner. true also needs a page: partialDeletionUrl (default accounts.deletionUrl).
partialDeletion: false,
data: {
PSL_EMAIL: { shared: false, collect: ['functionality', 'account'] },
PSL_USER_ACCOUNT: { shared: false, collect: ['functionality', 'account'] },

View file

@ -109,9 +109,12 @@ const config: ShipConfig = {
encryptedInTransit: true,
deletionRequest: true,
// Sign-up methods. Google does not publish these ids: compare with Play Console > App content > Data safety >
// Export to CSV before the first import. The delete-account URL question that follows: add it under `extra` with
// the exact id from that export, e.g. { question: '<id from the export>', value: 'https://example.com/delete-account' }.
// Export to CSV before the first import. The delete-account URL (PSL_ACCOUNT_DELETION_URL) comes from
// accounts.deletionUrl; `storebound check` names any other row Play requires.
accountCreation: ['PSL_ACM_USER_ID_PASSWORD'],
// Play asks this once there are accounts (PSL_SUPPORT_DATA_DELETION_BY_USER): can people delete some or all of their
// data without deleting the account? Ask the owner. true also needs a page: partialDeletionUrl (default accounts.deletionUrl).
partialDeletion: false,
data: {
PSL_EMAIL: { shared: false, collect: ['functionality', 'account'] },
PSL_USER_ACCOUNT: { shared: false, collect: ['functionality', 'account'] },