Recovery notes

  • restorePurchases() is the user-facing restore path.
  • syncPurchases() is the quiet reconciliation path.
  • drainReceiptQueueAndRefreshCustomer() is the advanced explicit queue-drain path.
  • queued receipt retries should stay queued until the backend confirms them.

Attribution and profile context

Use dedicated helper APIs for attribution and integration identifiers. Do not overload custom attributes with reserved or campaign-specific fields.