-
Notifications
You must be signed in to change notification settings - Fork 6
Nami SDK Stable Releases
- Further refinements to StoreKit 2-based purchase event handling
- Resolve issue where sometimes product button didn't appear when the product container contained a collapse component
- Resolve an issue where video controls were too large
- Resolve issue with accessibility on toggle component
- Resolve an issue where the StoreKit receipt didn't refresh properly
- Adjust handling of validate product group to utilize paywall capabilities
- On multipage paywall, pause page 1 video when navigating to separate page
- Resolve an issue with detecting invalid products
- Product container supports vertical alignment bottom
- Fix issue with carousel height
- Fix vertical alignment to background container was not setting properly
- Fix issue where certain event were sent to the API when they should not have been
- Fix issue where profile updates we attempted, even if a device id was not registered
- Fix issue where a failed device registration wouldn't block fetching paywalls
- Fix support for 'dd' date formatte
- Fix issue with conditions on carousel
- Fix product display bug on iOS 14.4
- Fix issue with spacer component with fixed height and safe area margin
- Move initial product load to default priority queue
- Use disableSingleGroup flag for more precise eligibility check
- Add post-conversion event support
- Support orientation change conditionals
- Support dynamic text font color from data source
- Fix collapse component scroll on long content
- Fix bullet list text not changing on product group change for Lionfish
- Fix issue with app supplied video details not changing after initial launch
- Add new responsive grid component
- Support advanced video features
- Add Paywall Launch Context customObject for responsive grid
- Support introductoryPricePerMonth smart text
- Modify header behavior for collapse component
- Don't require session id for impression
- Support hero video at top of background container
- Collapse component analytics should use component title
- Support for horizontal items in responsive grid
- Support for hidden components
- Fix video unmute after several launches
- Fix issue with test app campaign interaction
- Fix collapse logic with multiple collapsible components
- Fix issue with fallback image when video is paused
- Fix issue causing image loading spinner and flashing
- Fix issue with icons not aligning properly
- Fix issue with video playback on subsequent launch of same paywall
- Fix issue with header and content not aligning exactly
- Fix top content cutoff on conch template
- Add test app support for staging QA app platform id
- Support for the all-new Paywall Creator
- Resolve an issue with selected product price display on templates supporting carousels and product groups
- Resolve an issue with selected product border on certain paywall templates
- Resolve issue conversion reporting when running on StoreKit 2 impacting certain plans
- Resolve and issue applying drop shadows on elements inside product containers
- Support for dynamic purchase buttons
- Resolve issue with paywall product load on iOS 14
- For customers using Nami for purchase management, StoreKit 2 is now used for initiating the purchase flow on supported OS versions (e.g. iOS 15+, tvOS 15+). Previously releases used StoreKit 2 on these OS versions for loading product information and determining customer eligibility on paywall. Now, StoreKit 2 is also being used to present the App Store purchase flow. Previous OS versions will continue using StoreKit 1.
- Bump compile toolchain to Xcode 14.1 per Apple (https://developer.apple.com/news/?id=jd9wcyov)
- NamiPurchaseManager functions
skuPurchased
andanySkuPurchased
are nowasync
- Previously deprecated NamiPurchaseManager functions removed:
restorePurchases(handler: @escaping RestorePurchaseCompleteHandler)
register(purchasesChangedHandler changeHandler: NamiPurchaseResponseHandler?)
- NamiPurchaseManager functions now marked deprecated:
skusForSKUIds(skuIds: [StoreId], productHandler: @escaping SKUsRequestCompletionHandler)
func getRecord(forSKU skuId: StoreId) -> NamiPurchase?
- Fix issue where sku type was marked unknown in the
registerBuySkuHandler
andpaywallActionHandler
callbacks.
- Bump to Xcode 14.0.1 framework compilation
- Fix issue where invalid products on paywall were causing CTA loading indicators to not clear
- Fix issue with hang on paywall launch early in the lifecycle when product details were still being gathered.
- Improve eligibility detection performance when a lot of skus and/or subscription groups are present
- Don't call
NamiPaywallManager.dismiss
completion handler multiple times
- Optimize sku menu filtering
- Resolve main thread hang in certain circumstances
- Enhance how initial config files are used to improve fallback scenarios
- Improve
Nami.configure
to support runtime reconfiguration - Support for runtime language switching for select plans
- Support for product error states on select paywall templates
- Support for
sku.pricePerWeek
smart text - Improved support for Ventura paywall template
- Resolve issue with carousel display on iOS 14 devices
- Resolve issue with image loading on iOS 14 devices
- Improved paywall eligibility detection
Version bump.
- Fix issue with promotional eligibility key for tvOS paywalls
- Support for ${sku.pricePerDay} smart text
- Simplify
NamiPurchaseSuccess
for paywall-only plans
- Support for table component
- Fix issue with eligibility detection for templates using launch context product groups
- Fix issue with container component appearing when it shouldn't
- Fix issue with close button not appearing
- Don't show user facing text on paywall when an image can't load
- Don't pass through a promo ID if it's not valid
- Guards against API traffic if certain conditions are not met
- Fix an issue where the transaction call would not send a valid payload
- If the SDK hasn't been configured, background listeners will do nothing.
- Bug fix for multi-page paywall back action on mobile
- Allow
Nami.configure
to be run again during the same session, if and only if, the app platform ID is different than the current configuration
- Don't allow
Nami.configure
to be run multiple times during the same initialization - Only enable ML functionality on supported accounts
- Provide an optional callback when
Nami.configure
is complete - Provide error handling callbacks when Nami is not configured in `NamiCustomerManager methods
- Expose
Nami.sdkConfigured
to let apps guard against calling into the SDK before being configured
- tvOS: resolve what should happen when the remote back button happens on multi-page paywalls
- tvOS: Fix
page_change
events to ensure they are fired correctly on multi-page paywalls
- Added
NamiPaywallManager.isPaywallOpen
to find out if a paywall is currently on screen
- If we have campaign data, but not campaign's paywall id is not available,
NamiCampaignManager.isCampaignAvailable
now returnsfalse
. UseNamiCampaignManager.isCampaignAvailable
to guard against aNamiCampaignManager.launch
that would result in an error code on paywall raise.
- Resolve issue with transaction reporting under certain plan types
- Resolve text truncation issue on iOS 17/tvOS 17
Add NamiPaywallManager.registerDeeplinkActionHandler
so customers can implement their own logic to handler paywall buttons that trigger deep link actions. This can be used to either handle the "openURL" logic themselves, or implement custom logic to interpret the value passed through the handler and do whatever makes sense in the app context.
If this handler is not registered, the system will automatically open deep link URLs if a deep link action button on paywall is pressed.
- Ensure provisional entitlements carry the name or desc fields if populated in the Control Center
- Surface pending purchase in the
paywallActionHandler
with newPaywallActionType
purchase_pending
instead ofpurchase_unknown
- Improved iOS, tvOS 17 support
- Paywalls-only plans: Add loading indicators on paywall products when purchase is initiated. Indicators are cleared upon
NamiPaywallManager.buySkuComplete
andNamiPaywallManager.buySkuCancel
- Set a shorter provisional entitlement TTL (3 minutes) when purchase environment is sandbox
- Make provisional entitlement TTL configurable through optional Nami.configure value
provisionalGrantTTL
- Allow the provisional grants to be cleared manually via a
NamiEntitlementManager.clearProvisionalEntitlementGrants
- Resolve an issue where the current login or logout status was incorrect.
- Initial compatibility for iOS and tvOS 17
- Improvements to reduce API requests to the Nami service when not necessary
- Resolve issue with
NamiEntitlementManager.active
not reliabily returning active entitlements from the server - Correct an issue with image fill behavior
This release changes how NamiEntitlementManager.active
gets its data. It now returns a provisional entitlement grant immediately after purchase, while waiting for server validation. The provisional grant has a TTL of 24 hours. We're going to refine this behavior in future SDK updates to:
- Use a shorter TTL for provisional grants issued through sandbox purchases
- Allow the provisional grant TTL to be configurable through optional Nami.configure parameter
- Allow the provisional grants to be cleared manually via a NamiEntitlementManager.clearProvisionalEntitlementGrants
In the mean time, if you are testing purchases and calling NamiEntitlementManager.active
on this release, perform a clean re-install between purchase tests since a provision grant may still be valid (for 24 hours) even when an accelerated sandbox purchase has expired.
- Resolve performance issue on multi-page tvOS templates
- Resolve issue with selecting default focus on product buttons
- Fix tap area in segment picker component
- Fix fill image issue in empty container component
- Fix priceDifference and priceDifferencePercentage smart text substitutions
- Internal improvement for custom fonts
- Fix public initializer for
NamiSKU
to avoid ambiguity
-
NamiCampaignManager.launch
paywallActionHandler
not returns aNamiPaywallEvent
object instead of long list of parameters
- Support for multi-page paywall templates
- Support for animated product toggle component
- Select paywall templates now support automatic eligibility detection for free trials, intro offers, and promotional offers
- Support image alignment
- Open legal links via external browser
- Fix bug rendering all stops of gradients
- Internal improvements and enhancements
- Add
NamiPaywallManager.isHidden
for advanced use case where Nami Window is in use. - Improve focus handling on tvOS with certain paywall templates
- Fix thread data race which could result in a bad access crash
- Fix issue in
NamiPaywallManager.registerBuySkuHandler
where theNamiSKU
id
field could be incorrect
- Fix issue with launching deep link campaign when a Nami UIWindow is in use.
- Refine the Nami UIWindow, including support for tvOS
- Improve paywall raise when multiple UIWindows are found, including an optional Nami-supplied UIWindow instance.
- Detect paywall close if the user swipes away the view
- Get rid of some dead code
- Allow paywall to launch if the parent view controller is modal
- Resolve issue where urls passed into
paywallLaunchContext
were not getting cleared between launch
- Fix issue where campaign name didn't properly surface in
paywallActionHandler
- Add anonymous mode - advanced use case
- Filter campaigns by device form factor
- Fix issue with products not loading on initial launch
- Support for deep linking campaigns
- tvOS paywall improvements for 1080p and 4k
- Additional metadata included in
paywallActionHandler
callbacks - Support for dynamic sign-in control on supported templates
- Support for custom accessibility hint for paywall product buttons
- Resolve issue with RGBA color format parsing
- Resolve
NamiCampaignManager.isLoggedIn
not returning correct answer early in the SDK lifecycle
- Support for whitelisting product groups at launch for supported multi-product group paywall templates
- Support for passing custom K/V attributes at launch for supported advanced paywall templates
- Support for seagull template
- Major performance improvement which resolves main thread hang under certain circumstances on iOS 15
- Support managing styles at the sku-level on supported paywall templates
- Fix spacer expansion issue with scroll view resolving brighton footer text issue on large devices.
- Improved logic for determining where to present paywall from
- Additional version of
NamiCampaignManager.launch
which accepts an optional view controller to present from
- Properly register paywall close through the action handler when Apple TV remote menu button is pressed
- Add a public initializer for
NamiSKU
to support cross-platform frameworks - Add support for providing an initial config file to improve the first run experience
- Add support for drop shadows in supporting paywall templates
- Add support for paywall templates with multiple product sections
- Fix caching strategy on tvOS
- Always allow
NamiPaywallManager.registerBuySkuManager
to be registered
- Fix caching strategy on tvOS
- Fix SPM Package.swift
- Various internal improvements
- Link/unlink a device to a Customer Data Platform using
NamiCustomerManager.setCustomerDataPlatformId
andNamiCustomerManager.setCustomerDataPlatformId
. Add routing of success/error through NamiAccountStateHandler callback.
- Improvements to tvOS focus
- Improvements to paywalls on tvOS 4k devices
- Include campaign id,campaign label (if available), and paywall id in
NamiPaywallActionHandler
events - Internal improvements to paywall template color handling
- tvOS Support
- Support for strikethrough text
- Significant improvement to campaign launch times
- Introduce paywall loading indicators for product load & waiting for the App Store purchase sheet
- Add
NamiPaywallManager.registerRestoreRequestHandler
so customers paywall-only plans can respond to paywall restore requests - Improve iPad display
- Legacy Linked & Paywall Creator paywalls are no longer supported
- iOS 13 is no longer supported
- Add new
NamiCustomerManager
methodssetCustomerAttribute
,getCustomerAttribute
,clearCustomerAttribute
,clearAllCustomerAttributes
for paywall personalize features
- Incremental improvement to campaign launch times
- Utilize asynchronous loading for all paywall images
- Add support for upcoming paywall templates
- Add devices traits for upcoming campaign targeting use cases
- Add new campaign management features to support using campaign availability to drive user interface elements. See
NamiCampaignManager
methodsallCampaigns
,isCampaignAvailable
,refresh
andregisterAvailableCampaignsHandler
- Add support for bringing your own IAP/subscription management implementation for supported plan types. See
NamiPurchaseManager
methodsregisterBuySkuHandler
andbuySkuComplete
- Improvements to support paywall presentation in full screen (requests compatible templates)
Note: Nami Apple SDK is jumping versions to aligned with Nami Android, to reflect the fact that the SDKs are now synced in terms of supported features.
- Support for Carousel component on supported paywall templates
- Support Dark Mode on supported paywall templates
- Support loading font resources over the wire when available for supported paywall templates
- Add optional
fullScreenPresentation
property toNamiConfiguration
. Defaults to false. When true, paywalls will be displayed withmodalPresentationStyle .fullscreen
- Add additional purchase lifecycle context to
paywallActionHandler
(see NamiCampaignManager.launch)
- Ensure more responsive tap zones for paywall close buttons
- Fix custom font loading when postscript name differs from font family and font style metadata
- Make sure callbacks to
NamiEntitlementManager.registerActiveEntitlementsHandler
are made whenever updates are available - Ensure
purchase_selected_sku
action comes through throughpaywallActionHandler
(see NamiCampaignManager.launch) - Improve support for paywall text on iOS 13 & iOS 14
- Fix processing of certain rgb color formats
- Renamed mis-named
NamiPurchaseInternal
toNamiPurchase
- Remove public interface to several internal methods
- Framework is now called
NamiApple
. No client API changes, but Swift projects now need toimport NamiApple
- Many methods were renamed to simply the SDK implementation. See SDK reference for full details.
- Support for new generation of no-code paywall templates
- Improved image caching for template paywalls.
- Support for paywall a/b testing campaigns.
- Support of paywall templates with multiple product groups
- Support for paywall templates with product buttons that are separated from CTA action to start purchase flow
- Add
sku.priceDifferenceFromSku
Smart Text variable - Support for use case where Nami is used for paywall management, but customer has in-house code or a third-party for subscription & purchase management
- Support for V1 of Brighton paywall template
- Allow
NamiLanguageCode
to be used inconfigure
to override use of device's current locale language for paywall localization - Add optional callback to
NamiCampaignManager.launch
which surfacesNamiPaywallAction
events for interactions with a paywall - Added
NamiCustomerManager.deviceId
to access Nami's unique identifier for the device - Added new Paywall Smart Textvariables:
pricePerMonth
,durationInMonths
,durationInMonthsSingular
,periodInMonths
,periodNumberInMonths
,percentagePriceDifferenceFromSku
- Added
NamiCustomerManager.registerAccountStateHandler
to make it easier to respond to login and logout calls. See SDK Reference for details. - Support for paywalls with more than one group of products
- Ability to optionally specify Vendor ID or Advertiser ID for advanced use cases
- Added call to manually trigger refresh of entitlement state from Nami servers
- Fix for border stroke position on certain paywall templates
- Fix scrolling behavior on paywalls with long content areas
- Fix issue with cached config was not being used to setup SDK capabilities on launch
- Fix an issue where the default selected sku wasn't usable to transact on paywall's with a CTA button
- Fix data type for
campaignType
surfaced viaNamiAnalyticsSupport
- Fixed issue with featured badge and Paywall Smart Text on some paywall templates
- Fix logging when incorrect App Platform ID is used
- Refresh call in NamiEntitlementManager fixed
- Internal fixes around handling of transactions
- Handles larger data sets from Nami
- Improved logging
- Bug fixes and stability updates
- Allow
sku.percentagePriceDifferenceFromSku
Smart Text variable to work in featured badge text - Provide public interface
NamiPurchaseManager.restorePurchases
which calls back to global handler registers viaNamiPurchaseManager.registerRestorePurchasesHandler
- Change PaywallActionHandler to return a full
NamiSKU
, and optionally a list of ofNamiPurchase
- Changed callback from
NamiPaywallManager.registerClosedHandler
to align with Nami Android SDK behavior - Rename
NamiPaywallManager.registerClosedHandler
toNamiPaywallManager.registerCloseHandler
for consistency across Nami SDKs. - Improve symbol support for paywall templates with icons
- Improved support for Nami cross-platform SDKs (e.g. Flutter, React Native, Xamarin)
- Improved error handling related to campaign launch
- Add initial support for upcoming paywall templates
- Improved support for Paywall Templates: Penguin, Pacific, Trident, Starfish, Mantis & Venice
- Improved log messages related to campaign launch
- Improvements that simplify campaign launch
- Improvements when used by SwiftUI apps
- SDK usability improvements including easier to understand method interfaces.
- Internal improvements to the CI/CD pipeline
-
setExternalIdentifier
andclearExternalIdentifier
now support optional completion handlers
- Fix SDK version reporting
- Update to internal StoreKit handling
- Groundwork for future release
- Fixed bug where apps with multiple paywalls with different SKU styles would sometimes render with an incorrect style
- Fixed incorrect Nami API hostname for new v2 SDK APIs. Please use this version over any version 2.9.1 or later.
Deprecated - This version should not be used with the Nami platform. Please use version 2.9.2 or higher.
- Fixed issue with localized paywall button text when accessibility text to speech values are not used
- Fixed issue with styles applied to clickwrap text on paywalls.
- Added additional SDK configuration logging when
NamiLogLevel
set to.debug
Deprecated - This version should not be used with the Nami Platform. Please use version 2.9.2 or higher.
- Added
NamiPaywallManager.currentNamiPaywallViewController
to get the View Controller of an open paywall to enable displaying UI components while the paywall is open - Added
registerRestorePurchasesHandler
to enable reacting to the restore purchase process and displaying messages to the app user
- Remove all Nami generated UI modals to communicate purchase status (success, failure, etc.). Duplicative with Apple UI modals.
- Remove all Nami generated UI modals to communicate the status of a restore purchase process. Use
registerRestorePurchasesHandler
to customize how you communicate the restore purchase process to your app users.
- Fixed issue where paywall opened in landscape orientation does not properly render when switched to portrait orientation
Deprecated - This version should not be used with the Nami platform. Please use version 2.9.2 or higher.
- Removed dSym files for Nami XCFramework.
Deprecated - This version should not be used with the Nami platform. Please use version 2.9.2 or higher.
Changelog
This release introduces several new features including: language localization for paywalls, accessibility VoiceOver support, and new paywall layout controls.
Note that SDKs v2.7.0 and earlier are deprecated and you should switch to v2.8.0 or greater by August 30, 2022.
Breaking Changes
- SDK versions v2.0.0 to v2.7.0 are deprecated. Please switch to v2.8.0 or newer by August 30, 2022.
New Features
- Localize paywalls. Build paywalls in multiple languages in the Control Center, and decide whic one to use in your app. Localization supports:
- All language fields on your paywall
- Accessibility VoiceOver support in the correct language and with audio hints per language
- Localization of all paywall buttons
- Localization of both the link text and URL in the clickwrap terms on the paywall screen.
- VoiceOver Accessibility support
- Paywalls created with the cloud based Nami Paywall Creator now fully support VoiceOver, including hints to specifically help with understanding the paywall content
- New Paywall Layout options including:
- Controls the size of the scrollable region at the bottom of the paywall
- Decide if the purchase buttons should be fixed placement or in the scrollable region
Enhancements
- Improved how the Paywall Creator handles large elements on paywalls to ensure no elements overlap
- Added support for simulators running on M1 chips
- Update to internal StoreKit handling
Added
- Support for Paywall Smart Text. Allows changing the text on purchase buttons and inserting data from SKUs in text fields.
- Add
processSmartText
method toNamiPaywallManager
, allows you to process variables in your text that are filled in with data from SKUs. - Added
purchaseTerms
andnamiSkus
toNamiPaywall
to help with linked paywall construction. - Added
presentCodeRedemptionSheet
toNamiPaywallManager
. Use to allow redemption of iOS 14 offer codes.
Added
- Add preparePaywallForDisplay method to NamiPaywallManager to ensure data is available in the SDK to properly render a particular paywall.
Improvements
- Preload all paywall background images as soon as SDK is initialized.
Improvements
- Add Xamarin configuration support.
Bugfixes
-
raisePaywall
with a specific Developer Paywall ID will now trigger the callback for Linked Paywalls.
Improvements
- changed how purchase terms text is rendered on cloud paywalls so text is more clear when it has a shadow.
- changed visualization of a currently purchased SKU on cloud paywalls to work better with button colors.
- Non-breaking change: deprecated
registerApplicationAutoRaisePaywallBlocker
and renamed toregisterAllowAutoRaisePaywallHandler
for clarity and consistency with other callback methods. - Updates to some docstrings for various SDK methods.
Bugfixes
- improved rendering of paywall in landscape mode where background color would sometimes be visible.
- Use multiple paywalls with your app! The raisePaywall method now supports raising any paywall by its developer ID defined in the Control Center.
- Paywall Creator paywalls opened in landscape orientation on phones now switch to render in portrait orientation to ensure all elements are visible.
- Logging improvements to add more clarity when issues occur with StoreKit.
- Provide consistent naming for SDK methods that take callback handlers, deprecated older methods.
- Improvements to how the SDK cleans up open tasks when the app session ends.
- Fixed issue where close button with shadow would appear pixelated.
- Send receipt data to Nami more frequently for entitlement verification.
- Improved logging when issues occur with retrieving data from StoreKit.
- Improved support for testing with StoreKit config files enabled in Xcode for iOS 14.
- Expired purchases often get stuck in Apple's sandbox and mess up testing. We now ensure those get cleared out for you so you don't have to worry about it.
- Adjust featured item spacing on Nami paywalls.
- Fixed issue with background calls to Nami on app close sometimes stalling.
- New styling options for Nami No-Code paywalls.
- Improved Nami paywall design.
- Improved logging around purchase handling.
- If paywall auto-raise is set to every session, first app launch will raise paywall.
- Various stability improvements.
- Grant temporary entitlement immediately on purchase until validation of purchase completes.
- purchasesChangedHandler no longer called for entitlement changes. Please use NamiEntilementManager.entitlementsChangedHandler instead.
- Blocking paywalls now cannot be closed by swiping down, you must click the button.
- Added NamiPaywallManager applicationBlockingPaywallClosedHandler call for custom handling of blocking paywalls.
- Added NamiEnttilementManager entitlementsChangedHandler for reacting to changes to entitlements.
- bypassStore setting now only located in NamiConfig, cannot be changed through NamiPurchaseManager.
- Internal improvements to reduce SDK network call volume.
- Fix for display of multi-month products in SDK generated paywall.
- Removed built-in image reference from SDK paywall template.
- Internal improvements
- bypassStore no longer enabled by default in the simulator
- Added consumptionCount to Consumable NamiPurchase objects. Count is increased each time a consumable SKU is consumed via call to consumePurchasedSKU.
- Consumable purchases now remain in Nami SDK after consumption, so you can check to see if anyone has purchased them in the past.
- SDK logs now work with [console.app](http://console.app) on MacOS Catalina.
- Added call NamiPaywallManager.dismissNamiPaywallIfOpen to allow for presenting post-purchase messages that ensure they always appear after the Nami paywall has been dismissed.
- You are now able to specify any combination of parameters for a NamiEntitlementSetter.
- Internal Improvements.
- Simplified purchase state enumeration to just have one Purchased state, use Entitlements to verify validity of current purchases.
- Further improvements to StoreKit transaction processing.
- Added paywall lifecycle notifications, so an application can react to a paywall raising, and being dismissed either with or without a purchase being made.
- Added ability to disable final "Purchase Complete" dialog if desired.
- Other internal improvements.
- Framework built with Xcode 11.13.1, so you can use either with current Catalina Xcode, or pre-Catalina Xcode.
- Internal improvements.
- Improvements to processing of Apple Sandbox transactions when the sandbox does not behave as expected.
- Improvements to calls to Nami APIs.
- Support for ordering SKUs on paywalls.
- Improvements to handling cross-platform and cross-device entitlements.
- Improved robustness around calls for Nami data collection.
- Added detailed logging around StoreKit purchase process at DEBUG logging level
- Added a timeout to purchase transactions in the Apple Sandbox to deal with reliability issues where purchases often get stuck without completing.
- Improvements to transaction observations in insights mode.
- Internal improvements.
- Internal improvements.
- Update entitlements after setExternalIdentifier is called.
- Activates the purchase handler callback when entitlements received from the Nami platform change.
- Added lifecycle notifications around Nami paywall raising, closing with no purchase, and closing after purchase completes.
- Internal reliability improvements.
- Internal fix for storing entitlements.
- Improved processing of StoreKit transactions related to repeated purchase attempts.
- Improved handling of cross-device and cross-platform entitlements and external ids.
- Improved handling of switches between AppPlatformIDs.
- Added additional logging around StoreKit transaction processing.
- Improve messages displayed during purchase process for one time purchases and subscriptions.
- Changes to ML data sent to Nami.
- Fix for Entitlements being reset and sent to Nami.
- Improvements to reliability when switching between App Platform IDs.
- Improved reliability around sending external identifiers to Nami server.
- Added consumePurchasedSKU to NamiPurchaseManager
- bypassStore now allows you to test purchase flows for products that are not setup on App Store Connect
- Added public access to NamiEntitlement properties
- Improvements to internal API calls
- Send ML and core content and core action data in all app environments
- Added a developmentMode flag to NamiConfiguration to move all API calls out of the background
Nami has deprecated all v1.x.x versions of the SDK. Please only use v2.0.0+ for compatibility with the Nami platform.
For more details on new features, please visit https://docs.namiml.com/.
- Major refactor of the codebase to reduce SDK size and amount of network traffic generated by the SDK.
- Introduced support for apps to be cross-platform.
- Added the concept of entitlements and NamiEntitlementManager to work with entitlement objects.
- Added NamiPurchaseManager to simplify working with purchase flows.
- Greatly improved in-XCode documentation for SDK methods.
- New passive mode - get data, insights, and machine learning models without using Nami's capabilities to manage your in-app purchase process.
- Added external identifiers to help link devices to a customer profile.
- Greatly simplified Nami SDK setup process as well as introduced a new NamiConfiguration object.
- New detailed logging in XCode, use logLevel in NamiConfiguration to control how much logging you see from the SDK.
- All calls are now static instead of shared.
- We now only support XCFramework, XCode 11+, and CocoaPods 1.9+.
- Carthage support dropped until support for XCFramework files becomes available.
- Added helper methods for finding original application purchase version, and version comparison.
- NamiReceiptWrapper now provides visibility to full Apple return dictionary from verifyReceipt call.
- Added extra guard code and logging around Nami Profile.
- Compiled for Xcode 11.3.1
- Stability fixes around calls for Nami session.
- Added backup call to trigger startup code for React Native.
- Added fetchCustomPaywallMetaForDeveloperID() call to get paywall definitions for alternate paywalls.
- Made presentNamiPaywall() public so that developers could make use of the internal Nami paywall through a custom paywall meta definition.
- Simplified method and parameter names, see https://docs.namiml.com/reference.
- Added support for disabling auto-raise limits for triggered paywalls.
- Stability fixes for more reliable presentation of paywalls for auto-raise cases.
- Improved frequency limiting of paywalls by hour.
- Improved debugging output for understanding paywall auto-raise choices.
- Improved environment detection so server reporting of transactions can be given testing transactions.
- Added
canRaisePaywall
method to determine if the SDK has enough data to raise a paywall. - Improvements to tracking of paywall impressions and transactions.
- Xcode 11 now used for primary framework builds, Xcode 10.3 frameworks in Xcode10-3 folder.
- Added environment to cart signals sent to Nami, so testing purchases can be checked with Nami.
- Fixed issue found with RFV calculation.
- Fix consumable product consumption in SDK, so that purchases are not remembered.
- Compiled framework to optimize for smaller build size.
- Use iOS Keychain internally to record purchases.
- Minor fixes for Dark Mode UI in Nami paywalls.
- Improved recognition of running environment to allow for more similar call flow between sandbox/simulator and production use.
- Add ability to create blocking paywalls.
- Removed internal checks for deprecated UIWebView in application.
- For simulator builds, bypassStorekit mode is automatically enabled to avoid confusion when testing purchases.
- Improved sending of purchase signals.
- Improved processing of multiple adjacent transactions from StoreKit.
- Fixed issue with sending Nami profile on launch of application.
- Dark Mode support for Nami paywalls.
- Adds support for paywalls in iMessage Extensions! Note that special setup is required.
- Adds Xcode 11 support via XCFramework, available in XCode11/
- Improved Objective-C visibility for some classes like NamiMetaPurchase.
- For Objective-C, can now import Nami.h instead of Nami-Swift.h.
- Added Objective-C demo app.
- Fixes UI issues for paywalls on the iPad.
- Reduces frequency of profile data transmissions.
- Improves iOS 13 support.
- Support for 3rd party analytics services like Adobe and Google Analytics - Paid Enterprise Feature
- Added example projects demonstrating Adobe and Google Analytics integration
- Fixed issue with session calls not being made under some conditions.
- Improved storeKitBypass subscription product result.
- Corrected Nami paywall display of non-subscription products.
- Added paywall gating mechanism so application can always choose to veto paywall raise.
- Purchase handler callbacks now always occur on main thread.
- Nami SDK now supports ObjectiveC.
- Added support for Carthage distribution.
- Added support for CocoaPods distribution.
- Fix ordering of POST calls for initial session/config data.
- Console messaging when app store shared secret for receipt validation has not been set.
- Check that app bundle ID matches bundle ID for given Nami AppID.
- Minor UI fixes to terms text in paywalls.
- Paywall links for Terms and Privacy Policy now open in-app Safari browser.
- Built for Xcode 10.3, if you still use Xcode 10.2 use framework located in Xcode10-2 folder.
- Added support of additional paywall features for sign-in, restore and legal items.
- Adds callback to provide application to offer sign-in.
- Improve detection of subscription expiration.
- Added re-validation of receipt on regular basis to monitor purchase changes.
- Re-validates receipt on first launch so users may not need to use restore-purchases.
- Improved logging provider to be passed simpler non-http messaging.
- SDK now batches multiple requests for same products if asked for before StoreKit loading finishes.
- Fixed support for safe area at bottom of paywall screen.
- Added callback for Restore Purchase call in NamiStoreKitHelper so that app can present messaging when complete.
- Improves helpers for parsing receipt purchase fragments.
- Added method to NamiLogging to handle simpler logging.
- Added a simple demo app to illustrate how the SDK works.
- Added mechanism to clear bypassStoreKit purchases.
- Improved handling of the StoreKit transaction queue.
- Fixed persistence of StoreKit and bypassStoreKit purchases.
- Improved logging provider to be passed simpler non-http messaging.
First release of the Nami Smart Paywall Platform for iOS SDK. To request an invite, visit https://www.nami.ml/request.
- Nami paywalls - build a paywall in our cloud environment
- App defined paywalls - control or modify your existing in-app paywall through the Nami platform
- Business as usual campaigns - put business rules around how paywalls are displayed to your users
- Simplify StoreKit development
- Test purchase flows in StoreKit
- Server-side StoreKit receipt verification
- Label core content and user actions to enable machine learning based rules for your campaigns and paywalls