flutter_inapp_purchase 6.5.3 copy "flutter_inapp_purchase: ^6.5.3" to clipboard
flutter_inapp_purchase: ^6.5.3 copied to clipboard

In App Purchase plugin for flutter. This project has been forked by react-native-iap and we are willing to share same experience with that on react-native.

CHANGELOG #

6.5.3 #

Fixed #

  • iOS: Ensure product.id is always populated in fetchProducts() (fixes cases where id was empty on iOS). The parser now resolves id from the first non-empty of: productIdidskuproductIdentifier (#550). In debug builds, logs which key was used.

Changed #

  • Products API: id is the primary identifier for Product/ProductSubscription. productId is kept for backward compatibility only (see Deprecated).
  • fetchProducts(): Adds support for type: 'all'.
    • iOS: passes 'all' through the native fetchProducts call
    • Android: fetches inapp and subs, then merges results
  • Parser now emits ProductSubscription (alias of Subscription) for subscriptions internally.

Deprecated #

  • productId on ProductCommon: Use id instead (will be removed in 6.6.0).
  • Subscription type name: Use ProductSubscription instead (will be removed in 6.6.0). The alias keeps existing code working.
  • Methods (removal in 6.6.0):
    • requestProducts() → use fetchProducts()
    • purchaseAsync() → use requestPurchase()
    • requestPurchaseAuto() → use requestPurchase()
    • finalize() → use endConnection()
    • deepLinkToSubscriptionsAndroid() → use platform UI links as documented
    • getPurchaseHistories() → use getAvailablePurchases(PurchaseOptions(onlyIncludeActiveItemsIOS: false))

6.5.2 #

Fixed #

  • iOS: Fix product/discount price parsing to tolerate numeric values (prevents type 'double' is not a subtype of type 'String?'), fixes #547.

Changed #

  • iOS: pin OpenIAP Apple native module to openiap 1.1.9 (exact version) to avoid unexpected CocoaPods minor updates.

Notes #

  • Recommend upgrading to 6.5.2. Prior 6.5.0–6.5.1 allowed older constraints; this release enforces exact 1.1.9 for stability. No breaking changes.

6.5.1 #

Changed #

  • iOS: bump OpenIAP Apple native module to openiap ~> 1.1.8 (no breaking changes)
  • iOS: unified error helper to OpenIapError.defaultMessage (OpenIAP 1.1.8 consolidation)

Notes #

  • Example iOS Podfile pins tag 1.1.8; run cd example/ios && pod install to refresh lockfile.

6.5.0 #

Changed #

  • iOS: rename native channel method buyProduct to requestPurchase and update Dart to call requestPurchase (tests adjusted).
  • iOS: standardize error codes/messages using OpenIAP (OpenIapError.defaultMessage) instead of ad‑hoc reason strings.
  • Dart: make product parsing tolerant of numeric fields (e.g., price, subscriptionPeriodNumberIOS) to avoid type cast crashes.
  • Restore flow: on iOS run syncIOS() (soft‑fail) then getAvailablePurchases(); on Android call getAvailablePurchases().

Added #

  • iOS mixin: clearTransactionIOS, getPromotedProductIOS, requestPurchaseOnPromotedProductIOS helpers.

Removed #

  • iOS: remove no‑op clearTransactionCache channel case.
  • Deprecated/legacy convenience methods: internal getAppTransactionTyped, getProductsAsync, finishTransactionAsync, non‑suffixed presentCodeRedemptionSheet/showManageSubscriptions.

iOS Native #

  • Use OpenIAP error codes for initConnection, fetchProducts, finishTransaction, receipt validation and system UI calls.
  • Purchase error event now emits E_PURCHASE_ERROR with standard message.

CocoaPods #

  • Podspec requires openiap ~> 1.1.7. Example Podfile uses CDN and pins git tag when needed.

6.4.6 #

Fixed #

  • iOS: Retrieve expired subscriptions in StoreKit 2 sandbox (#543)
    • Added PurchaseOptions parameter to getAvailablePurchases() for OpenIAP compliance
    • Use onlyIncludeActiveItemsIOS: false to include expired subscriptions

Deprecated #

  • getPurchaseHistories() → Use getAvailablePurchases() with options (removed in 6.6.0)

6.4.5 #

Changed #

  • BREAKING: Updated getAvailablePurchases() to support PurchaseOptions parameter (OpenIAP compliant)
    • Now accepts optional PurchaseOptions parameter for platform-specific configuration
    • iOS: Added onlyIncludeActiveItemsIOS option (default: true) to control whether expired subscriptions are included

Added #

  • Added PurchaseOptions class with iOS-specific options:
    • alsoPublishToEventListenerIOS: Whether to also publish purchase events to the event listener when fetching available purchases
    • onlyIncludeActiveItemsIOS: Whether to only include active items (set to false to get expired subscriptions)
  • iOS: Added getPurchaseHistoriesIOS() platform-specific method that retrieves all transactions including expired subscriptions

Deprecated #

  • getPurchaseHistories() - Use getAvailablePurchases(PurchaseOptions(onlyIncludeActiveItemsIOS: false)) instead (will be removed in 6.6.0)

Bug Fixes #

  • iOS: Fixed missing transactionStateIOS field in getAvailableItems method (#538)
  • iOS: Fixed expired subscriptions not being returned in purchase history (#543)
    • Added new iOS native method using Transaction.all instead of Transaction.currentEntitlements
    • This ensures all historical purchases including expired subscriptions are returned correctly

6.4.4 #

Bug Fixes #

  • Android: Fixed FormatException when calling finishTransaction (#539)

6.4.3 #

Bug Fixes #

  • iOS: Replace ISO8601DateFormatter with millisecond timestamps for date fields (#535)
    • Changed expirationDateIOS and revocationDateIOS to use millisecond timestamps
    • Added explicit Int64 casting for better type safety
    • Aligned with expo-iap implementation for consistency
    • Improved Dart type safety for date parsing with safe num to int conversion

6.4.2 #

Bug Fixes #

  • Android: Fixed subscriptionOfferDetailsAndroid field returning null (Fixes #534)
    • Added proper parsing for subscriptionOfferDetailsAndroid in subscription products
    • Removed parsing of deprecated subscriptionOfferDetails field
    • Fixed Map type casting issues that could cause runtime errors with Map<dynamic, dynamic> inputs

Improvements #

  • Type Safety: Improved type safety for JSON parsing across the codebase
    • Added safe JSON map conversion helper to prevent type casting errors
    • Fixed all unsafe as Map<String, dynamic> casts in types.dart
    • Ensures robust handling of platform channel data

6.4.1 #

Improvements #

  • ActiveSubscription Type: Implemented a dedicated ActiveSubscription type for subscription APIs to provide better type safety and clearer subscription status information (#532)
    • getActiveSubscriptions() now returns List<ActiveSubscription> instead of List<SubscriptionPurchase>
    • New type includes subscription-specific fields like willExpireSoon and daysUntilExpirationIOS
    • Automatically calculates expiration status for iOS subscriptions
    • Provides cleaner API with subscription-focused properties

6.4.0 #

Breaking Changes #

  • Simplified requestProducts API: The requestProducts method now accepts direct parameters instead of a wrapper object (Fixes #527)

    // Before (6.3.x)
    final products = await iap.requestProducts(
      RequestProductsParams(
        skus: ['product_id'],
        type: PurchaseType.inapp,
      ),
    );
    
    // After (6.4.0)
    final products = await iap.requestProducts(
      skus: ['product_id'],
      type: PurchaseType.inapp,  // Optional, defaults to PurchaseType.inapp
    );
    
    • Removed RequestProductsParams class
    • This change simplifies the API and improves developer experience based on user feedback

New Features #

  • DSL-like Builder Pattern for Purchase Requests: Added a builder pattern API for more intuitive and type-safe purchase request construction

    // New builder pattern approach
    await iap.requestPurchaseWithBuilder(
      build: (r) => r
        ..type = PurchaseType.inapp
        ..withIOS((i) => i
          ..sku = 'product_id'
          ..quantity = 1)
        ..withAndroid((a) => a
          ..skus = ['product_id']),
    );
    
    • Provides better type safety with platform-specific configurations
    • Supports cascade notation for cleaner code
    • Separate builders for iOS and Android parameters
    • Available for both purchases and subscriptions

Improvements #

  • Replaced magic numbers with enums: Android purchase states now use AndroidPurchaseState enum instead of hardcoded values (0, 1, 2)
    • Better code readability and maintainability
    • Type-safe state checking

Deprecated Items Removed #

The following deprecated items from v6.3.x have been removed in v6.4.0:

  • subscriptionOfferDetails field (use subscriptionOfferDetailsAndroid instead)
  • prorationMode field (use replacementModeAndroid instead)
  • AndroidProrationMode typedef (use AndroidReplacementMode instead)

Note to Users #

We understand there have been several breaking changes recently. We sincerely apologize for any inconvenience. These changes are part of our effort to quickly address the long maintenance gap and bring the library up to modern standards. With version 6.4.0, we believe the major restructuring is now complete, and the API should remain stable going forward.

6.3.3 #

Bug Fixes #

  • Android Type Mapping: Fixed Android-specific field mappings to match TypeScript/OpenIAP specifications
    • Fixed Product parsing for nameAndroid and oneTimePurchaseOfferDetailsAndroid fields
    • Fixed Purchase dataAndroid field mapping from native Android data
    • Added proper platform checks for Android/iOS specific fields in toJson output
    • Fixed subscription offer details structure to handle nested pricingPhases
    • Fixed PricingPhase parsing for Android field names (formattedPrice, priceCurrencyCode, priceAmountMicros)

Code Quality #

  • Platform-Specific Field Segregation: Enhanced platform checks across all type classes
    • Added _platform.isAndroid and _platform.isIOS conditions for platform-specific fields
    • Android-specific fields now only appear on Android platform
    • iOS-specific fields now only appear on iOS platform
    • Added comprehensive TODO comments for v6.4.0 deprecation cleanup

Documentation #

  • Release Notes: Added proper version planning comments for deprecated field removal in v6.4.0

6.3.2 #

Bug Fixes #

  • iOS Purchase State Detection: Enhanced purchase state detection for iOS
    • Fixed UI getting stuck in "Processing..." state when transactionStateIOS is null
    • Now properly detects successful purchases using multiple conditions (state, token, transaction ID)
    • Added duplicate transaction tracking to prevent double processing
  • Timeout Error Handling: Improved error handling for store server timeouts
    • Added specific handling for Korean timeout message "요청한 시간이 초과되었습니다"
    • Provides user-friendly troubleshooting steps for network issues
  • Security: Enhanced security for sensitive data logging
    • Purchase tokens are now masked in debug logs (showing only last 4 characters)
    • All sensitive logging is properly gated behind kDebugMode flag

Documentation #

  • Added comprehensive iOS purchase state detection guide
  • Enhanced troubleshooting documentation with iOS-specific solutions

6.3.1 #

Bug Fixes #

  • Android Subscription Loading: Fixed type casting error when loading subscriptions
    • Fixed _Map<String, dynamic> type casting issue that prevented subscriptions from loading
    • Improved handling of pricing phases data structure from Android
    • Fixed parsing of subscription offer details from nested JSON structure
  • Test Product Cleanup: Removed deprecated android.test.purchased test product ID
    • This test ID is no longer valid in Google Play Billing Library 6+
  • Type Safety: Improved type handling for Map conversions from native platforms
    • Better handling of different Map implementations from iOS and Android

6.3.0 #

Bug Fixes #

  • CRITICAL FIX: Android Purchase State Mapping: Fixed incorrect mapping of Android purchase states (#524)
    • Previously mapped: 0=PURCHASED, 1=PENDING (incorrect)
    • Now correctly maps: 0=UNSPECIFIED_STATE, 1=PURCHASED, 2=PENDING
    • This fix aligns with official Google Play Billing documentation
    • Prevents misinterpreting UNSPECIFIED_STATE as a completed purchase
    • UNSPECIFIED_STATE (0) and unknown states now properly map to PurchaseState.unspecified

Features #

  • Enhanced OpenIAP Compliance: Extended OpenIAP specification support with comprehensive field mapping

    • Added full iOS-specific field support: displayName, displayPrice, isFamilyShareable, jsonRepresentation, discountsIOS, subscription info, and promotional offer fields
    • Added comprehensive Android-specific field support: originalPrice, originalPriceAmount, freeTrialPeriod, subscriptionOffersAndroid, and billing cycle information
    • Enhanced Purchase object with StoreKit 2 fields: verificationResultIOS, environmentIOS, expirationDateIOS, revocationDateIOS, and transaction metadata
  • Improved Test Organization: Restructured test suite by business flows

    • Purchase Flow Tests: General purchase operations and error handling
    • Subscription Flow Tests: Subscription-specific operations and lifecycle management
    • Available Purchases Tests: Purchase history, restoration, and transaction management
    • Enhanced test coverage from 26% to 28.2%

Improvements #

  • Type Safety: Enhanced type casting and JSON parsing reliability

    • Fixed Map<Object?, Object?> to Map<String, dynamic> conversion issues
    • Improved null safety handling for platform-specific fields
    • Better error handling for malformed data
  • Subscription Management: Enhanced active subscription detection

    • Improved iOS subscription detection logic for better reliability
    • Added fallback logic for subscription identification across platforms
  • Code Quality: Comprehensive test suite improvements

    • All 95 tests now pass consistently
    • Flexible test assertions that adapt to mock data variations
    • Better separation of platform-specific test scenarios

Bug Fixes #

  • Critical Fix: Fixed iOS subscription loading issue where requestProducts with PurchaseType.subs returned empty arrays
    • iOS now correctly uses getItems method instead of unsupported getSubscriptions
    • Resolves GitHub issues where users couldn't load subscription products on iOS
  • Fixed type casting errors in purchase data conversion
  • Fixed subscription detection on iOS platform
  • Fixed Android purchase state mapping in active subscription queries
  • Resolved null reference exceptions for platform-specific fields
  • Fixed test expectations to match actual implementation behavior

Technical Improvements #

  • Enhanced mock data consistency across test files
  • Improved JSON serialization/deserialization robustness
  • Better error messages and debugging information
  • Standardized field naming conventions following OpenIAP specification

Breaking Changes #

None - This version maintains full backward compatibility while extending functionality.

6.2.0 #

Features #

  • OpenIAP Compliance: Added id field to Purchase class for standardized transaction identification
  • Unified Purchase Token: Added purchaseToken field for cross-platform server validation
    • iOS: Contains JWS representation for App Store validation
    • Android: Contains purchase token for Google Play validation
    • Deprecated platform-specific token fields in favor of unified approach

Improvements #

  • Transaction Management: finishTransaction now accepts Purchase objects directly
  • iOS StoreKit 2: Complete implementation with improved transaction handling
  • Date Handling: Fixed date parsing issues across platforms
  • Error Handling: Enhanced error reporting and duplicate event prevention

Bug Fixes #

  • Fixed missing transactionId and id fields in Android purchase responses
  • Fixed iOS transaction finishing with proper ID lookup
  • Fixed date conversion issues in Purchase.fromJson()

Breaking Changes #

None - This version maintains backward compatibility.

6.1.0 #

Breaking Changes #

  • API Cleanup: Removed all deprecated methods that were marked for removal in 6.0.0
    • Removed initialize() - use initConnection() instead
    • Removed checkSubscribed() - implement custom logic with getAvailablePurchases()
    • Removed showInAppMessageAndroid() - no longer supported
    • Removed manageSubscription() - use deepLinkToSubscriptionsAndroid() instead
    • Removed openPlayStoreSubscriptions() - use deepLinkToSubscriptionsAndroid() instead
    • Removed clearTransactionIOS() - no longer needed
    • Removed showPromoCodesIOS() - use presentCodeRedemptionSheetIOS() instead
    • Removed getPromotedProductIOS() and requestPromotedProductIOS() - use standard purchase flow
    • Removed requestProductWithOfferIOS() and requestPurchaseWithQuantityIOS() - use requestPurchase() with RequestPurchase object
    • Removed consumePurchaseAndroidLegacy() and validateReceiptAndroidLegacy() - use modern equivalents
    • Removed deepLinkToSubscriptionsAndroidLegacy() - use deepLinkToSubscriptionsAndroid()
    • Removed acknowledgePurchaseAndroid() - use finishTransaction() instead

Improvements #

  • Code Quality: Removed internal legacy methods and cleaned up codebase
    • Removed _requestPurchaseOld() internal method
    • Consolidated duplicate functionality
    • Improved type safety and consistency

Migration Guide #

If you're upgrading from 6.0.x and were using any deprecated methods:

  • Replace initialize() with initConnection()
  • Replace acknowledgePurchaseAndroid() with finishTransaction()
  • Use requestPurchase() with proper RequestPurchase objects instead of platform-specific methods
  • Use presentCodeRedemptionSheetIOS() for promo codes on iOS

6.0.2 #

Bug Fixes #

  • Android: Fixed missing signatureAndroid field in purchase conversion
    • Added signatureAndroid and other Android-specific fields to the Purchase object
    • Ensures Android purchase signature is properly passed through for receipt validation

6.0.1 #

Bug Fixes #

  • iOS: Fixed type casting issue where subscriptionPeriodNumberIOS was sent as integer instead of string from native iOS code, causing runtime errors
  • Internal: Renamed unused stream controllers for better code clarity
    • _purchaseUpdatedController_purchaseUpdatedListener
    • _purchaseErrorListenerController_purchaseErrorListener

6.0.0 #

Major Release - Open IAP Specification Compliance #

This major release redesigns the API to fully comply with the Open IAP specification, providing a standardized interface for in-app purchases across platforms.

What is Open IAP? #

Open IAP is an open standard for implementing in-app purchases consistently across different platforms and frameworks. By following this specification, flutter_inapp_purchase now offers:

  • Consistent API design patterns
  • Standardized error codes and handling
  • Unified purchase flow across iOS and Android
  • Better interoperability with other IAP libraries

Breaking Changes #

  • Architecture: Complete redesign following Open IAP specification
    • Removed useIap hook and IapProvider - use FlutterInappPurchase.instance directly
    • Removed flutter_hooks dependency
    • Simplified API with direct instance access pattern
  • iOS: Now requires iOS 11.0+ with StoreKit 2 support (iOS 15.0+)
  • Android: Updated to Billing Client v8.0.0
  • API Changes:
    • Enum naming convention: E_UNKNOWNeUnknown (lowerCamelCase)
    • Channel access: FlutterInappPurchase.channelFlutterInappPurchase.instance.channel
    • Unified error handling with standardized error codes

New Features #

  • Open IAP Compliance: Full implementation of the Open IAP specification
  • Improved Error Handling: Standardized error codes across platforms
  • Event-based Architecture: New listeners for purchase updates and errors
  • StoreKit 2 Support: Automatic transaction verification on iOS 15.0+
  • Better Type Safety: Enhanced TypeScript-like type definitions

Migration Guide #

// Before (5.x)
final iap = useIap();
await iap.initialize();

// After (6.0)
final iap = FlutterInappPurchase.instance;
await iap.initConnection();

For complete migration details, see the documentation.

5.6.2 #

5.6.1 #

5.6.0 #

  • refactor: android init connection

    Used Kotlin apply for cleaner initialization of billingClient.
    Introduced context ?: return for null-safety with context.
    Merged repetitive code into the updateConnectionStatus method to avoid duplication.
    Improved the handling of the alreadyFinished flag to ensure it is only set once and at the appropriate time.
    Streamlined the error and success handling for clarity.
    
  • Migrate android billingClient to 6.0.1

5.5.0 #

  • Erroneous duplicate item (#441) - Remove extra introductoryPricePaymentModeIOS

  • Fixed consumable products reading on Android (#439)

  • chore(deps): migrate internal packages to recent

    http: ^1.1.0
    meta: ^1.10.0
    platform: ^3.1.3
    
  • chore: migrate example project to recent flutter version, 3.16.0-0.3.pre

5.4.2 #

What's Changed #

New Contributors #

Full Changelog: https://github.com/hyochan/flutter_inapp_purchase/compare/5.4.1...5.4.2

5.4.1 #

5.4.0 #

5.3.0 #

What's Changed #

New Contributors #

Full Changelog: https://github.com/hyochan/flutter_inapp_purchase/compare/5.2.0...5.3.0

5.2.0 #

Bugfix #356

5.1.1 #

Run on UiThread and few others (#328)

  • Related #272

  • The main difference is a new MethodResultWrapper class that wraps both the result and the channel. onMethodCall() now immediately saves this wrapped result-channel to a field and only uses that later to set both the result and to send back info on the channel. I did this in both Google and Amazon but I can't test the Amazon one.

  • Included the plugin registration differences.

  • Midified suggested in one of the issues that initConnection, endConnection and consumeAllItems shouldn't be accessors. This is very much so, property accessors are not supposed to do work and have side effects, just return a value. Now three new functions are suggested and marked the old ones deprecated.

Fourth, EnumUtil.getValueString() is not really necessary, we have describeEnum() in the Flutter engine just for this purpose.

5.1.0 #

Upgrade android billing client to 4.0.0 (#326)

Remove orderId in Purchase

  • This is duplicate of transactionId.

Support for Amazon devices with Google Play sideloaded (#313)

5.0.4 #

  • Add iOS promo codes (#325)
  • Use http client in validateReceiptIos (#322)
  • Amazon getPrice directly withoiut formatting (#316)

5.0.3 #

  • Fix plugin exception for requestProductWithQuantityIOS #306

5.0.2 #

  • Replaced obfuscatedAccountIdAndroid with obfuscatedAccountId in request purchase method #299

5.0.1 #

  • Add AndroidProrationMode values #273

5.0.0 #

  • Support null safety #275

4.0.2 #

  • The dart side requires "introductoryPriceCyclesAndroid" to be a int #268

4.0.1 #

  • platform dep version >=2.0.0 <4.0.0

4.0.0 #

  • Support flutter v2 #265

3.0.1 #

  • Migrate to flutter embedding v2 #240
  • Expose android purchase state as enum #243

3.0.0 #

  • Upgrade android billing client to 2.1.0 from 3.0.0.
  • Removed deveoperId and accountId when requesting purchase or subscription in android.
  • Added obfuscatedAccountIdAndroid and obfuscatedProfileIdAndroid when requesting purchase or subscription in android.
  • Removed developerPayload in android.
  • Added purchaseTokenAndroid as an optional parameter to requestPurchase and requestSubscription.

2.3.1 #

Republishing since sourcode seems not merged correctly.

2.3.0 #

  • Bugfix IapItem deserialization #212
  • Add introductoryPriceNumberIOS #214
  • Fix iOS promotional offers #220

2.2.0 #

  • Implement endConnection method to declaratively finish observer in iOS.
  • Remove addTransactionObserver in IAPPromotionObserver.m for dup observer problems.
  • Automatically startPromotionObserver in initConnection for iOS.

2.1.5 #

  • Fix ios failed purchase handling problem in 11.4+ #176

2.1.4 #

  • Fix dart side expression warning #169.

2.1.3 #

  • Fix wrong introductory price number of periods #164.

2.1.2 #

  • Trigger purchaseUpdated callback when iap purchased #165.

2.1.1 #

  • Renamed finishTransactionIOS argument purchaseToken to transactionId.

2.1.0 #

  • finishTransaction parameter changes to purchasedItem from purchaseToken.
  • Update android billing client to 2.1.0 from 2.0.3.

2.0.5 #

  • [bugfix] Fix double call of result reply on connection init #126

2.0.4 #

  • [bugfix] Fix plugin throws exceptions with flutter v1.10.7 beta #117

2.0.3 #

  • [bugfix] Decode response code for connection updates stream #114
  • [bugfix] Fix typo in consumePurchase #115

2.0.2 #

  • use ConnectionResult as type for connection stream, fix controller creation #112

2.0.0+16 #

  • Resolve #106 by not sending result.error to the listener. Created use _conectionSubscription.

2.0.0+15 #

  • Fixed minor typo when generating string with toString. Resolve #110.

2.0.0+14 #

  • Pass android exception to flutter side.

2.0.0+13 #

  • Android receipt validation api upgrade to v3.

2.0.0+12 #

  • Resolve #102. Fluter seems to only sends strings between platforms.

2.0.0+9 #

2.0.0+8 #

2.0.0+7 #

2.0.0+6 #

  • Send purchase-error with purchases returns null.

2.0.0+5 #

  • Renamed invoked parameters non-platform specific.

2.0.0+4 #

  • Add deveoperId and accountId when requesting purchase or subscription in android. Find out more in requestPurchase and requestSubscription.

2.0.0+3 #

  • Correctly mock invoke method and return results #94

2.0.0+2 #

  • Seperate long example code to example readme.

2.0.0+1 #

  • Properly set return type PurchaseResult of when finishing transaction.

2.0.0 🎉 #

  • Removed deprecated note in the readme.
  • Make the previous tests work in travis.
  • Documentation on readme for breaking features.
  • Abstracts finishTransaction.
    • acknowledgePurchaseAndroid, consumePurchaseAndroid, finishTransactionIOS.

[Android]

  • Completely remove prepare.
  • Upgrade billingclient to 2.0.3 which is currently recent in Sep 15 2019.
  • Remove [IInAppBillingService] binding since billingClient has its own functionalities.
  • Add [DoobooUtils] and add getBillingResponseData that visualizes erorr codes better.
  • buyProduct no more return asyn result. It rather relies on the purchaseUpdatedListener.
  • Add feature method acknowledgePurchaseAndroid
    • Implement acknowledgePurchaseAndroid.
    • Renamed consumePurchase to consumePurchaseAndroid in dart side.
    • Update test codes.
  • Renamed methods
    • buyProduct to requestPurchase.
    • buySubscription to requestSubscription.

[iOS]

  • Implment features in new releases.
    • enforce to finishTransaction after purchases.
    • Work with purchaseUpdated and purchaseError listener as in android.
    • Feature set from react-native-iap v3.
    • Should call finish transaction in every purchase request.
    • Add IAPPromotionObserver cocoa touch file
    • Convert dic to json string before invoking purchase-updated
    • Add getPromotedProductIOS and requestPromotedProductIOS methods
    • Implement clearTransaction for ios
    • Include purchasePromoted stream that listens to iap-promoted-product.

1.0.0 #

0.9.+ #

  • Breaking change. Migrate from the deprecated original Android Support Library to AndroidX. This shouldn't result in any functional changes, but it requires any Android apps using this plugin to also migrate to Android X if they're using the original support library. Android's Migrating to Android X Guide.

  • Improved getPurchaseHistory's speed 44% faster #68.

0.8.+ #

  • Fixed receipt validation param for android.

  • Updated http package.

  • Implemented new method getAppStoreInitiatedProducts.

    • Handling of iOS method paymentQueue:shouldAddStorePayment:forProduct:
    • Has no effect on Android.
  • Fixed issue with method buyProductWithoutFinishTransaction for iOS, was not getting the productId.

  • Fixed issue with toString method of class IapItem, was printing incorrect values.

  • Fixes for #44. Unsafe getting originalJson when restoring item and Android.

  • Use dictionaryWithObjectsAndKeys in NSDictionary to fetch product values. This will prevent from NSInvalidArgumentException in ios which rarely occurs.

  • Fixed wrong npe in android when getAvailablePurchases.

  • Only parse orderId when exists in Android to prevent crashing.

  • Add additional success purchase listener in iOS. Related #54

0.7.1 #

  • Implemented receiptValidation for both android and ios.
    • In Android, you need own backend to get your accessToken.

0.7.0 #

  • Addition of Amazon In-App Purchases.

0.6.9 #

  • Prevent nil element exception when getting products.

0.6.8 #

  • Prevent nil exception in ios when fetching products.

0.6.7 #

  • Fix broken images on pub.

0.6.6 #

  • Added missing introductory fields in ios.

0.6.5 #

  • convert dynamic objects to PurchasedItems.
  • Fix return type for getAvailablePurchases().
  • Fix ios null value if optional operator.

0.6.3 #

  • Update readme.

0.6.2 #

  • Fixed failing when there is no introductory price in ios.

0.6.1 #

  • Fixed checkSubscribed that can interrupt billing lifecycle.

0.6.0 #

  • Major code refactoring by lukepighetti. Unify PlatformException, cleanup new, DateTime instead of string.

0.5.9 #

  • Fix getSubscription json encoding problem in ios.

0.5.8 #

  • Avoid crashing on android caused by IllegalStateException.

0.5.7 #

  • Avoid possible memory leak in android by deleting static declaration of activity and context.

0.5.6 #

  • Few types fixed.

0.5.4 #

  • Fixed error parsing IapItem.

0.5.3 #

  • Fixed error parsing purchaseHistory.

0.5.2 #

  • Fix crashing on error.

0.5.1 #

  • Give better error message on ios.

0.5.0 #

  • Code migration.
  • Support subscription period.
  • There was parameter renaming in 0.5.0 to identify different parameters sent from the device. Please check the readme.

0.4.3 #

  • Fixed subscription return types.

0.4.0 #

  • Well formatted code.

0.3.3 #

  • Code formatted
  • Updated missing data types

0.3.1 #

  • Upgraded readme for ease of usage.
  • Enabled strong mode.

0.3.0 #

  • Moved dynamic return type away and instead give PurchasedItem.

0.2.3 #

  • Quickly fixed purchase bug out there in issue. Need much more improvement currently.

0.2.2 #

  • Migrated packages from FlutterInApp to FlutterInAppPurchase because pub won't get it.

0.1.0 #

427
likes
140
points
7.7k
downloads

Publisher

verified publisherdooboolab.com

Weekly Downloads

In App Purchase plugin for flutter. This project has been forked by react-native-iap and we are willing to share same experience with that on react-native.

Repository (GitHub)
Contributing

Documentation

API reference

License

MIT (license)

Dependencies

flutter, http, meta, platform

More

Packages that depend on flutter_inapp_purchase

Packages that implement flutter_inapp_purchase