[iOS] Codestyle

This commit is contained in:
Alexander Boriskov 2020-07-23 22:49:28 +03:00 committed by Arsentiy Milchakov
parent d09ed36a23
commit 3be5d80e40
8 changed files with 179 additions and 197 deletions

View file

@ -9,52 +9,48 @@ FOUNDATION_EXPORT const unsigned char CoreApiVersionString[];
#import <CoreApi/DeepLinkSearchData.h>
#import <CoreApi/DeepLinkSubscriptionData.h>
#import <CoreApi/Logger.h>
#import <CoreApi/MWMBookmarkGroup.h>
#import <CoreApi/MWMBookmarksManager.h>
#import <CoreApi/MWMBookmarksObserver.h>
#import <CoreApi/MWMCarPlayBookmarkObject.h>
#import <CoreApi/MWMBookmarkGroup.h>
#import <CoreApi/MWMCommon.h>
#import <CoreApi/MWMEye.h>
#import <CoreApi/MWMGeoUtil.h>
#import <CoreApi/MWMFrameworkHelper.h>
#import <CoreApi/MWMGeoUtil.h>
#import <CoreApi/MWMGuidesManager.h>
#import <CoreApi/MWMMapNodeAttributes.h>
#import <CoreApi/MWMMapOverlayManager.h>
#import <CoreApi/MWMMapSearchResult.h>
#import <CoreApi/MWMMapUpdateInfo.h>
#import <CoreApi/MWMNetworkPolicy.h>
#import <CoreApi/MWMPurchaseValidation.h>
#import <CoreApi/MWMSearchFrameworkHelper.h>
#import <CoreApi/MWMStorage.h>
#import <CoreApi/MWMTag.h>
#import <CoreApi/MWMTagGroup.h>
#import <CoreApi/MWMTypes.h>
#import <CoreApi/MWMUser.h>
#import <CoreApi/MWMUTM.h>
#import <CoreApi/MWMUser.h>
#import <CoreApi/PromoAfterBookingCampaignAdapter.h>
#import <CoreApi/PromoDiscoveryCampaignAdapter.h>
#import <CoreApi/WebApi.h>
#import <CoreApi/DeepLinkParser.h>
#import <CoreApi/DeepLinkSearchData.h>
#import <CoreApi/DeepLinkSubscriptionData.h>
#import <CoreApi/Logger.h>
#import <CoreApi/MWMMapNodeAttributes.h>
#import <CoreApi/MWMMapSearchResult.h>
#import <CoreApi/MWMMapUpdateInfo.h>
#import <CoreApi/MWMPurchaseValidation.h>
#pragma mark - Place Page
#import <CoreApi/CoreBanner.h>
#import <CoreApi/PlacePageData.h>
#import <CoreApi/CatalogPromoData.h>
#import <CoreApi/CatalogPromoItem.h>
#import <CoreApi/PlacePageButtonsData.h>
#import <CoreApi/PlacePageBookmarkData.h>
#import <CoreApi/PlacePagePreviewData.h>
#import <CoreApi/PlacePageInfoData.h>
#import <CoreApi/CoreBanner.h>
#import <CoreApi/ElevationProfileData.h>
#import <CoreApi/GuidesGalleryItem.h>
#import <CoreApi/HotelBookingData.h>
#import <CoreApi/HotelRooms.h>
#import <CoreApi/HotelRoom.h>
#import <CoreApi/HotelRooms.h>
#import <CoreApi/IOpeningHoursLocalization.h>
#import <CoreApi/OpeningHours.h>
#import <CoreApi/PlacePageBookmarkData.h>
#import <CoreApi/PlacePageButtonsData.h>
#import <CoreApi/PlacePageData.h>
#import <CoreApi/PlacePageInfoData.h>
#import <CoreApi/PlacePagePreviewData.h>
#import <CoreApi/UgcData.h>
#import <CoreApi/UgcSummaryRating.h>
#import <CoreApi/ElevationProfileData.h>
#import <CoreApi/OpeningHours.h>
#import <CoreApi/IOpeningHoursLocalization.h>
#import <CoreApi/GuidesGalleryItem.h>

View file

@ -6,22 +6,22 @@ FOUNDATION_EXPORT const unsigned char CoreApiVersionString[];
#import <CoreApi/AppInfo.h>
#import <CoreApi/Framework.h>
#import <CoreApi/MWMBookmarkGroup.h>
#import <CoreApi/MWMBookmarksManager.h>
#import <CoreApi/MWMBookmarksObserver.h>
#import <CoreApi/MWMCarPlayBookmarkObject.h>
#import <CoreApi/MWMBookmarkGroup.h>
#import <CoreApi/MWMCommon.h>
#import <CoreApi/MWMEye.h>
#import <CoreApi/MWMFrameworkHelper.h>
#import <CoreApi/MWMGuidesManager.h>
#import <CoreApi/MWMMapOverlayManager.h>
#import <CoreApi/MWMNetworkPolicy.h>
#import <CoreApi/MWMPurchaseValidation.h>
#import <CoreApi/MWMSearchFrameworkHelper.h>
#import <CoreApi/MWMStorage.h>
#import <CoreApi/MWMTag.h>
#import <CoreApi/MWMTagGroup.h>
#import <CoreApi/MWMMapOverlayManager.h>
#import <CoreApi/MWMTypes.h>
#import <CoreApi/MWMUser.h>
#import <CoreApi/MWMUTM.h>
#import <CoreApi/MWMTrialEligibility.h>
#import <CoreApi/MWMPurchaseValidation.h>
#import <CoreApi/MWMTypes.h>
#import <CoreApi/MWMUTM.h>
#import <CoreApi/MWMUser.h>

View file

@ -2,11 +2,12 @@
#include <CoreApi/Framework.h>
static NSMutableDictionary<NSString *, NSMutableArray<ValidatePurchaseCallback> *> *callbacks = [NSMutableDictionary dictionary];
static NSMutableDictionary<NSString *, NSMutableArray<ValidatePurchaseCallback> *> *callbacks =
[NSMutableDictionary dictionary];
@interface MWMPurchaseValidation ()
@property (nonatomic, copy) NSString *vendorId;
@property(nonatomic, copy) NSString *vendorId;
@end
@ -42,17 +43,18 @@ static NSMutableDictionary<NSString *, NSMutableArray<ValidatePurchaseCallback>
case Purchase::ValidationCode::ServerError: {
result = MWMPurchaseValidationResultError;
break;
case Purchase::ValidationCode::AuthError:
result = MWMPurchaseValidationResultAuthError;
break;
case Purchase::ValidationCode::AuthError:
result = MWMPurchaseValidationResultAuthError;
break;
}
}
NSString *serverId = @(validationResponse.m_info.m_serverId.c_str());
NSMutableArray<ValidatePurchaseCallback> *callbackArray = callbacks[serverId];
[callbackArray enumerateObjectsUsingBlock:^(ValidatePurchaseCallback _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
obj(result);
}];
[callbackArray
enumerateObjectsUsingBlock:^(ValidatePurchaseCallback _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) {
obj(result);
}];
[callbacks removeObjectForKey:serverId];
});

View file

@ -2,11 +2,12 @@
#include <CoreApi/Framework.h>
static NSMutableDictionary<NSString *, NSMutableArray<CheckTrialEligibilityCallback> *> *callbacks = [NSMutableDictionary dictionary];
static NSMutableDictionary<NSString *, NSMutableArray<CheckTrialEligibilityCallback> *> *callbacks =
[NSMutableDictionary dictionary];
@interface MWMTrialEligibility ()
@property (nonatomic, copy) NSString *vendorId;
@property(nonatomic, copy) NSString *vendorId;
@end
@ -17,11 +18,11 @@ static NSMutableDictionary<NSString *, NSMutableArray<CheckTrialEligibilityCallb
if (self) {
_vendorId = vendorId;
}
return self;
}
-(void)checkTrialEligibility:(NSString *)serverId callback:(CheckTrialEligibilityCallback)callback {
- (void)checkTrialEligibility:(NSString *)serverId callback:(CheckTrialEligibilityCallback)callback {
NSURL *receiptUrl = [NSBundle mainBundle].appStoreReceiptURL;
NSData *receiptData = [NSData dataWithContentsOfURL:receiptUrl];
if (!receiptData) {
@ -29,8 +30,8 @@ static NSMutableDictionary<NSString *, NSMutableArray<CheckTrialEligibilityCallb
callback(MWMCheckTrialEligibilityResultNoReceipt);
return;
}
GetFramework().GetPurchase()->SetTrialEligibilityCallback([serverId](auto trialEligibilityCode){
GetFramework().GetPurchase()->SetTrialEligibilityCallback([serverId](auto trialEligibilityCode) {
MWMCheckTrialEligibilityResult result;
switch (trialEligibilityCode) {
case Purchase::TrialEligibilityCode::Eligible:
@ -40,16 +41,16 @@ static NSMutableDictionary<NSString *, NSMutableArray<CheckTrialEligibilityCallb
case Purchase::TrialEligibilityCode::ServerError:
result = MWMCheckTrialEligibilityResultServerError;
}
NSMutableArray<CheckTrialEligibilityCallback> *callbackArray = callbacks[serverId];
[callbackArray enumerateObjectsUsingBlock:^(CheckTrialEligibilityCallback _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
obj(result);
}];
[callbackArray
enumerateObjectsUsingBlock:^(CheckTrialEligibilityCallback _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) {
obj(result);
}];
[callbacks removeObjectForKey:serverId];
});
NSMutableArray<CheckTrialEligibilityCallback> *callbackArray = callbacks[serverId];
if (!callbackArray) {
callbackArray = [NSMutableArray arrayWithObject:[callback copy]];

View file

@ -2,25 +2,23 @@
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, MWMValidationResult)
{
typedef NS_ENUM(NSUInteger, MWMValidationResult) {
MWMValidationResultValid,
MWMValidationResultNotValid,
MWMValidationResultServerError,
MWMValidationResultAuthError
};
typedef NS_ENUM(NSUInteger, MWMTrialEligibilityResult)
{
typedef NS_ENUM(NSUInteger, MWMTrialEligibilityResult) {
MWMTrialEligibilityResultEligible,
MWMTrialEligibilityResultNotEligible,
MWMTrialEligibilityResultServerError
};
typedef void (^ValidateReceiptCallback)(NSString * serverId, MWMValidationResult validationResult);
typedef void (^TrialEligibilityCallback)(NSString * serverId, MWMTrialEligibilityResult result);
typedef void (^ValidateReceiptCallback)(NSString *serverId, MWMValidationResult validationResult);
typedef void (^TrialEligibilityCallback)(NSString *serverId, MWMTrialEligibilityResult result);
typedef void (^StartTransactionCallback)(BOOL success, NSString * serverId);
typedef void (^StartTransactionCallback)(BOOL success, NSString *serverId);
@interface MWMPurchaseManager : NSObject
@ -40,9 +38,7 @@ typedef void (^StartTransactionCallback)(BOOL success, NSString * serverId);
+ (void)setAllPassSubscriptionActive:(BOOL)active;
- (instancetype)initWithVendorId:(NSString *)vendorId;
- (void)validateReceipt:(NSString *)serverId
refreshReceipt:(BOOL)refresh
callback:(ValidateReceiptCallback)callback;
- (void)validateReceipt:(NSString *)serverId refreshReceipt:(BOOL)refresh callback:(ValidateReceiptCallback)callback;
- (void)checkTrialEligibility:(NSString *)serverId
refreshReceipt:(BOOL)refresh
callback:(TrialEligibilityCallback)callback;

View file

@ -4,7 +4,7 @@
#import <StoreKit/StoreKit.h>
@interface MWMPurchaseManager() <SKRequestDelegate>
@interface MWMPurchaseManager () <SKRequestDelegate>
@property(nonatomic) NSMutableDictionary<NSString *, NSMutableArray<ValidateReceiptCallback> *> *validationCallbacks;
@property(nonatomic) NSMutableDictionary<NSString *, NSMutableArray<TrialEligibilityCallback> *> *trialCallbacks;
@ -17,70 +17,55 @@
@implementation MWMPurchaseManager
+ (NSString *)bookmarksSubscriptionServerId
{
+ (NSString *)bookmarksSubscriptionServerId {
return @(BOOKMARKS_SUBSCRIPTION_SIGHTS_SERVER_ID);
}
+ (NSString *)bookmarksSubscriptionVendorId
{
+ (NSString *)bookmarksSubscriptionVendorId {
return @(BOOKMARKS_SUBSCRIPTION_VENDOR);
}
+ (NSArray *)bookmakrsProductIds
{
return @[@(BOOKMARKS_SUBSCRIPTION_SIGHTS_YEARLY_PRODUCT_ID),
@(BOOKMARKS_SUBSCRIPTION_SIGHTS_MONTHLY_PRODUCT_ID)];
+ (NSArray *)bookmakrsProductIds {
return @[@(BOOKMARKS_SUBSCRIPTION_SIGHTS_YEARLY_PRODUCT_ID), @(BOOKMARKS_SUBSCRIPTION_SIGHTS_MONTHLY_PRODUCT_ID)];
}
+ (NSString *)allPassSubscriptionServerId
{
+ (NSString *)allPassSubscriptionServerId {
return @(BOOKMARKS_SUBSCRIPTION_SERVER_ID);
}
+ (NSString *)allPassSubscriptionVendorId
{
+ (NSString *)allPassSubscriptionVendorId {
return @(BOOKMARKS_SUBSCRIPTION_VENDOR);
}
+ (NSArray *)allPassProductIds
{
return @[@(BOOKMARKS_SUBSCRIPTION_YEARLY_PRODUCT_ID),
@(BOOKMARKS_SUBSCRIPTION_MONTHLY_PRODUCT_ID)];
+ (NSArray *)allPassProductIds {
return @[@(BOOKMARKS_SUBSCRIPTION_YEARLY_PRODUCT_ID), @(BOOKMARKS_SUBSCRIPTION_MONTHLY_PRODUCT_ID)];
}
+ (NSString *)adsRemovalServerId
{
+ (NSString *)adsRemovalServerId {
return @(ADS_REMOVAL_SERVER_ID);
}
+ (NSString *)adsRemovalVendorId
{
+ (NSString *)adsRemovalVendorId {
return @(ADS_REMOVAL_VENDOR);
}
+ (NSArray *)productIds
{
return @[@(ADS_REMOVAL_YEARLY_PRODUCT_ID),
@(ADS_REMOVAL_MONTHLY_PRODUCT_ID),
@(ADS_REMOVAL_WEEKLY_PRODUCT_ID)];
+ (NSArray *)productIds {
return @[@(ADS_REMOVAL_YEARLY_PRODUCT_ID), @(ADS_REMOVAL_MONTHLY_PRODUCT_ID), @(ADS_REMOVAL_WEEKLY_PRODUCT_ID)];
}
+ (NSArray *)legacyProductIds
{
+ (NSArray *)legacyProductIds {
auto pidVec = std::vector<std::string>(ADS_REMOVAL_NOT_USED_LIST);
NSMutableArray *result = [NSMutableArray array];
for (auto const & s : pidVec)
for (auto const &s : pidVec)
[result addObject:@(s.c_str())];
return [result copy];
}
+ (NSArray<NSString *> *)bookmarkInappIds
{
+ (NSArray<NSString *> *)bookmarkInappIds {
auto pidVec = std::vector<std::string>(BOOKMARK_INAPP_IDS);
NSMutableArray *result = [NSMutableArray array];
for (auto const & s : pidVec)
for (auto const &s : pidVec)
[result addObject:@(s.c_str())];
return [result copy];
@ -98,17 +83,13 @@
return self;
}
- (void)refreshReceipt
{
- (void)refreshReceipt {
self.receiptRequest = [[SKReceiptRefreshRequest alloc] init];
self.receiptRequest.delegate = self;
[self.receiptRequest start];
}
- (void)validateReceipt:(NSString *)serverId
refreshReceipt:(BOOL)refresh
callback:(ValidateReceiptCallback)callback
{
- (void)validateReceipt:(NSString *)serverId refreshReceipt:(BOOL)refresh callback:(ValidateReceiptCallback)callback {
NSMutableArray<ValidateReceiptCallback> *callbackArray = self.validationCallbacks[serverId];
if (callbackArray) {
[callbackArray addObject:[callback copy]];
@ -118,33 +99,33 @@
[self validateReceipt:serverId refreshReceipt:refresh];
}
- (void)validateReceipt:(NSString *)serverId
refreshReceipt:(BOOL)refresh {
- (void)validateReceipt:(NSString *)serverId refreshReceipt:(BOOL)refresh {
__weak __typeof(self) ws = self;
[self.purchaseValidation validateReceipt:serverId callback:^(MWMPurchaseValidationResult validationResult) {
__strong __typeof(self) self = ws;
switch (validationResult) {
case MWMPurchaseValidationResultValid:
[self notifyValidation:serverId result:MWMValidationResultValid];
break;
case MWMPurchaseValidationResultNotValid:
[self notifyValidation:serverId result:MWMValidationResultNotValid];
break;
case MWMPurchaseValidationResultError:
[self notifyValidation:serverId result:MWMValidationResultServerError];
break;
case MWMPurchaseValidationResultAuthError:
[self notifyValidation:serverId result:MWMValidationResultAuthError];
break;
case MWMPurchaseValidationResultNoReceipt:
if (refresh) {
[self refreshReceipt];
} else {
[self notifyValidation:serverId result:MWMValidationResultNotValid];
}
break;
}
}];
[self.purchaseValidation validateReceipt:serverId
callback:^(MWMPurchaseValidationResult validationResult) {
__strong __typeof(self) self = ws;
switch (validationResult) {
case MWMPurchaseValidationResultValid:
[self notifyValidation:serverId result:MWMValidationResultValid];
break;
case MWMPurchaseValidationResultNotValid:
[self notifyValidation:serverId result:MWMValidationResultNotValid];
break;
case MWMPurchaseValidationResultError:
[self notifyValidation:serverId result:MWMValidationResultServerError];
break;
case MWMPurchaseValidationResultAuthError:
[self notifyValidation:serverId result:MWMValidationResultAuthError];
break;
case MWMPurchaseValidationResultNoReceipt:
if (refresh) {
[self refreshReceipt];
} else {
[self notifyValidation:serverId result:MWMValidationResultNotValid];
}
break;
}
}];
}
- (void)checkTrialEligibility:(NSString *)serverId
@ -159,61 +140,60 @@
[self checkTrialEligibility:serverId refreshReceipt:refresh];
}
- (void)checkTrialEligibility:(NSString *)serverId
refreshReceipt:(BOOL)refresh {
- (void)checkTrialEligibility:(NSString *)serverId refreshReceipt:(BOOL)refresh {
__weak __typeof(self) ws = self;
[self.trialEligibility checkTrialEligibility:serverId callback:^(MWMCheckTrialEligibilityResult result) {
__strong __typeof(self) self = ws;
switch (result) {
case MWMCheckTrialEligibilityResultEligible:
[self notifyTrialEligibility:serverId result:MWMTrialEligibilityResultEligible];
break;
case MWMCheckTrialEligibilityResultNotEligible:
[self notifyTrialEligibility:serverId result:MWMTrialEligibilityResultNotEligible];
break;
case MWMCheckTrialEligibilityResultServerError:
[self notifyTrialEligibility:serverId result:MWMTrialEligibilityResultServerError];
break;
case MWMCheckTrialEligibilityResultNoReceipt:
if (refresh) {
[self refreshReceipt];
} else {
[self notifyTrialEligibility:serverId result:MWMTrialEligibilityResultNotEligible];
}
}
}];
[self.trialEligibility
checkTrialEligibility:serverId
callback:^(MWMCheckTrialEligibilityResult result) {
__strong __typeof(self) self = ws;
switch (result) {
case MWMCheckTrialEligibilityResultEligible:
[self notifyTrialEligibility:serverId result:MWMTrialEligibilityResultEligible];
break;
case MWMCheckTrialEligibilityResultNotEligible:
[self notifyTrialEligibility:serverId result:MWMTrialEligibilityResultNotEligible];
break;
case MWMCheckTrialEligibilityResultServerError:
[self notifyTrialEligibility:serverId result:MWMTrialEligibilityResultServerError];
break;
case MWMCheckTrialEligibilityResultNoReceipt:
if (refresh) {
[self refreshReceipt];
} else {
[self notifyTrialEligibility:serverId result:MWMTrialEligibilityResultNotEligible];
}
}
}];
}
- (void)startTransaction:(NSString *)serverId callback:(StartTransactionCallback)callback {
GetFramework().GetPurchase()->SetStartTransactionCallback([callback](bool success,
std::string const & serverId,
std::string const & vendorId)
{
callback(success, @(serverId.c_str()));
});
GetFramework().GetPurchase()->StartTransaction(serverId.UTF8String,
BOOKMARKS_VENDOR,
GetFramework().GetPurchase()->SetStartTransactionCallback(
[callback](bool success, std::string const &serverId, std::string const &vendorId) {
callback(success, @(serverId.c_str()));
});
GetFramework().GetPurchase()->StartTransaction(serverId.UTF8String, BOOKMARKS_VENDOR,
GetFramework().GetUser().GetAccessToken());
}
- (void)notifyValidation:(NSString *)serverId result:(MWMValidationResult)result {
NSMutableArray<ValidateReceiptCallback> *callbackArray = self.validationCallbacks[serverId];
[callbackArray enumerateObjectsUsingBlock:^(ValidateReceiptCallback _Nonnull callback, NSUInteger idx, BOOL * _Nonnull stop) {
callback(serverId, result);
}];
[callbackArray
enumerateObjectsUsingBlock:^(ValidateReceiptCallback _Nonnull callback, NSUInteger idx, BOOL *_Nonnull stop) {
callback(serverId, result);
}];
[self.validationCallbacks removeObjectForKey:serverId];
}
-(void)notifyTrialEligibility:(NSString *)serverId result:(MWMTrialEligibilityResult)result {
- (void)notifyTrialEligibility:(NSString *)serverId result:(MWMTrialEligibilityResult)result {
NSMutableArray<TrialEligibilityCallback> *callbackArray = self.trialCallbacks[serverId];
[callbackArray enumerateObjectsUsingBlock:^(TrialEligibilityCallback _Nonnull callback, NSUInteger idx, BOOL * _Nonnull stop) {
callback(serverId, result);
}];
[callbackArray
enumerateObjectsUsingBlock:^(TrialEligibilityCallback _Nonnull callback, NSUInteger idx, BOOL *_Nonnull stop) {
callback(serverId, result);
}];
[self.trialCallbacks removeObjectForKey:serverId];
}
+ (void)setAdsDisabled:(BOOL)disabled
{
+ (void)setAdsDisabled:(BOOL)disabled {
GetFramework().GetPurchase()->SetSubscriptionEnabled(SubscriptionType::RemoveAds, disabled);
}
@ -227,24 +207,30 @@
#pragma mark - SKRequestDelegate
- (void)requestDidFinish:(SKRequest *)request
{
[self.validationCallbacks enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSMutableArray<ValidateReceiptCallback> * _Nonnull obj, BOOL * _Nonnull stop) {
[self validateReceipt:key refreshReceipt:NO];
}];
[self.trialCallbacks enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSMutableArray<TrialEligibilityCallback> * _Nonnull obj, BOOL * _Nonnull stop) {
[self checkTrialEligibility:key refreshReceipt:NO];
}];
- (void)requestDidFinish:(SKRequest *)request {
[self.validationCallbacks
enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull key, NSMutableArray<ValidateReceiptCallback> *_Nonnull obj,
BOOL *_Nonnull stop) {
[self validateReceipt:key refreshReceipt:NO];
}];
[self.trialCallbacks
enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull key, NSMutableArray<TrialEligibilityCallback> *_Nonnull obj,
BOOL *_Nonnull stop) {
[self checkTrialEligibility:key refreshReceipt:NO];
}];
}
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
[self.trialCallbacks enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSMutableArray<TrialEligibilityCallback> * _Nonnull obj, BOOL * _Nonnull stop) {
[self notifyValidation:key result:MWMValidationResultServerError];
}];
[self.trialCallbacks enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSMutableArray<TrialEligibilityCallback> * _Nonnull obj, BOOL * _Nonnull stop) {
[self notifyTrialEligibility:key result:MWMTrialEligibilityResultServerError];
}];
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
[self.trialCallbacks
enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull key, NSMutableArray<TrialEligibilityCallback> *_Nonnull obj,
BOOL *_Nonnull stop) {
[self notifyValidation:key result:MWMValidationResultServerError];
}];
[self.trialCallbacks
enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull key, NSMutableArray<TrialEligibilityCallback> *_Nonnull obj,
BOOL *_Nonnull stop) {
[self notifyTrialEligibility:key result:MWMTrialEligibilityResultServerError];
}];
}
@end

View file

@ -1,4 +1,4 @@
@objc protocol ISubscriptionManager: class{
@objc protocol ISubscriptionManager: AnyObject {
typealias SuscriptionsCompletion = ([ISubscription]?, Error?) -> Void
typealias ValidationCompletion = (MWMValidationResult) -> Void
typealias TrialEligibilityCompletion = (MWMTrialEligibilityResult) -> Void
@ -46,10 +46,10 @@ class SubscriptionManager: NSObject, ISubscriptionManager {
self.productIds = productIds
self.serverId = serverId
self.vendorId = vendorId
self.hasTrial = serverId == MWMPurchaseManager.allPassSubscriptionServerId()
hasTrial = serverId == MWMPurchaseManager.allPassSubscriptionServerId()
super.init()
paymentQueue.add(self)
self.purchaseManager = MWMPurchaseManager(vendorId: vendorId)
purchaseManager = MWMPurchaseManager(vendorId: vendorId)
}
deinit {
@ -105,13 +105,14 @@ class SubscriptionManager: NSObject, ISubscriptionManager {
}
private func validate(_ refreshReceipt: Bool, completion: ValidationCompletion? = nil) {
purchaseManager?.validateReceipt(serverId, refreshReceipt: refreshReceipt) { [weak self] (_, validationResult) in
purchaseManager?.validateReceipt(serverId, refreshReceipt: refreshReceipt) { [weak self] _, validationResult in
self?.logEvents(validationResult)
if validationResult == .valid || validationResult == .notValid {
self?.listeners.allObjects.forEach { $0.didValidate(validationResult == .valid) }
self?.paymentQueue.transactions
.filter { self?.productIds.contains($0.payment.productIdentifier) ?? false &&
($0.transactionState == .purchased || $0.transactionState == .restored) }
($0.transactionState == .purchased || $0.transactionState == .restored)
}
.forEach { self?.paymentQueue.finishTransaction($0) }
} else {
self?.listeners.allObjects.forEach { $0.didFailToValidate() }
@ -121,7 +122,7 @@ class SubscriptionManager: NSObject, ISubscriptionManager {
}
@objc func checkTrialEligibility(completion: TrialEligibilityCompletion?) {
purchaseManager?.checkTrialEligibility(serverId, refreshReceipt: true, callback: { (_, result) in
purchaseManager?.checkTrialEligibility(serverId, refreshReceipt: true, callback: { _, result in
completion?(result)
})
}
@ -129,15 +130,15 @@ class SubscriptionManager: NSObject, ISubscriptionManager {
private func logEvents(_ validationResult: MWMValidationResult) {
switch validationResult {
case .valid:
Statistics.logEvent(kStatInappValidationSuccess, withParameters: [kStatPurchase : serverId])
Statistics.logEvent(kStatInappValidationSuccess, withParameters: [kStatPurchase: serverId])
Statistics.logEvent(kStatInappProductDelivered,
withParameters: [kStatVendor : vendorId, kStatPurchase : serverId], with: .realtime)
withParameters: [kStatVendor: vendorId, kStatPurchase: serverId], with: .realtime)
case .notValid:
Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode : 0, kStatPurchase : serverId])
Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode: 0, kStatPurchase: serverId])
case .serverError:
Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode : 2, kStatPurchase : serverId])
Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode: 2, kStatPurchase: serverId])
case .authError:
Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode : 1, kStatPurchase : serverId])
Statistics.logEvent(kStatInappValidationError, withParameters: [kStatErrorCode: 1, kStatPurchase: serverId])
}
}
}
@ -145,7 +146,7 @@ class SubscriptionManager: NSObject, ISubscriptionManager {
extension SubscriptionManager: SKProductsRequestDelegate {
func request(_ request: SKRequest, didFailWithError error: Error) {
Statistics.logEvent(kStatInappPaymentError,
withParameters: [kStatError : error.localizedDescription, kStatPurchase : serverId])
withParameters: [kStatError: error.localizedDescription, kStatPurchase: serverId])
DispatchQueue.main.async { [weak self] in
self?.subscriptionsComplection?(nil, error)
self?.subscriptionsComplection = nil
@ -208,7 +209,7 @@ extension SubscriptionManager: SKPaymentTransactionObserver {
private func processPurchased(_ transaction: SKPaymentTransaction) {
paymentQueue.finishTransaction(transaction)
if let ps = pendingSubscription, transaction.payment.productIdentifier == ps.productId {
Statistics.logEvent(kStatInappPaymentSuccess, withParameters: [kStatPurchase : serverId])
Statistics.logEvent(kStatInappPaymentSuccess, withParameters: [kStatPurchase: serverId])
listeners.allObjects.forEach { $0.didSubscribe(ps) }
}
}
@ -225,7 +226,7 @@ extension SubscriptionManager: SKPaymentTransactionObserver {
if let ps = pendingSubscription, transaction.payment.productIdentifier == ps.productId {
let errorText = error?.localizedDescription ?? ""
Statistics.logEvent(kStatInappPaymentError,
withParameters: [kStatPurchase : serverId, kStatError : errorText])
withParameters: [kStatPurchase: serverId, kStatError: errorText])
listeners.allObjects.forEach { $0.didFailToSubscribe(ps, error: error) }
}
}

View file

@ -35,7 +35,7 @@ class SubscriptionPresenter {
}
private func configureTrial() {
guard let trialSubscriptionItem = self.subscriptionGroup?[.year] else {
guard let trialSubscriptionItem = subscriptionGroup?[.year] else {
fatalError()
}
view?.setModel(SubscriptionViewModel.trial(SubscriptionViewModel.TrialData(price: trialSubscriptionItem.formattedPrice)))
@ -44,7 +44,7 @@ class SubscriptionPresenter {
private func configureSubscriptions() {
var data: [SubscriptionViewModel.SubscriptionData] = []
for period in [SubscriptionPeriod.month, SubscriptionPeriod.year] {
guard let subscriptionItem = self.subscriptionGroup?[period] else {
guard let subscriptionItem = subscriptionGroup?[period] else {
fatalError()
}
data.append(SubscriptionViewModel.SubscriptionData(price: subscriptionItem.formattedPrice,
@ -89,9 +89,9 @@ extension SubscriptionPresenter: SubscriptionPresenterProtocol {
let group = SubscriptionGroup(subscriptions: subscriptions)
self?.subscriptionGroup = group
if self?.subscriptionManager.hasTrial == true {
self?.subscriptionManager.checkTrialEligibility { (result) in
self?.subscriptionManager.checkTrialEligibility { result in
switch result {
case .eligible:
self?.configureTrial()