Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 24b4f1e

Browse files
committed
Merge branch 'temp' into issue/92231
2 parents 020800b + d89dee5 commit 24b4f1e

File tree

5 files changed

+52
-7
lines changed

5 files changed

+52
-7
lines changed

packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Stubs.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,14 @@ - (instancetype)initWithMap:(NSDictionary *)map {
6161
[self setValue:map[@"subscriptionGroupIdentifier"] ?: [NSNull null]
6262
forKey:@"subscriptionGroupIdentifier"];
6363
}
64+
if (@available(iOS 12.2, *)) {
65+
NSMutableArray *discounts = [NSMutableArray new];
66+
for (NSDictionary *discountMap in map[@"discounts"]) {
67+
[discounts addObject:[[SKProductDiscountStub alloc] initWithMap:discountMap]];
68+
}
69+
70+
[self setValue:discounts forKey:@"discounts"];
71+
}
6472
}
6573
return self;
6674
}

packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/TranslatorTests.m

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,13 @@ - (void)setUp {
4646
self.productMap[@"subscriptionPeriod"] = self.periodMap;
4747
self.productMap[@"introductoryPrice"] = self.discountMap;
4848
}
49+
if (@available(iOS 12.2, *)) {
50+
self.productMap[@"discounts"] = @[ self.discountMap ];
51+
}
4952

5053
if (@available(iOS 12.0, *)) {
5154
self.productMap[@"subscriptionGroupIdentifier"] = @"com.group";
5255
}
53-
54-
if (@available(iOS 11.2, *)) {
55-
self.productMap[@"discounts"] = @[ self.discountMap ];
56-
}
5756

5857
self.productResponseMap =
5958
@{@"products" : @[ self.productMap ], @"invalidProductIdentifiers" : @[]};
@@ -64,6 +63,13 @@ - (void)setUp {
6463
@"applicationUsername" : @"app user name",
6564
@"simulatesAskToBuyInSandbox" : @(NO)
6665
};
66+
self.paymentDiscountMap = @{
67+
@"identifier" : @"payment_discount_identifier",
68+
@"keyIdentifier" : @"payment_discount_key_identifier",
69+
@"nonce" : @"d18981e0-9003-4365-98a2-4b90e3b62c52",
70+
@"signature" : @"this is a encrypted signature",
71+
@"timestamp" : @([NSDate date].timeIntervalSince1970),
72+
};
6773
NSDictionary *originalTransactionMap = @{
6874
@"transactionIdentifier" : @"567",
6975
@"transactionState" : @(SKPaymentTransactionStatePurchasing),
@@ -180,4 +186,16 @@ - (void)testSKStorefrontAndSKPaymentTransactionToMap {
180186
}
181187
}
182188

189+
- (void)testSKPaymentDiscountFromMap {
190+
if (@available(iOS 12.2, *)) {
191+
SKPaymentDiscount *paymentDiscount = [FIAObjectTranslator getSKPaymentDiscountFromMap:self.paymentDiscountMap];
192+
193+
XCTAssertEqual(paymentDiscount.identifier, self.paymentDiscountMap[@"identifier"]);
194+
XCTAssertEqual(paymentDiscount.keyIdentifier, self.paymentDiscountMap[@"keyIdentifier"]);
195+
XCTAssertEqualObjects(paymentDiscount.nonce, [[NSUUID alloc] initWithUUIDString: self.paymentDiscountMap[@"nonce"]]);
196+
XCTAssertEqual(paymentDiscount.signature, self.paymentDiscountMap[@"signature"]);
197+
XCTAssertEqual(paymentDiscount.timestamp, self.paymentDiscountMap[@"timestamp"]);
198+
}
199+
}
200+
183201
@end

packages/in_app_purchase/in_app_purchase_ios/ios/Classes/FIAObjectTranslator.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ NS_ASSUME_NONNULL_BEGIN
2020
+ (NSDictionary *)getMapFromSKProductDiscount:(SKProductDiscount *)discount
2121
API_AVAILABLE(ios(11.2));
2222

23+
// Converts an array of SKProductDiscount instances into an array of dictionaries.
24+
+ (nonnull NSArray *)getMapArrayFromSKProductDiscounts:(nonnull NSArray<SKProductDiscount *> *)productDiscounts
25+
API_AVAILABLE(ios(12.2));
26+
2327
// Converts an instance of SKProductsResponse into a dictionary.
2428
+ (NSDictionary *)getMapFromSKProductsResponse:(SKProductsResponse *)productResponse;
2529

packages/in_app_purchase/in_app_purchase_ios/ios/Classes/FIAObjectTranslator.m

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ + (NSDictionary *)getMapFromSKProduct:(SKProduct *)product {
2424
// https://github.com/flutter/flutter/issues/26610
2525
[map setObject:[FIAObjectTranslator getMapFromNSLocale:product.priceLocale] ?: [NSNull null]
2626
forKey:@"priceLocale"];
27+
2728
if (@available(iOS 11.2, *)) {
2829
[map setObject:[FIAObjectTranslator
2930
getMapFromSKProductSubscriptionPeriod:product.subscriptionPeriod]
@@ -35,6 +36,10 @@ + (NSDictionary *)getMapFromSKProduct:(SKProduct *)product {
3536
?: [NSNull null]
3637
forKey:@"introductoryPrice"];
3738
}
39+
if (@available(iOS 12.2, *)) {
40+
[map setObject:[FIAObjectTranslator getMapArrayFromSKProductDiscounts:product.discounts]
41+
forKey:@"discounts"];
42+
}
3843
if (@available(iOS 12.0, *)) {
3944
[map setObject:product.subscriptionGroupIdentifier ?: [NSNull null]
4045
forKey:@"subscriptionGroupIdentifier"];
@@ -49,6 +54,16 @@ + (NSDictionary *)getMapFromSKProductSubscriptionPeriod:(SKProductSubscriptionPe
4954
return @{@"numberOfUnits" : @(period.numberOfUnits), @"unit" : @(period.unit)};
5055
}
5156

57+
+ (nonnull NSArray *)getMapArrayFromSKProductDiscounts:(nonnull NSArray<SKProductDiscount *> *)productDiscounts {
58+
NSMutableArray *discountsMapArray = [NSMutableArray new];
59+
60+
for (SKProductDiscount *productDiscount in productDiscounts) {
61+
[discountsMapArray addObject:[FIAObjectTranslator getMapFromSKProductDiscount:productDiscount]];
62+
}
63+
64+
return discountsMapArray;
65+
}
66+
5267
+ (NSDictionary *)getMapFromSKProductDiscount:(SKProductDiscount *)discount {
5368
if (!discount) {
5469
return nil;

packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,12 +297,12 @@ class SKProductWrapper {
297297
final SKProductDiscountWrapper? introductoryPrice;
298298

299299
/// An array of subscription offers available for the auto-renewable subscription (available on iOS 12.2 and higher).
300-
///
301-
/// This property lists all promotional offers set up in App Store Connect. If
300+
///
301+
/// This property lists all promotional offers set up in App Store Connect. If
302302
/// no promotional offers have been set up this field returns an empty list.
303303
/// Each [subscriptionPeriod] of individual discounts are independent of the
304304
/// product's [subscriptionPeriod] and their units and duration do not have to
305-
/// be matched.
305+
/// be matched.
306306
@JsonKey(defaultValue: <SKProductDiscountWrapper>[])
307307
final List<SKProductDiscountWrapper> discounts;
308308

0 commit comments

Comments
 (0)