diff --git a/README.md b/README.md index 9b0f83e..b61277e 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/media/teaser/script.js b/media/teaser/script.js index c3be9df..2531ccb 100644 --- a/media/teaser/script.js +++ b/media/teaser/script.js @@ -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 ---------- diff --git a/templates/profiles/app/storebound.config.ts b/templates/profiles/app/storebound.config.ts index e4d5dbf..db57c69 100644 --- a/templates/profiles/app/storebound.config.ts +++ b/templates/profiles/app/storebound.config.ts @@ -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: '', 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'] }, diff --git a/templates/profiles/subscription-app/storebound.config.ts b/templates/profiles/subscription-app/storebound.config.ts index f77ac4a..ae546fa 100644 --- a/templates/profiles/subscription-app/storebound.config.ts +++ b/templates/profiles/subscription-app/storebound.config.ts @@ -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: '', 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'] },