Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.4.4

* Added support for specifying quantity in `SK2ProductPurchaseOptions` (consumable purchases on iOS).

## 0.4.3

* Adds **Introductory Offer Eligibility** support for StoreKit2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ extension InAppPurchasePlugin: InAppPurchase2API {
{
purchaseOptions.insert(.appAccountToken(accountTokenUUID))
}
if let quantity = options?.quantity {
purchaseOptions.insert(.quantity(Int(quantity)))
}

if #available(iOS 17.4, macOS 14.4, *) {
if let promotionalOffer = options?.promotionalOffer {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: in_app_purchase_storekit
description: An implementation for the iOS and macOS platforms of the Flutter `in_app_purchase` plugin. This uses the StoreKit Framework.
repository: https://github.com/flutter/packages/tree/main/packages/in_app_purchase/in_app_purchase_storekit
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
version: 0.4.3
version: 0.4.4

environment:
sdk: ^3.6.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,42 @@ void main() {
expect(lastPurchaseOptions.winBackOfferId, isNull);
expect(lastPurchaseOptions.promotionalOffer, isNull);
});

test('should pass quantity for consumable product with Sk2PurchaseParam',
() async {
final Sk2PurchaseParam purchaseParam = Sk2PurchaseParam(
productDetails:
AppStoreProduct2Details.fromSK2Product(dummyProductWrapper),
quantity: 3,
applicationUserName: 'testUser',
);

await iapStoreKitPlatform.buyConsumable(purchaseParam: purchaseParam);

final SK2ProductPurchaseOptionsMessage lastPurchaseOptions =
fakeStoreKit2Platform.lastPurchaseOptions!;

expect(lastPurchaseOptions.appAccountToken, 'testUser');
expect(lastPurchaseOptions.quantity, 3);
expect(lastPurchaseOptions.winBackOfferId, isNull);
expect(lastPurchaseOptions.promotionalOffer, isNull);
});

test('should default to quantity = 1 when not provided in Sk2PurchaseParam',
() async {
final Sk2PurchaseParam purchaseParam = Sk2PurchaseParam(
productDetails:
AppStoreProduct2Details.fromSK2Product(dummyProductWrapper),
applicationUserName: 'testUser',
);

await iapStoreKitPlatform.buyConsumable(purchaseParam: purchaseParam);

final SK2ProductPurchaseOptionsMessage lastPurchaseOptions =
fakeStoreKit2Platform.lastPurchaseOptions!;

expect(lastPurchaseOptions.quantity, 1);
});
});

group('restore purchases', () {
Expand Down