2.0.2: evento de fallo de compra + analytics off en UI tests
premium_purchase_failed con reason (cancelled/pending/unverified/error) en todas las salidas no exitosas de StoreManager.purchase. Hasta ahora un usuario que se echaba atras y uno al que le fallaba la compra eran indistinguibles: los dos dejaban un premium_upgrade_tapped huerfano. El caso de Aleman (6 taps en 2 dias, cero compras) no se puede diagnosticar sin esto. Los UI tests dejan de mandar eventos a GA4 de produccion: launch argument UITEST_DISABLE_ANALYTICS que hace no-op logEvent y apaga la recoleccion de Firebase, para cortar tambien los automaticos (first_open, session_start, screen_view). Ya habian contaminado los datos: los eventos de pasos 5/6 bajo la version 2.0 eran ejecuciones de test, no usuarios. Detalle que costo encontrar: setAnalyticsCollectionEnabled persiste entre lanzamientos, asi que se escribe siempre (!isDisabled) y no solo al apagar. Si no, un unico test dejaba analytics muerto para siempre en esa instalacion. Verificado por pares de lanzamientos: con flag acaba en disabled, sin flag vuelve a enabled. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012Ks8uUcMA9mjypVK7F2Pkt
This commit is contained in:
@@ -85,16 +85,25 @@ final class StoreManager: ObservableObject {
|
||||
AnalyticsService.logPremiumPurchased(environment: Self.environmentName(for: transaction))
|
||||
return .success
|
||||
}
|
||||
AnalyticsService.logPremiumPurchaseFailed(reason: "unverified", productId: product.id)
|
||||
return .failed
|
||||
case .userCancelled:
|
||||
AnalyticsService.logPremiumPurchaseFailed(reason: "cancelled", productId: product.id)
|
||||
return .cancelled
|
||||
case .pending:
|
||||
AnalyticsService.logPremiumPurchaseFailed(reason: "pending", productId: product.id)
|
||||
return .pending
|
||||
@unknown default:
|
||||
AnalyticsService.logPremiumPurchaseFailed(reason: "unknown", productId: product.id)
|
||||
return .failed
|
||||
}
|
||||
} catch {
|
||||
CrashlyticsService.record(error, context: "purchase")
|
||||
AnalyticsService.logPremiumPurchaseFailed(
|
||||
reason: "error",
|
||||
productId: product.id,
|
||||
detail: error.localizedDescription
|
||||
)
|
||||
print("Purchase failed: \(error)")
|
||||
return .failed
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user