forked from organicmaps/organicmaps
[iOS] Codestyle
This commit is contained in:
parent
d09ed36a23
commit
3be5d80e40
8 changed files with 179 additions and 197 deletions
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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];
|
||||
});
|
||||
|
|
|
@ -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]];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue