Introduction #
Setting up in-app purchases for iOS enables you to monetize courses and memberships directly in your Learndash App.
This guide walks you through configuring agreements, creating non-consumable and subscription products, localizing product information, setting up server notifications, and syncing your products with the Learndash App.
Complete Agreements, Tax, and Banking Setup #
- Log in to App Store Connect.
- Click Business, then select your Legal Entity Name.
- Under the Agreements tab:
- Agree to all terms.
- Click Set Up Tax, Banking, and Contacts under Paid Apps.
- Agree to all terms.
- Click Add Bank Account to receive app sales revenue.
- Click Complete Tax Forms and fill out the required business information.
- Under Contacts, add your contacts for all required roles.
Apple Commission Overview:
- 15% for annual sales up to $1M
- 30% for sales beyond $1M
- Subscriptions: Drop to 15% after the first renewal year
Create a New In-App Purchase Product #
If this is your first product, it must be submitted with a new app version. Future products can be submitted individually.
- In App Store Connect, go to Apps > [Your App].
- In the sidebar, click:
- In-App Purchases (for Non-Consumable items)
- Subscriptions (for Auto-Renewable or Non-Renewing Subscriptions)
- In-App Purchases (for Non-Consumable items)
Choose a Product Type #
- Non-Consumable: One-time purchase (e.g., lifetime course access)
- Auto-Renewable Subscription: Ongoing access billed monthly or yearly (e.g., membership plans)
- Non-Renewing Subscription: Time-limited access that doesn’t renew automatically
Add Your Product #
- Click the + icon or Create.
- Enter a Reference Name (internal only).
- Enter a Product ID (e.g., com.domain.course_name).
- For subscriptions:
- Choose a Subscription Duration.
- Select a Subscription Group or create one if needed.
- Choose a Subscription Duration.
Add Pricing and Localization #
- Under Subscription Prices, click +, choose your main currency, and select a price.
- Under Localizations, click +:
- Select your app’s main language
- Enter a Display Name and Description
- Click Save
- Select your app’s main language
- Optionally add more languages.
Complete Review Information #
- Upload a screenshot (640 × 920 px):
- For a course: show the course screen in the app
- For a membership: show exclusive content
- For a course: show the course screen in the app
- Add Review Notes describing:
- What the product is
- What it unlocks in the app
- How to access it (e.g., “Log in > More > Products”)
- What the product is
- Click Save. The product status should now be Ready to Submit.
Only products marked Ready to Submit can be selected in Learndash App settings.
Add Subscription Group Localization (if applicable) #
- In App Store Connect, go to Subscriptions > [Your Group].
- Click + next to App Store Localizations.
- Complete the required fields and click Add.
Configure App Store Server Notifications #
App Store notifications inform your server of subscription events (renewals, cancellations, refunds, etc.).
- In App Store Connect, go to My Apps > [Your App] > App Information.
- Scroll to URL for App Store Server Notifications.
- Use the following format:
- Production URL: https://yourdomain.com?ios_s2s_notification=1
- Sandbox URL: https://yourdomain.com?ios_s2s_notification=2
- Production URL: https://yourdomain.com?ios_s2s_notification=1
- Select Version 2 for the notifications version.
- Click Save.
Troubleshooting and FAQs #
Q: My new product isn’t listed in the Learndash App plugin.
A: Make sure the product is in Ready to Submit status, then click Sync with Apple and relaunch the app.
Q: I can’t assign a subscription group.
A: Create the group in App Store Connect first, then replicate its name under Learndash App > In-App Purchases > Subscription Groups.
Q: Apple rejected my product.
A: Double-check that all localizations are complete, the review screenshot is 640 × 920 px, and your review notes clearly explain the product and access path.
Q: Price changes aren’t reflected in the app.
A: Sync the product again from the plugin and force-close the app to reload metadata.