Apphud SDK is a lightweight open-source Swift library to manage auto-renewable subscriptions and other in-app purchases in your iOS app.

Overview

Apphud

Apphud SDK

Apphud SDK is a lightweight open-source Swift library to manage auto-renewable subscriptions and other in-app purchases in your iOS app. No backend required.

Visit our website for details: https://apphud.com

Features

👍 Integrating subscriptions using our SDK is very easy.
Apphud takes care of a subscription purchase process. Integrate SDK in just a few lines of code.

🧾 App Store receipts validation.
Apphud validates and periodically refreshes App Store receipts to give you real-time data.

🕗 View subscription details and transactions history.
Get expiration date, autorenew status in our SDK.

🕗 View non-renewing purchase details and transactions history.

🔍 Determine for trial, introductory and promotional offer eligibility using our SDK.

🔔 Receive a real-time notification when a user gets billed.
We will send you a message to Slack and Telegram immediately when a user gets billed or started trial.

📊 View key subscription metrics in our dashboard and charts.
Apphud has a convenient dashboard with key metrics of your subscriptions.

🔌 Integrations. Are available on all plans. Send subscription renewal events to other mobile analytics.
Apphud reduces pain in sending all subscription events to external mobile analytics: Amplitude, Mixpanel, AppsFlyer, etc.

🎨 Create subscription purchase screens without coding in our visual web editor.
You don't need to develop purchase screens. Just pick a template and modify it. So easy!

Promotional subscription offers support.
Use Apphud to easily give a discount for existing and lapsed customers. No backend required.

💱 User local currency real-time conversion.

🏆 Increase app revenue using our Rules.
Apphud will automatically offer a promotional discount based subscription events.

🕵️ Subscription cancellation insights tool.
Understand why you customers cancel a subscription to make right product decisions.

💸 Handle billing grace period and billing issues.
Apphud will automatically ask a user to update his billing details in case of billing issue during renewal.

👏 Great documentation.

🏃‍♂️ Fast support. We are online.

SDK Requirements

Apphud SDK requires minimum iOS 11.2, Xcode 10 and Swift 5.0.

Installation

Please feel free to read our SDK Integration Guide.

Having troubles?

If you have any questions or troubles with SDK integration feel free to contact us. We are online.

https://apphud.com/contacts

Like Apphud? Place a star at the top 😊

Comments
  • iOS 14 Beta Failed to load SKProducts from the App Store

    iOS 14 Beta Failed to load SKProducts from the App Store

    [12:15:06 PM] [Apphud] Failed to load SKProducts from the App Store, error: Error Domain=SKErrorDomain Code=0 "UNKNOWN_ERROR" UserInfo={NSLocalizedDescription=UNKNOWN_ERROR, NSUnderlyingError=0x6000008b4870 {Error Domain=ASDErrorDomain Code=507 "Error decoding object" UserInfo={NSLocalizedDescription=Error decoding object, NSLocalizedFailureReason=Attempted to decode store response}}}

    opened by uniqby 7
  • A lot of errors after update to 2.5.0

    A lot of errors after update to 2.5.0

    The application is not buildable after updating to version 2.5.0 via SPM. There are no such problems with version 2.4.4. Xcode Version 13.2.1 (13C100)

    Screen Shot 2022-01-04 at 16 25 23
    opened by uniqby 4
  • Deferred purchase

    Deferred purchase

    Hey! I am trying to test deferred purchases. When I click the Buy button, I see the "Ask Permission" alert, when I click "Cancel" or "Ask", nothing happens, the ApphudDelegate does not fire and my activityIndicator is visible always. I have to process these purchases in func paymentQueue (_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {}

    How do I know if a deferred purchase has been used through the ApphudDelegate? Снимок экрана 2022-01-11 в 19 38 34

    opened by fury21 2
  • Corner case when user is not registered and products not loaded automatically

    Corner case when user is not registered and products not loaded automatically

    1. first launch after install without wifi
    2. wait 5 minutes
    3. enable wifi
    4. try to subscribe

    because of the max number of attempts Apphud will give up on trying to register user and fetch products.

    I use refreshStoreKitProducts to force it but with SwiftUI it's a bit awkward.

    I think there shouldn't be a limit, also 30+ seconds retry is too much to wait for the user if he goes online. I understand that you try to reduce load on your servers but there is no load if there's no connection. Maybe you should check the error generated by the request.

    opened by ulitiy 2
  • Disable IDFA collection

    Disable IDFA collection

    I call Apphud.disableIDFACollection() before Apphud.start(apiKey: ""), but when I submit app to app store connect, app store connect still says that my app contains IDFA, is there any way to solve this ?

    opened by Panl 2
  • ApphudDelegate Bug?

    ApphudDelegate Bug?

    newest 2.8.8 code

    internal func submitReceipt(product: SKProduct?, apphudProduct: ApphudProduct?, transaction: SKPaymentTransaction?, receiptString: String?, notifyDelegate: Bool, eligibilityCheck: Bool = false, callback: ApphudErrorCallback?) {
            self.submitReceipt(product: product,
                               apphudProduct: apphudProduct,
                               transactionIdentifier: transaction?.transactionIdentifier,
                               transactionProductIdentifier: transaction?.payment.productIdentifier,
                               transactionState: transaction?.transactionState,
                               receiptString: receiptString,
                               notifyDelegate: eligibilityCheck,
                               callback: callback)
    }
    

    error

    notifyDelegate: eligibilityCheck,
    

    should be?

    notifyDelegate: notifyDelegate,
    eligibilityCheck: eligibilityCheck 
    
    opened by ztdr 1
  • iPhone SE (14.4) simulator, AppHud 2.5.7 not loading SKProducts

    iPhone SE (14.4) simulator, AppHud 2.5.7 not loading SKProducts

    Hi! I try to get SKProducts from ApphudProduct, but got nil in iPhone SE 14.4, before all worked fine.

    My steps: Apphud.paywallsDidLoadCallback { paywalls in // retrieve default paywall let paywall = paywalls.first(where: { $0.isDefault }) var products: [ApphudProduct] = []

            // retrieve the products [ApphudProduct] from current paywall
            if let paywall = paywall {
                products = paywall.products
                
                for product in paywall.products {
                    print("test:", product.productId, product.skProduct) 
                }
            }
        }
    

    what i get: "test: com.kushman.nevergame.annual nil", but in other simulators, like iPhone 13 pro max 15.2 i got: "com.kushman.nevergame.annual Optional(<SKProduct: 0x600002905270>)"

    Can u help me?

    opened by fury21 1
  • Delegate method apphudNonRenewingPurchasesUpdated don't work correct with refunded purchase

    Delegate method apphudNonRenewingPurchasesUpdated don't work correct with refunded purchase

    Hi! When i refnding purchase in storeKit manager i expect that delegate will called, but nothing to happening. In explanation of this method written: "Called when any of non renewing purchases changes. Called when purchase is made or has been refunded."

    May be i don't understand somthink?

    opened by fury21 1
  • How to use example?

    How to use example?

    I open example project, select StoreKitApphudSDKDemo, build project and in console see err: [Apphud] Failed to load SKProducts from the App Store, because product identifiers are invalid: ["com.apphud.gold", "com.apphud.monthly_promo"]

    and what i see in simulator https://ibb.co/17ZJfPQ

    How can i fix it?

    opened by fury21 1
  • Delegate method for API call errors.

    Delegate method for API call errors.

    Please add delegate methods for errors in API calls because it's completely not transparent when and why these issues happen. I.e. when paywalls/products cannot be loaded.

    opened by ulitiy 1
  • Apphud.isNonRenewingPurchaseActive(productIdentifier:

    Apphud.isNonRenewingPurchaseActive(productIdentifier: "productID") cache issue

    if I purchase a non-renewable subscription in testflight environment and then install the AppStore version without uninstalling the testflight version let active = Apphud.isNonRenewingPurchaseActive(productIdentifier: "productID") always return true

    opened by Panl 1
Releases(2.8.8)
  • 2.8.8(Aug 24, 2022)

  • 2.8.6(Aug 18, 2022)

    What’s new in 2.8.6:

    • Added func userDidLoad(rawPaywalls: [ApphudPaywall]) in ApphudDelegate. This method called when user is registered in Apphud
    • Added func paywallsDidFullyLoad(paywalls: [ApphudPaywall]) in ApphudDelegate. This method called when paywalls are fully loaded with their SKProducts.
    Source code(tar.gz)
    Source code(zip)
  • 2.8.5(Aug 8, 2022)

    What’s new in 2.8.5:

    • hasActiveSubscription(), hasPremiumAccess() improvements and bug fixes
    • Methods descriptions improvements
    • Added purchasePromo() logging
    • Added checkTransactions logic for force receipt sending if a new transaction was found.
    Source code(tar.gz)
    Source code(zip)
  • 2.8.2(Jun 10, 2022)

  • 2.8.1(Apr 29, 2022)

    What's new in 2.8.1:

    • Added new method 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.
    • Deprecated facebook integration from SDK because it is now redundant.
    • Significant improvements and lots of refactoring related to request handling, logging and purchase tracking.
    Source code(tar.gz)
    Source code(zip)
  • 2.7.0(Apr 6, 2022)

    What’s new in 2.7.0:

    • WatchOS/tvOS support
    • Added new willPurchaseProductFromPaywall method, which allows to use A/B experiments in Observer Mode
    • Internal cache improvements and bug fixes
    • Now you can delete or update promotionals using the same SDK method grantPromotional or via web interface. Pass 0 daysCount to delete active promotional.
    Source code(tar.gz)
    Source code(zip)
  • 2.6.1(Mar 14, 2022)

    What’s new in 2.6.1:

    • Fixed a bug when unstable internet connection could affect to products groups request
    • Fixed a bug when update user method could send nil id
    Source code(tar.gz)
    Source code(zip)
  • 2.6.0(Mar 11, 2022)

    What’s new in 2.6.0:

    • Update paywalls and products groups cache
    • Add new func hasPremiumAccess - returns true if user has active subscription or non renewing purchase (lifetime)
    • Update methods descriptions
    Source code(tar.gz)
    Source code(zip)
  • 2.5.7(Feb 22, 2022)

    What’s new in 2.5.7:

    • Fixed 403 server error bug, when user could be blocked from sever 403 error code
    • Change func paywallShown(_ paywall: ApphudPaywall) and func paywallClosed(_ paywall: ApphudPaywall) to non optional paywall parameter
    • Add push token cache
    • Update general cache time
    • Update some Logs
    Source code(tar.gz)
    Source code(zip)
  • 2.5.6(Feb 10, 2022)

  • 2.5.5(Jan 28, 2022)

    What's new in 2.5.5:

    • Added new delegate method apphudDidObservePurchase, which can be useful to intercept purchases made using Promo Codes for in-app purchases. If user redeems promo code for in-app purchase in the App Store, then opens the app, this delegate method will be called, so you will be able to handle successful payment on your side.
    • Updated documentation for Apphud.swift file.
    Source code(tar.gz)
    Source code(zip)
  • 2.5.4(Jan 23, 2022)

  • 2.5.3(Jan 12, 2022)

  • 2.5.2(Jan 7, 2022)

    What's new in Apphud iOS SDK 2.5.2:

    • Fixed a crash which occurred while saving AppsFlyer attribution data cache
    • Fixed build errors for SPM

    What's new in Apphud iOS SDK 2.5.0:

    • MacOS Support. Finally you can add Apphud SDK to your Mac app and track your purchases easily! What is supported in MacOS: * Subscriptions tracking * A/B experiments * Charts and Dashboard * Integrations and S2S webhooks
    • Significantly improved SDK performance and caching. Now SDK will send much less requests to Apphud server.
    • Prepared SDK for upcoming Rules update.
    • productsDidFetchCallback and refreshStoreKitProducts callbacks now return optional Error.
    • Other important internal improvements.
    Source code(tar.gz)
    Source code(zip)
  • 2.4.4(Oct 22, 2021)

  • 2.4.3(Oct 18, 2021)

  • 2.4.2(Oct 16, 2021)

    What's new in 2.4.2:

    • Fixed important bug when User Properties sometimes may not be saved when submitted simultaneously with initialisation.
    Source code(tar.gz)
    Source code(zip)
  • 2.4.1(Oct 13, 2021)

    What’s new in 2.4.1:

    • Fix grantPromotional() callback bug
    • Change ApphudPaywall experiments functional properties: experimentId -> experimentName, variationId -> variationName
    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Oct 1, 2021)

  • 2.3.0(Aug 2, 2021)

    What’s new in 2.3.0:

    • Added Experiments. Run Experiments(A/B tests) to test different in-app purchases prices in order to find the best.
    • Improve Apple search Ads logic. Submit Apple Attribution Token to Apphud with Apphud.addAttribution().
    • Improve paywalls methods. Paywalls are already exist after SDK initialization. Use var paywalls: [ApphudPaywall] method.
    • Method getPaywalls() is deprecated in favor of func paywallsDidLoadCallback. This callback is called when paywalls are fully loaded with their StoreKit products.

    MIGRATION GUIDE from previous versions to 2.3.0:

    • Method getPaywalls() is deprecated in favor of func paywallsDidLoadCallback
    • Use var paywalls: [ApphudPaywall], to get your cashed paywalls. Apphud.paywalls
    Source code(tar.gz)
    Source code(zip)
  • 2.2.1(Jul 13, 2021)

    What’s new in 2.2.1:

    • added Promotionals. You can grant free promotional subscription to user with new method grantPromotional()

    MIGRATION GUIDE from previous versions to 2.0.0 - 2.2.1:

    • Rename Apphud.products() to Apphud.products.
    • If you still want to make purchases using SKProduct model but not new ApphudProduct class, then use Apphud.purchase(product.productIdentifier) method.
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Jul 9, 2021)

    What’s new in 2.2.0:

    • add setOnes option for Apple Attribution Token
    • add Firebase integration
    • improve paywalls events methods

    MIGRATION GUIDE from previous versions to 2.0.0 - 2.2.0:

    • Rename Apphud.products() to Apphud.products.
    • If you still want to make purchases using SKProduct model but not new ApphudProduct class, then use Apphud.purchase(product.productIdentifier) method.
    Source code(tar.gz)
    Source code(zip)
  • 2.1.2(Jun 17, 2021)

    What’s new in 2.1.2:

    • add appleSearchAds key for submit Apple Attribution Token to Apphud with Apphud.addAttribution()
    • update example app

    MIGRATION GUIDE from previous versions to 2.0.0 - 2.1.2:

    • Rename Apphud.products() to Apphud.products.
    • If you still want to make purchases using SKProduct model but not new ApphudProduct class, then use Apphud.purchase(product.productIdentifier) method.
    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Jun 8, 2021)

    What’s new in 2.1.1:

    • Fixed paywall_id usage.

    MIGRATION GUIDE from previous versions to 2.0.0 - 2.1.1:

    • Rename Apphud.products() to Apphud.products.
    • If you still want to make purchases using SKProduct model but not new ApphudProduct class, then use Apphud.purchase(product.productIdentifier) method.
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Jun 4, 2021)

    What’s new in 2.1.0:

    • Add user logs paywallShown, paywallClosed, use it for improve your paywalls analytics.
    • Improved error tracking.
    • Rename obj-c method purchase -> purchaseApphudProduct.

    MIGRATION GUIDE from previous versions to 2.0.0 - 2.0.1:

    • Rename Apphud.products() to Apphud.products.
    • If you still want to make purchases using SKProduct model but not new ApphudProduct class, then use Apphud.purchase(product.productIdentifier) method.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.1(May 17, 2021)

    What's new in 2.0.1:

    • Update methods for usage without sdk initialise.

    MIGRATION GUIDE from previous versions to 2.0.0 - 2.0.1:

    • Rename Apphud.products() to Apphud.products.
    • If you still want to make purchases using SKProduct model but not new ApphudProduct class, then use Apphud.purchase(product.productIdentifier) method.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(May 6, 2021)

    What's new in 2.0.0:

    • Added new method func getPaywalls, which fetches paywalls configured in Apphud Products Hub.
    • Method productsDidFetchCallback is deprecated in favor of func getPaywalls.
    • Method refreshStoreKitProducts is deprecated in favor of func getPaywalls.
    • Method product(productIdentifier) is deprecated in favor of func getPaywalls.
    • Method products: [SKProduct] is deprecated in favor of func getPaywalls.
    • Method purchase(product: SKProduct) has been removed in favor of purchase(product: ApphudProduct). You can still use Apphud.purchase(product.productIdentifier) method to make payments with SKProduct model.
    • Apphud.products() renamed to Apphud.products.
    • Internal improvements

    MIGRATION GUIDE from previous version to 2.0.0:

    • Rename Apphud.products() to Apphud.products.
    • If you still want to make purchases using SKProduct model but not new ApphudProduct class, then use Apphud.purchase(product.productIdentifier) method.
    Source code(tar.gz)
    Source code(zip)
  • 1.2.3(May 4, 2021)

  • 1.2.1(Apr 16, 2021)

    What's new in 1.2.1:

    • Fixed a bug where ApphudPurchaseResult.error was always nil when using Apphud.purchaseWithoutValidation method.
    • Improved retries logic when there is no Internet Connection.
    • Improved products fetch and refresh callbacks; implemented array of blocks instead of overwriting a block variable. Now you can use as many productsDidFetchCallback or refreshStoreKitProducts callbacks as you want. All of them will be fired.
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Mar 31, 2021)

Owner
Apphud
Build, Measure and Grow in-app subscription business
Apphud
SwiftyStoreKit is a lightweight In App Purchases framework for iOS, tvOS, watchOS, macOS, and Mac Catalyst ⛺

SwiftyStoreKit is a lightweight In App Purchases framework for iOS, tvOS, watchOS, macOS, and Mac Catalyst. Features Super easy-to-use block-based API

Andrea Bizzotto 6.1k Jan 7, 2023
Apple's Framework to support in-app purchases and interaction with the App Store

Apple's Framework to support in-app purchases and interaction with the App Store.

paigeshin 0 Dec 5, 2021
MerchantKit - A modern In-App Purchases management framework for iOS developers

MerchantKit dramatically simplifies the work indie developers have to do in order to add premium monetizable components to their applications. Track purchased products, offer auto-renewing subscriptions, restore transactions, and much more.

Benjamin Mayo 1.1k Dec 17, 2022
InAppPurchase - A Simple and Lightweight framework for In App Purchase

InAppPurchase A Simple, Lightweight and Safe framework for In App Purchase Feature Simple and Light ?? Support Promoting In-App Purchases ?? No need t

Jin Sasaki 269 Dec 15, 2022
An easy way to access reviews for your app instead of writing repetitive and redundant codes for every app.

AppStoreReviewManager An easy way to access reviews for your app instead of writing repetitive and redundant codes for every app. Requirements iOS 9.0

Jinya 4 Dec 23, 2022
Harpy - Notify users when a new version of your app is available and prompt them to upgrade.

After 6 years of Harpy and 4 years of Siren, I have decided to deprecate Harpy in favor of Siren. Why? Siren is written in Swift and has a feature set

Arthur Ariel Sabintsev 2.6k Dec 29, 2022
Siren - Notify users when a new version of your app is available and prompt them to upgrade.

Siren ?? Notify users when a new version of your app is available and prompt them to upgrade. Table of Contents Meta About Features Screenshots Ports

Arthur Ariel Sabintsev 4.1k Dec 27, 2022
Appirater - A utility that reminds your iPhone app's users to review the app.

Introduction Appirater is a class that you can drop into any iPhone app (iOS 4.0 or later) that will help remind your users to review your app on the

Arash Payan 4.7k Jan 7, 2023
AppVersion - Keep users on the up-to date version of your App.

?? App Version Don't let you users to get stuck on outdated version of your app. Automatic update tracking using Semantic Versioning Buil-in UI alerts

Ameba Labs 31 Sep 30, 2022
Appstore-Review-Guidelines - A curated list of guideline which has to be taken care before submitting your application to Appstore.

Appstore Review Guidelines The App Review Guidelines provide rules and examples across a range of topics, including user interface design, functionali

Aashish Tamsya 14 Dec 16, 2022
🍎 An App to check whether a non-App Store app is in App Store.

AppStorify ?? An App to check whether a non-App Store app is in App Store. Benfits Use App Store's upgrade mechanism instead of app's. App Store apps

seedgou 58 Dec 7, 2022
An App where you can find product and see its detail.

MeliProductos Project ???? > An App where you can find product and see its detail. ???? > Una App donde puedes encontrar tus productos y ver su detall

Joaquin Segovia 3 May 6, 2022
Ruby Gem for Rails - Easy iTunes In-App Purchase Receipt validation, including auto-renewable subscriptions

Monza is a ruby gem that makes In-App Purchase receipt and Auto-Renewable subscription validation easy. You should always validate receipts on the ser

Gabriel 159 Jan 7, 2023
iOS Blogging app with renewable subscriptions powered by RevenueCat; Written in Swift

Subscription Blogging App: Thoughts for iOS 1. Overview A modern blogging iOS app written in Swift with subscription paywalls powered by RevenueCat. T

Afraz Siddiqui 32 Dec 16, 2022
In-app purchases and subscriptions made easy. Support for iOS, iPadOS, watchOS, and Mac.

In-app purchases and subscriptions made easy. Support for iOS, iPadOS, watchOS, and Mac.

RevenueCat 1.6k Jan 6, 2023
Open source SDK to quickly integrate subscriptions, stop worring about code maintenance, and getting advanced real-time data. Javascript / iOS glue framework

Open source SDK to quickly integrate subscriptions, stop worring about code maintenance, and getting advanced real-time data. Javascript / iOS glue framework

glassfy 5 Nov 7, 2022
Mercato is a lightweight In-App Purchases (StoreKit 2) library for iOS, tvOS, watchOS, macOS, and Mac Catalyst.

Mercato Mercato is a lightweight In-App Purchases (StoreKit 2) library for iOS, tvOS, watchOS, macOS, and Mac Catalyst. Installation Swift Package Man

Pavel T 49 Jan 4, 2023
A lightweight iOS library for In-App Purchases

#RMStore A lightweight iOS library for In-App Purchases. RMStore adds blocks and notifications to StoreKit, plus receipt verification, content downloa

Robot Media 2.4k Dec 19, 2022
iOS SDK for growing mobile in-app purchases

Adapty iOS SDK — in-app purchases start here Adapty SDK is an open-source framework that makes implementing in-app subscriptions in iOS fast and easy.

Adapty 339 Dec 14, 2022
Lightweight In App Purchases Swift framework for iOS 8.0+, tvOS 9.0+ and macOS 10.10+ ⛺

SwiftyStoreKit is a lightweight In App Purchases framework for iOS, tvOS, watchOS, macOS, and Mac Catalyst. Features Super easy-to-use block-based API

Andrea Bizzotto 6.1k Jan 7, 2023