We had Auto-renewable subscription and Non-renewing subscription in our app previously and now we want to add a consumable IAP where user can purchase it to activate a feature once. I created the consumable product, added all details and submitted it for review. I got the following response
3.1.1 - new IAP type
New type: Consumable
Previous type: Auto-renewable subscription, Non-renewing subscription
Recommend: Download
The status of IAP is in Developer Action Needed. I am not sure what I am supposed to do, it says to Download , but download what?
Does anyone have any idea on what this is about?
In-App Purchase
RSS for tagOffer extra content, digital goods, and features directly within your app using in-app purchases.
Posts under In-App Purchase tag
200 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
I am a new app developer. I successfully tested my first in app purchase to remove ads. I then tried to include a consumable, but every time the app reads the available list, I get an error for that one. I can't seem to find a solution somewhere and wonder if this is a problem that might happen with testing an unpublished app. Here is the relevant snippet of code as well as a screenshot of my In App Purchase section of the App Store Connect.
Task { do { let storeProducts = try await Product.products(for: ["removeAds1", "cactusCoin5"]) DispatchQueue.main.async { self.products = storeProducts self.printProducts() } } catch { print("Failed to fetch products: \(error.localizedDescription)") } }
Thank you for any assistance.
Hello!
I want to implement a system in my app in which I will require the user to input a promotional code. If the user inputs a code, the app will have full functionalities, in the other case, the app will be a "lite" version. I don't want to sell anything; the content of the app depends only on whether the user has inputted the promo code. Is this behavior permitted by App Store? In the case it does, do I need to use the store "In app purchase" flow or may I handle all this logic by myself?
Thanks!
Hello.
platform: Please let me know which platform 'Non-Apple platform' is referring to. For example, Google or Amazon? And is it correct to mean the platform that consumed the products received due to in-app purchases?
playTime: Does 'playTime' mean the time when the customer purchased the app and actually accessed the app? Or do you mean the time you accessed after the in-app purchase?
Hello
I called the 'Get Transaction Info' API with Auto-Renewable Subscription product type transactionId.
I received a success response and called the 'Get Transaction History' API with the value 'originalTransactionId'.
The response 'transaction' of the 'Get Transaction History' API that matches the 'webOrderLineItemId' value received through the 'Get Transaction Info' API was found, but the 'transactionId' value was different.
Why is this happening?
Which of the two transactions is normal?
https://developer.apple.com/documentation/appstoreserverapi/get_transaction_info
https://developer.apple.com/documentation/appstoreserverapi/get_transaction_history
Hi,
I have a question about Section 3.1.1 of the App Store Review Guidelines regarding In-App Purchases.
Is it mandatory to include In-App Purchases in my app?
My app is an extension of my website, which has been online for four years and serves a large student base. We offer courses that students purchase through the website. Once purchased, they can access lessons, watch videos, download files, answer quizzes (optional), participate in group chats, and review courses.
In the app, users can view all courses and categories, access some free lessons to decide if they want to buy the course, and search for courses—similar to platforms like Udemy.
I do not wish to use In-App Purchases or any external payment systems within my app. Instead, I prefer that users purchase courses on the website and then access them via the app. I will not include external links, calls to action, or any mentions that direct users to purchase from the website. Essentially, I plan to inform users that purchases are not supported in the app, and they will understand this implicitly.
Is this approach acceptable?
accountTenure: Is this the app's customer account registration period?
lifetimeDollarsPurchased: Do I have to include the amount refunded from the in-app purchase amount since I bought it?
playTime: What is the standard for the time you used the app?
refundPreference: I don't know the meaning of the '3' value.
I have simple non-consumable IAPs set up for an app on macOS.
Testing in development with a local .storekit configuration file, everything works as expected.
Testing in development with a remote Sandbox, everything also seems to work fine. Product names and prices fetch correctly, I am able to make purchases with a Sandbox account (both US and UK).
Once I upload a build into TestFlight, IAPs no longer work. The tester would download the Beta app from TestFlight. They open a license manager and can see all the product names, descriptions and prices are pulled from Apple servers correctly (with the correct local currency as well!). So far so good. When trying to purchase any of the IAP, the following error appears:
This is TestFlight so testers are using their real Apple ID. My understanding is that they should continue using their production credentials and a TestFlight Sandbox would be configured behind the scenes automatically.
This error always says the users cannot purchase from a US store and must switch to [whatever user’s actual store location is] store. For example, my account is based in the UK, has got a UK billing address and a UK payment method, and the error tells me to switch to the UK store. People in Canada get a similar error - you must switch from the US store to Canadian. The error makes no sense, the account is already in the desired country.
Clicking on the “Change Store” button opens the App Store app and displays another error: “Cannot Connect to App Store”. Clicking Retry just results in this errors showing again and again.
Clicking OK takes us back to the failed IAP purchase and the final error message appears: “Purchase Error - Unable to Complete Request”.
Things I’ve done / checked:
IAPs are configured in App Store Connect and available for all regions
prices are set for all regions in App Store Connect
IAP name and description localisation in English (UK)
IAP status is Ready to Submit, I don’t think I can go past that unless I make a production release (which I can’t until we fix the problem)
IAP capabilities added in xcode
the problem is not account, machine, or location dependent - every beta tester testing my app on TestFlight has the same issue, they each use a different account and have accounts in different countries
double checked the App Store account location in the App Store settings - it is definitely matching the store this error is asking to switch to
application exits at startup with error 173 if app receipt cannot be found - this one was suggested by the review team, I could not really find any documentation for it
review team also suggested I should add com.apple.security.network.client to enable IAP connectivity. I did add that to one of the builds and it did not help. I am not really convinced this is necessary
Any suggestions on what to check and what to try? I have run out of ideas.
Hi,
Suddenly product's are not being loaded on WatchOS anymore, no error throwing.
Just empty array response...
Works normal on iOS. Any idea why?
WatchOS 10.5
Good morning,
I am in the process of setting up a new release of my application, in fact I recently submitted a release using stripe as a means of payment for subscriptions which was refused by telling me that it must go through Apple IAP.
Currently everything has been migrated to IAP, my subscriptions are offered by period (1 month, 6 months, etc.), and with discount vouchers that I manage until now with my server (managarial/marketing choice).
The approach used to manage this is to offer two subscriptions on Apple Connect for each period: for example 1 month => there is one subscription with $3 and one with $2.
With respect to my server verifications (has the user validated their discount voucher or not), I display the appropriate subscription to them.
Could you please tell me that this approach will not impact me on my next review? while knowing that currently all subscriptions now go through IAP Apple and my work on the server side only manages the display of the appropriate products and whether or not the user has validated their reduction voucher.
Tank you.
I’ve developed my app and included in-app purchase features. I’ve written the code and added the buttons, but when clicked, I get a “package not found” error. From what I understand, Apple needs to approve the in-app purchases and review my app during the initial release.
Following Apple’s documentation, I created new subscription systems, added screenshots and necessary texts, and marked the in-app purchases when submitting my app for review. However, my app keeps getting rejected multiple times. They encounter a “package not found” error when trying to make a purchase.
In the review feedback for subscriptions and in-app purchases, they also mention that they cannot approve the in-app purchase products because the associated app has been rejected.
I’ve contacted Apple Support, and they explained that in-app purchases and the app are reviewed separately. However, I can’t publish my app without including in-app purchases, and I can’t get the in-app purchases approved without my app being accepted.
What should I do in this situation? I even tried removing the in-app purchase features completely and submitting the app without them, but then I received a review result saying, “we couldn’t find the in-app purchase section.”
I’ve been struggling with this for days. Any help would be greatly appreciated.
Thank you.
In my application, I have to create and remove many auto-renewal subscription items programmatically using an API. Like the YouTube app, when a user creates a channel, I will create a subscription item with their name, and when they shut down the channel, I will cancel the whole subscription and remove the item.
I found that I can create subscription items using the following API: https://developer.apple.com/documentation/appstoreconnectapi/create_an_auto-renewable_subscription
In the following document, I found that I can stop selling and cancel subscriptions at https://appstoreconnect.apple.com by changing the availability of item from "Cleared for Sale" to "Remove from Sale":
https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-availability-for-an-auto-renewable-subscription
My question is can I stop selling and cancel subscriptions using an API? The App Store Connect API offers modifying subscription availability, but it only offers changing sales countries: https://developer.apple.com/documentation/appstoreconnectapi/modify_an_auto-renewable_subscription
They also offer a subscription deletion API, but I'm not sure if it'll work as I need: https://developer.apple.com/documentation/appstoreconnectapi/delete_a_subscription
How do you manage auto-renewal subscription items when you stop selling them? Is there any API or do you do it manually?
Thank you.
Hello guys! I would appreciate your help. I am developing an app (next to my webapp). In this app users can register as either owners of moving company or as the customers. Moving company owners can list their company like a directory/business listing. The app is free to use for customers and also for company owners except if you want to list your moving company to be able to get clients and sell your physical service.
Now i have a subscription plan in mind so the moving company can list itself, which will also be listen on my webapp as the databank is shared. According to someone this doesnt require IAP, because at the end the company is paying for the listing, to help him sell his physical service.
next to it, i also want to get provision for each time the moving company gets a client through our app and pays through our app.
thirdly, i was planning to offer sponsored Listing, which will aswell work for my webapp. Meaning if someone pays for sponsored listing on my app he gets sponsored on my webapp aswell and vice versa.
And lastly, the subscription plan has an upgrade package where moving companies can get leads aswell. Like the first thing someone told me that it shouldnt require IAP as the end service us physical and thats where i am helping out.
Now i wanted to be safe than sorry and wanted to know what you guys say. Is is allowed without IAP? Where do i need IAP and where can i for example use Stripe? Are there any ways to go around IAP? I have already read the guidelines but it seems my app functions fall between them (probably) as the sponsored Listings are also on webapp if bought in mobile app aswell as the physical services that are promoted and sold through our subscription, where we dont really offer a digital service.
I would really appreciate your help very much, and i thank you for reading all this.
I added my first subscription to my app using StoreKit's SubscriptionStoreView. Everything worked as expected in the debug environment and also in TestFlight. So I submitted my app and subscriptions to App Store Connect, got everything Approved and released.
After updating my app through App Store and checking the Subscription View, it just says "Subscription Unavailable. The subscription is unavailable in the current storefront."
I waited around 3 days and still getting the same message. Now the very strange behavior starts. I went to App Store Connect, I made and edit to the subscription description, saved, removed the edit, saved, and submitted to review. 15 minutes later the subscriptions appear in my app and everything works as expected. After getting the edit approved, the Subscription View in my app again only showed the message "Subscription Unavailable. The subscription is unavailable in the current storefront." No user is able to see the subscriptions anymore, even though it worked as expected before the edit was approved.
So I did the same as before. Again, make an edit to the subscription description, save, remove the edit, save, submit to review. 15 minutes later the subscriptions are again available in my app and it works as expected.
This is definitely not the expected behavior and submitting the subscription edits every day is wasting the App Review Team's time as well as mine. I contacted Apple Developer Support but I didn't get any reply back (at least yet).
I am not the only one experiencing this. I found a friend online who has the exact same issue, and is able to temporarily solve it by making an edit to the subscription description as well.
So far it has been a huge headache, and we are losing customers this way. Please if anyone has experience with this problem, or has any suggestions, they will be greatly appreciated.
Thank you so much,
Tomas
I'm experiencing an issue where in-app purchases work correctly in both profile and debug modes. However, when I upload the app to TestFlight, the in-app purchases are not functioning as expected. How can I resolve this issue?
I'm experiencing an issue where in-app purchases work correctly in both profile and debug modes. However, when I upload the app to TestFlight, the in-app purchases are not functioning as expected. How can I resolve this issue?
I've already done my test on development signed app locally, all in-app purchase runs well with sandbox tester Apple ID.
Errors happens when make a purchase in distribution app from TestFlight.
Detail Info:
in Apple Store connect , make app available to China
Electron project, packaging by electron builder using distribution sign
upload to TestFlight, invite myself to test
using my Apple ID(not the sandbox tester) to login and purchase
dialog appears and said "Account not in this store"
VPN is off
Apple Store shows Chinese language and Chinese apps, not llikely to be u.s. store
I'm suspecting that:
Maybe shouldn't use my developer Apple ID to run TestFlight test?
TestFlight locked app to be in u.s. store ?
I cannot find the in app purchase key in the integrations tab, I have signed the paid apps agreement. I can see the connect store api but not the In app purchase api key.
StoreKit2 is being tested in a Sandbox environment for the purchase of consumable items.
The code being implemented is below.
let result = try? await product.purchase()
switch result {
case let .success(verification):
switch verification {
case let .verified(transaction):
let jws = verification.jwsRepresentation
let success = await purchaseItem(of: itemId, with: jws)
if success {
await transaction.finish()
return (success: true, error: nil)
} else {
return (success: false, error: .serverError)
}
case .unverified:
return (success: false, error: .unverified)
}
Assume that the verification was successful, but a server error occurred. in let success = await purchaseItem(of: itemId, with: jws), success = false
When tested in Sandbox and local environment, the first alert of purchase completion is displayed. After that, a purchase failure alert is displayed. (The purchase failure alert is displayed by the result of return (success: false, error: .serverError))
Is it proper behavior to display purchase completion once?
Is it appropriate behavior for the purchase completion to be displayed once in the production environment?
Is the billing actually occurring at this time?
Thank you in advance for your answers!
Hi there, I'm implementing in app purchase in Electron following docs here: https://www.electronjs.org/zh/docs/latest/tutorial/in-app-purchases
But :
getProducts returns []
calls to purchaseProduct, nothing happend(no dialog, no login)
calls to restoreCompletedTransactions , a login dialog appears, and I can login my sandbox tester account. The account even appears int the Apple Store.
More info list as follow.
Packaging using electron builder, configuration is :
"masDev": {
"type":"development",
"identity": "York Chan",
"hardenedRuntime": false,
"gatekeeperAssess": false,
"entitlements": "./build/entitlements.mas.plist",
"entitlementsInherit": "./build/entitlements.mas.inherit.plist",
"provisioningProfile": './build/provisionloginsight.provisionprofile', //development的描述文件,确保系统描述文件里已经安装好
},
"mas": {
"type": "distribution",
"identity": "York Chan",
"hardenedRuntime": false,
"entitlements": "./build/entitlements.mas.plist",
"entitlementsInherit": "./build/entitlements.mas.inherit.plist",
"entitlementsLoginHelper": "./build/entitlements.mas.loginhelper.plist", //如果需要testflight则该项必须
"provisioningProfile": './build/provisionloginsightappstore.provisionprofile', //distribution描述文件
},
"mac": {
"artifactName": "${productName}_${version}.${ext}",
"identity":null,
"type": "development", //mas - distribution; mas-dev - development,
"icon": "./icons/icon512.icns",
"target": [
{
"target": "mas-dev",//mas
"arch": [
"universal"
],
}
],
"extendInfo":{
}
},
I wrap StoreKit API into 'Platform' class, and call from render process to main process using ipcRender.invoke
If I create a Xcode project, and set bundler identifier to the same one, configure the storekit in schema, I can successfully 'purchase', and seeing [Enviroment: Xcode].
Someone can help me please ?