From 61421a8e35d837305128314b2076f47bcae73c2f Mon Sep 17 00:00:00 2001 From: Denis Chakarov Date: Wed, 13 Jul 2022 14:05:07 +0300 Subject: [PATCH 1/2] fix payment discount (iOS Promotional Offers) into being actually usable --- .../ios/Classes/FIAObjectTranslator.m | 2 +- .../lib/src/in_app_purchase_storekit_platform.dart | 14 ++++++++++++++ .../sk_payment_queue_wrapper.dart | 3 ++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m b/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m index 5d87a68de67c..99a48072dad3 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m +++ b/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m @@ -233,7 +233,7 @@ + (NSDictionary *)getMapFromSKStorefront:(SKStorefront *)storefront + (SKPaymentDiscount *)getSKPaymentDiscountFromMap:(NSDictionary *)map withError:(NSString **)error { - if (!map || map.count <= 0) { + if (!map || [map isKindOfClass:[NSNull class]] || map.count <= 0) { return nil; } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart index f81b36699834..5117491fc661 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart @@ -81,6 +81,20 @@ class InAppPurchaseStoreKitPlatform extends InAppPurchasePlatform { return true; // There's no error feedback from iOS here to return. } + static Future buyNonConsumableWithDiscount( + {required PurchaseParam purchaseParam, SKPaymentDiscountWrapper? discount}) async { + await _skPaymentQueueWrapper.addPayment(SKPaymentWrapper( + productIdentifier: purchaseParam.productDetails.id, + quantity: purchaseParam is AppStorePurchaseParam ? purchaseParam.quantity : 1, + applicationUsername: purchaseParam.applicationUserName, + simulatesAskToBuyInSandbox: purchaseParam is AppStorePurchaseParam && purchaseParam.simulatesAskToBuyInSandbox, + requestData: null, + paymentDiscount: discount, + )); + + return true; // There's no error feedback from iOS here to return. + } + @override Future buyConsumable( {required PurchaseParam purchaseParam, bool autoConsume = true}) { diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart index 70db7da2e275..d0caabeee2c9 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart @@ -405,7 +405,8 @@ class SKPaymentWrapper { 'applicationUsername': applicationUsername, 'requestData': requestData, 'quantity': quantity, - 'simulatesAskToBuyInSandbox': simulatesAskToBuyInSandbox + 'simulatesAskToBuyInSandbox': simulatesAskToBuyInSandbox, + 'paymentDiscount': paymentDiscount?.toMap(), }; } From 95bd0df922ab4ca67c729cdf3cf561362cf8a987 Mon Sep 17 00:00:00 2001 From: Denis Chakarov Date: Thu, 11 Aug 2022 13:00:28 +0300 Subject: [PATCH 2/2] fix long value for payment discount's timestamp overflowing integer check --- .../in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m b/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m index 99a48072dad3..cc272a2e2f2a 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m +++ b/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m @@ -273,7 +273,7 @@ + (SKPaymentDiscount *)getSKPaymentDiscountFromMap:(NSDictionary *)map return nil; } - if (!timestamp || ![timestamp isKindOfClass:NSNumber.class] || [timestamp intValue] <= 0) { + if (!timestamp || ![timestamp isKindOfClass:NSNumber.class] || timestamp <= 0) { if (error) { *error = @"When specifying a payment discount the 'timestamp' field is mandatory."; }