Build, Measure and Grow iOS subscription business
Apphud.start(..)
method now returns an ApphudUser
object in the callback instead of void
.variationName
property from the ApphudPaywall
object to avoid misleading usage.func placements() async -> [ApphudPlacement]
to retrieve an array of ApphudPlacement
objects, including their inner StoreKit products.placement(_ identifier: String) async -> ApphudPlacement?
to retrieve a specific placement by identifier.func placementsDidLoadCallback(_ callback: @escaping ([ApphudPlacement]) -> Void)
to retrieve placements with their inner StoreKit products in a callback.func rawPlacements() -> [ApphudPlacement]
to retrieve placements immediately, without waiting for StoreKit products to load.func rawPaywalls() -> [ApphudPaywall]
to retrieve paywalls immediately, without waiting for StoreKit products to load.func willPurchaseProductFromPaywall(_ identifier: String)
to func willPurchaseProductFrom(paywallIdentifier: String, placementIdentifier: String?)
.static var permissionGroups: [ApphudGroup]
to func permissionGroups() async -> [ApphudGroup]?
.func purchaseWithoutValidation(_ productId: String, callback: ((ApphudPurchaseResult) -> Void)?)
.func validateReceipt(callback: @escaping ([ApphudSubscription]?, [ApphudNonRenewingPurchase]?, Error?) -> Void)
.@MainActor
attribute.func placementsDidFullyLoad(placements: [ApphudPlacement])
to get notified when placements are loaded with their inner StoreKit products.func apphudProductIdentifiers()
.func apphudDidFetchStoreKitProducts(_ products: [SKProduct], _ error: Error?)
.func apphudDidFetchStoreKitProducts(_ products: [SKProduct])
.func userDidLoad(rawPaywalls: [ApphudPaywall])
to func userDidLoad(user: ApphudUser)
.What's new in Apphud SDK 3.1.0:
We have worked hard on a new major iOS SDK update and happy to announce that it is now available.
What's new in iOS SDK 3.0.1:
What's new in iOS SDK 3.0.0:
We added ability to purchase products using async/await
syntax and modern Product
struct as well as some other helpful methods. SDK gently operates with both StoreKit and StoreKit2 frameworks simultaneously.
func paywalls() async -> [ApphudPaywall]
method which returns paywalls with their App Store Product
/ SKProduct
models.paywall(_ identifier: String) async -> ApphudPaywall?
method which returns specific paywall by identifier.func fetchSKProducts() async -> [SKProduct]
method which returns SKProducts
for identifiers added in Apphud Product Hub.func purchase(_ product: ApphudProduct, isPurchasing: Binding<Bool>? = nil) async -> ApphudPurchaseResult
method which returns classic ApphudPurchaseResult
.func restorePurchases() async -> Error?
method.fetchProducts() async throws -> [Product]
method which returns Product
structs for identifiers added in Apphud Product Hub. Throwable.func purchase(_ product: Product, isPurchasing: Binding<Bool>? = nil) async -> ApphudAsyncPurchaseResult
method which returns new ApphudAsyncPurchaseResult
struct.func apphudProductFor(_ product: Product) -> ApphudProduct?
method which returns corresponding ApphudProduct
that matches Product
struct.func product() async throws -> Product?
method to ApphudProduct
object. Now you can retrieve both SKProduct
and Product
models from within ApphudProduct
object.$isPurchasing
Binding to a boolean value that determines whether the payment is currently in process.var success: Bool
to ApphudPurchaseResult
.func didUpdateNotification() -> Notification.Name
notification method which is posted whenever any purchase or subscription changes. Useful in Swift and SwiftUI.appleSearchAds
enum value made unavailable due to iAd framework is no longer supported by Apple. Use appleAdsAttribution
instead.getPaywalls(callback: @escaping ([ApphudPaywall]?, Error?) -> Void)
method in favor of paywallsDidLoadCallback(_ callback: @escaping ([ApphudPaywall]) -> Void)
and paywalls() async -> [ApphudPaywall]
methods.productsDidFetchCallback
to fetchProducts
and improved inner logic.refreshStoreKitProducts
method in favor of improved fetchProducts
method.migratePurchasesIfNeeded {}
method for iOS 15+ devices.start(apiKey: String, ..., callback: (() -> Void)? = nil)
method. Useful for retrieving A/B experiment data as soon as possible.startManually(apiKey: String, ..., callback: (() -> Void)? = nil)
method. Useful for retrieving A/B experiment data as soon as possible.func optOutOfTracking()
method which opts out a user from tracking of some parameters, like IP address, IDFA, IDFV, Device Type.isProtectedDataAvailable
is false. Useful for app prewarming in iOS 15+ when screen is locked.You can now set custom purchase value for successful free trial purchases. This value will be used for trial_started
event for integrations, like Appsflyer or Facebook.
purchase(_ product: ApphudProduct, value: Double, callback: ((ApphudPurchaseResult) -> Void)?)
method.setCustomValueForTrial(_ value: Double, productId: String)
method analog for Observer Mode.What’s inside? In SwiftUI Demo App you will learn how to:
Binding<Bool>
variableApphud.didUpdateNotification()
.VStack
.SKProduct
model or new Product
struct.$isPurchasing
Binding.What’s inside? In Swift Demo App you will learn how to:
Apphud.didUpdateNotification()
.UIStackView
.SKProduct
model or new Product
struct.Like Apphud SDK? Feel free to put a star on Github 🙂
We have worked hard on a new major iOS SDK update and happy to announce that it is now available.
What's new in iOS SDK 3.0.0:
We added ability to purchase products using async/await
syntax and modern Product
struct as well as some other helpful methods. SDK gently operates with both StoreKit and StoreKit2 frameworks simultaneously.
func paywalls() async -> [ApphudPaywall]
method which returns paywalls with their App Store Product
/ SKProduct
models.paywall(_ identifier: String) async -> ApphudPaywall?
method which returns specific paywall by identifier.func fetchSKProducts() async -> [SKProduct]
method which returns SKProducts
for identifiers added in Apphud Product Hub.func purchase(_ product: ApphudProduct, isPurchasing: Binding<Bool>? = nil) async -> ApphudPurchaseResult
method which returns classic ApphudPurchaseResult
.func restorePurchases() async -> Error?
method.fetchProducts() async throws -> [Product]
method which returns Product
structs for identifiers added in Apphud Product Hub. Throwable.func purchase(_ product: Product, isPurchasing: Binding<Bool>? = nil) async -> ApphudAsyncPurchaseResult
method which returns new ApphudAsyncPurchaseResult
struct.func apphudProductFor(_ product: Product) -> ApphudProduct?
method which returns corresponding ApphudProduct
that matches Product
struct.func product() async throws -> Product?
method to ApphudProduct
object. Now you can retrieve both SKProduct
and Product
models from within ApphudProduct
object.$isPurchasing
Binding to a boolean value that determines whether the payment is currently in process.var success: Bool
to ApphudPurchaseResult
.func didUpdateNotification() -> Notification.Name
notification method which is posted whenever any purchase or subscription changes. Useful in Swift and SwiftUI.appleSearchAds
enum value made unavailable due to iAd framework is no longer supported by Apple. Use appleAdsAttribution
instead.getPaywalls(callback: @escaping ([ApphudPaywall]?, Error?) -> Void)
method in favor of paywallsDidLoadCallback(_ callback: @escaping ([ApphudPaywall]) -> Void)
and paywalls() async -> [ApphudPaywall]
methods.productsDidFetchCallback
to fetchProducts
and improved inner logic.refreshStoreKitProducts
method in favor of improved fetchProducts
method.migratePurchasesIfNeeded {}
method for iOS 15+ devices.start(apiKey: String, ..., callback: (() -> Void)? = nil)
method. Useful for retrieving A/B experiment data as soon as possible.startManually(apiKey: String, ..., callback: (() -> Void)? = nil)
method. Useful for retrieving A/B experiment data as soon as possible.func optOutOfTracking()
method which opts out a user from tracking of some parameters, like IP address, IDFA, IDFV, Device Type.isProtectedDataAvailable
is false. Useful for app prewarming in iOS 15+ when screen is locked.You can now set custom purchase value for successful free trial purchases. This value will be used for trial_started
event for integrations, like Appsflyer or Facebook.
purchase(_ product: ApphudProduct, value: Double, callback: ((ApphudPurchaseResult) -> Void)?)
method.setCustomValueForTrial(_ value: Double, productId: String)
method analog for Observer Mode.What’s inside? In SwiftUI Demo App you will learn how to:
Binding<Bool>
variableApphud.didUpdateNotification()
.VStack
.SKProduct
model or new Product
struct.$isPurchasing
Binding.What’s inside? In Swift Demo App you will learn how to:
Apphud.didUpdateNotification()
.UIStackView
.SKProduct
model or new Product
struct.Like Apphud SDK? Feel free to put a star on Github 🙂
Bug fix for Flutter SDK
What’s new in 2.8.6:
func userDidLoad(rawPaywalls: [ApphudPaywall])
in ApphudDelegate
. This method called when user is registered in Apphudfunc paywallsDidFullyLoad(paywalls: [ApphudPaywall])
in ApphudDelegate
. This method called when paywalls are fully loaded with their SKProducts
.What’s new in 2.8.5:
hasActiveSubscription()
, hasPremiumAccess()
improvements and bug fixespurchasePromo()
loggingcheckTransactions
logic for force receipt sending if a new transaction was found.What's new in 2.8.2:
What's new in 2.8.1:
willPurchaseProductFromPaywall(_ identifier: String)
which allows you to specify paywall id in observer mode. This will allow you to use our A/B experiments in Observer Mode.facebook
integration from SDK because it is now redundant.