diff --git a/iphone/Maps/Core/Subscriptions/MWMPurchaseManager.h b/iphone/Maps/Core/Subscriptions/MWMPurchaseManager.h index 8f5b04b2f2..55cdc03924 100644 --- a/iphone/Maps/Core/Subscriptions/MWMPurchaseManager.h +++ b/iphone/Maps/Core/Subscriptions/MWMPurchaseManager.h @@ -6,7 +6,8 @@ typedef NS_ENUM(NSUInteger, MWMValidationResult) { MWMValidationResultValid, MWMValidationResultNotValid, - MWMValidationResultError, + MWMValidationResultServerError, + MWMValidationResultAuthError }; typedef void (^ValidateReceiptCallback)(NSString * serverId, MWMValidationResult validationResult); diff --git a/iphone/Maps/Core/Subscriptions/MWMPurchaseManager.mm b/iphone/Maps/Core/Subscriptions/MWMPurchaseManager.mm index bc4ac9fd80..40abd95ff0 100644 --- a/iphone/Maps/Core/Subscriptions/MWMPurchaseManager.mm +++ b/iphone/Maps/Core/Subscriptions/MWMPurchaseManager.mm @@ -107,6 +107,7 @@ [self serverError]; break; } + GetFramework().GetPurchase()->SetValidationCallback(nullptr); }); Purchase::ValidationInfo vi; vi.m_receiptData = [receiptData base64EncodedStringWithOptions:0].UTF8String; @@ -149,13 +150,19 @@ - (void)serverError { if (self.callback) - self.callback(self.serverId, MWMValidationResultError); + self.callback(self.serverId, MWMValidationResultServerError); +} + +- (void)authError +{ + if (self.callback) + self.callback(self.serverId, MWMValidationResultAuthError); } - (void)appstoreError:(NSError *)error { if (self.callback) - self.callback(self.serverId, MWMValidationResultError); + self.callback(self.serverId, MWMValidationResultServerError); } - (void)setAdsDisabled:(BOOL)disabled diff --git a/iphone/Maps/Core/Subscriptions/SubscriptionManager.swift b/iphone/Maps/Core/Subscriptions/SubscriptionManager.swift index d7d9b9c285..bcd355a110 100644 --- a/iphone/Maps/Core/Subscriptions/SubscriptionManager.swift +++ b/iphone/Maps/Core/Subscriptions/SubscriptionManager.swift @@ -67,28 +67,33 @@ class SubscriptionManager: NSObject { private func validate(_ refreshReceipt: Bool) { MWMPurchaseManager.shared() .validateReceipt(MWMPurchaseManager.adsRemovalServerId(), - refreshReceipt: refreshReceipt) { (serverId, validationResult) in - if validationResult == .error { - Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode : 2]) - self.restorationCallback?(.error) - self.restorationCallback = nil - return - } else { - if validationResult == .valid { - Statistics.logEvent(kStatInappValidationSuccess) - Statistics.logEvent(kStatInappProductDelivered, - withParameters: [kStatVendor : MWMPurchaseManager.adsRemovalVendorId()]) - } else { - Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode : 0]) - } + refreshReceipt: refreshReceipt) { (_, validationResult) in + self.logEvents(validationResult) + if validationResult == .valid || validationResult == .notValid { MWMPurchaseManager.shared().setAdsDisabled(validationResult == .valid) self.paymentQueue.transactions .filter { Subscription.productIds.contains($0.payment.productIdentifier) && ($0.transactionState == .purchased || $0.transactionState == .restored) } .forEach { self.paymentQueue.finishTransaction($0) } - self.restorationCallback?(validationResult) - self.restorationCallback = nil } + + self.restorationCallback?(validationResult) + self.restorationCallback = nil + } + } + + private func logEvents(_ validationResult: MWMValidationResult) { + switch validationResult { + case .valid: + Statistics.logEvent(kStatInappValidationSuccess) + Statistics.logEvent(kStatInappProductDelivered, + withParameters: [kStatVendor : MWMPurchaseManager.adsRemovalVendorId()]) + case .notValid: + Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode : 0]) + case .serverError: + Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode : 2]) + case .authError: + Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode : 1]) } } } diff --git a/iphone/Maps/UI/Settings/MWMSettingsViewController.mm b/iphone/Maps/UI/Settings/MWMSettingsViewController.mm index 4cb67f9379..3e9a3fe3c3 100644 --- a/iphone/Maps/UI/Settings/MWMSettingsViewController.mm +++ b/iphone/Maps/UI/Settings/MWMSettingsViewController.mm @@ -385,7 +385,8 @@ using namespace power_management; case MWMValidationResultNotValid: alertText = L(@"restore_no_subscription_alert"); break; - case MWMValidationResultError: + case MWMValidationResultServerError: + case MWMValidationResultAuthError: alertText = L(@"restore_error_alert"); break; }