diff --git a/RevenueCatUI/CustomerCenter/ViewModels/ManageSubscriptionsViewModel.swift b/RevenueCatUI/CustomerCenter/ViewModels/ManageSubscriptionsViewModel.swift index b67aeb70c8..dd45b19b0b 100644 --- a/RevenueCatUI/CustomerCenter/ViewModels/ManageSubscriptionsViewModel.swift +++ b/RevenueCatUI/CustomerCenter/ViewModels/ManageSubscriptionsViewModel.swift @@ -48,11 +48,6 @@ class ManageSubscriptionsViewModel: ObservableObject { state = .notLoaded } - init(configuration: CustomerCenterConfigData) { - state = .notLoaded - self.configuration = configuration - } - init(configuration: CustomerCenterConfigData, subscriptionInformation: SubscriptionInformation) { self.configuration = configuration self.subscriptionInformation = subscriptionInformation @@ -85,6 +80,14 @@ class ManageSubscriptionsViewModel: ObservableObject { } } + func loadCustomerCenterConfig() async { + do { + self.configuration = try await Purchases.shared.loadCustomerCenter() + } catch { + self.state = .error(error) + } + } + func handleAction(for path: CustomerCenterConfigData.HelpPath) { switch path.type { case .missingPurchase: diff --git a/RevenueCatUI/CustomerCenter/Views/ManageSubscriptionsView.swift b/RevenueCatUI/CustomerCenter/Views/ManageSubscriptionsView.swift index 0ab02043a4..c768b78054 100644 --- a/RevenueCatUI/CustomerCenter/Views/ManageSubscriptionsView.swift +++ b/RevenueCatUI/CustomerCenter/Views/ManageSubscriptionsView.swift @@ -50,6 +50,7 @@ private extension ManageSubscriptionsView { func checkAndLoadSubscriptionInformation() async { if !viewModel.isLoaded { await viewModel.loadSubscriptionInformation() + await viewModel.loadCustomerCenterConfig() } } diff --git a/Sources/CustomerCenter/CustomerCenterData.swift b/Sources/CustomerCenter/CustomerCenterData.swift index 3a27ee41c9..ae2f2d0cd6 100644 --- a/Sources/CustomerCenter/CustomerCenterData.swift +++ b/Sources/CustomerCenter/CustomerCenterData.swift @@ -186,7 +186,7 @@ extension CustomerCenterConfigData.HelpPath { extension CustomerCenterConfigData.LocalizedString { init(from response: CustomerCenterConfigResponse.LocalizedString) { - self.en_US = response.en_US + self.en_US = response.en_us } } diff --git a/Sources/Networking/Responses/CustomerCenterConfigResponse.swift b/Sources/Networking/Responses/CustomerCenterConfigResponse.swift index 9e5dabfadd..baba6f4838 100644 --- a/Sources/Networking/Responses/CustomerCenterConfigResponse.swift +++ b/Sources/Networking/Responses/CustomerCenterConfigResponse.swift @@ -36,7 +36,7 @@ struct CustomerCenterConfigResponse { enum PathType: String { - case missingPurchase = "MISSING_PURCHASE" + case missingPurchase = "MISSING_ENTITLEMENT" case refundRequest = "REFUND_REQUEST" case changePlans = "CHANGE_PLANS" case cancel = "CANCEL" @@ -53,6 +53,10 @@ struct CustomerCenterConfigResponse { let firstSeen: String + enum CodingKeys: String, CodingKey { + case firstSeen = "first_seen" + } + } } @@ -77,15 +81,25 @@ struct CustomerCenterConfigResponse { struct LocalizedString { // swiftlint:disable:next identifier_name - let en_US: String + let en_us: String + + enum CodingKeys: String, CodingKey { + case en_us = "en_US" + } } struct Appearance { let mode: String - let light: String - let dark: String + let light: AppearanceMode + let dark: AppearanceMode + + struct AppearanceMode { + + let accentColor: String + + } } @@ -184,12 +198,11 @@ struct CustomerCenterConfigResponse { } } } - """ do { - let data = try JSONSerialization.data(withJSONObject: jsonData, options: []) - return try JSONDecoder.default.decode(jsonData: data, logErrors: true) + guard let data = jsonData.data(using: .utf8, allowLossyConversion: false) else { return nil } + return try JSONDecoder().decode(CustomerCenterConfigResponse.self, from: data) } catch { print(error) return nil @@ -209,5 +222,6 @@ extension CustomerCenterConfigResponse.HelpPath.FeedbackSurvey: Codable, Equatab extension CustomerCenterConfigResponse.HelpPath.FeedbackSurvey.Option: Codable, Equatable {} extension CustomerCenterConfigResponse.LocalizedString: Codable, Equatable {} extension CustomerCenterConfigResponse.Appearance: Codable, Equatable {} +extension CustomerCenterConfigResponse.Appearance.AppearanceMode: Codable, Equatable {} extension CustomerCenterConfigResponse: HTTPResponseBody {}