I am going to offer a Bundle of ten(10) apps having auto-renewing subscriptions.
My question is when user will purchase a subscription in ONE app. Will all other apps(non-purchased) also have RECEIPT available of the one purchased app's receipt? So,i can validate user have purchased one of apps from Bundle.
StoreKit
RSS for tagSupport in-app purchases and interactions with the App Store using StoreKit.
Posts under StoreKit tag
200 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
My app is a login item that gets registered as a background agent using SMAppService. On launch it checks to see that the user has an active subscription, and when I run it from Xcode, this works fine.
But it seems that if I restart my machine and it is run from launchd right at login, StoreKit doesn't return any purchases. This results in my app throwing up a window to tell the user to subscribe.
It’s hard to be sure this is the behavior, because I can't really use a debugger, and for whatever reason, OSLog is not persisting messages (despite being configured to do so).
Does anyone know if it takes a while after restart or login for Store Kit to reliably return purchases?
The docs for Transaction.updates say:
Use updates to receive new transactions while the app is running. This sequence receives transactions that occur outside of the app, such as Ask to Buy transactions, subscription offer code redemptions, and purchases that customers make in the App Store. It also emits transactions that customers complete in your app on another device.
Note that after a successful in-app purchase on the same device, StoreKit returns the transaction through Product.PurchaseResult.success(_:).
So Transaction.updates isn't supposed to include transactions for purchases that are made in this instance of the app, right? I have this code to get those transactions:
SubscriptionStoreView(groupID: group_id) {
}
.onInAppPurchaseCompletion() { product, result in
.....
}
But when I make a purchase using this SubscriptionStoreView, I see that both this .onInAppPurchaseCompletion code and my code observing Transaction.updates is called.
Is this expected? Will it work reliably without the .onInAppPurchaseCompletion ?
Thanks.
If I use SubscriptionStoreView.init(groupID), it seems to be able to look up all the Products that have that subscription group ID. But I don't see any public method for doing that myself. Am I missing something, or is SubscriptionStoreView using a private method to do this lookup?
I know that historically it has always been necessary to know the product IDs of all the products you want to sell; you have never been able to ask Store Kit to give you a list. SubscriptionStoreView doesn't seem to have this limitation, which is a bit surprising.
The store review alert is shown hidden behind UI, I'm 100% sure it shows up, and I can see it when the current view is empty/transparent.
I tried using various ways to find the current window, launching on different threads but nothing works. I have no idea what else to try the library doesn't really provide any documentation or anything. If it matters we are using the unity framework in the app, and it is a multi-window app.
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
serviceProvider.reviewService.requestReview(in: scene)
}
this is the invocation, the service then calls
func requestReview(in scene: UIWindowScene) {
SKStoreReviewController.requestReview(in: scene)
}
the result is that the prompt is shown, but it is hidden behind ui elements, if the view is empty, the prompt is visible and interactable.
StoreKit.Transaction has an expirationDate property, but not a gracePeriodExpirationDate property. Product.SubscriptionInfo.RenewallInfo has a gracePeriodExpirationDate but no expirationDate.
If I have enabled a grace period I think I need to check both. That seems more complicated than it should be. Am I missing something?
Hello,
I'm trying to publish a PWA application.
I got a refusal to publish the app because of the in-app purchase.
I asked for more information
I need some clarification regarding in-app purchases.
The application is a PWA that displays the content of the url https://revisions-crpe.app .
The purchase is made on the following site: https://maitresse-jero.com
Do you mean that if I make the in-app purchase available by staying on the url https://revisions-crpe.app the application will be approved?
I can't use services like StoreKit or Swift development because the application is a PWA.
How do other PWA applications with paid services work?
Apple's response
Hello,
We are not able to provide feedback on app concepts or features, but we recommend evaluating your suggestions against the App Store Review Guidelines, as well as the Apple Developer Program License Agreement, and the Human Interface Guidelines.
Additionally, if you are considering implementing any of the following functionality, we recommend reviewing all associated reference material and other resources available on Apple Developer for any additional requirements.
Apple Developer
Apple Copyright and Trademark Guidelines
Game Center
iCloud
In-App Purchase
You may also choose to post a question in the Apple Developer Forums.
Best regards,
My questions
So I wonder if offering direct purchase from https://revisions-crpe.app would be enough to get my pwa app published?
If not, I don't see how I can do it any other way, as I don't develop in Swift. I use PWABuilder.
Thanks for your help! :)
Hi all
We are working on an app that we bought and are looking at which version of StoreKit it uses.
Is there any guidance or methods we can use to quickly determine which version of StoreKit is being used.
Its either Storekit v1 or Storekit v2 but its not clear and we aren't able to get features working correctly.
Hello,
After processing the data I received from another source in my new application, I will offer it for sale as a monthly subscription.
However, pricing for my data source is based on calendar month, but subscription flows start from the purchase date and I could not find such a subscription flow in the store kit.
How can I draw this flow in a way that doesn't violate app store rules regarding pricing?
Hello,
I am looking forward to a really quick help. Thank you for taking time.
I have an app where I give my users monetary rewards based on the game of skills. I have integrated in-app purchases for users when they want to add an amount to my app to play this game of skill.
Now after the results, I would like to send them their monetary rewards to their Apple wallet based on the performance and rules.
Is there any way to pass these rewards to users' Apple wallets through in-app purchases?
As of February 4th, my app is missing titles and subscription descriptions. Only the price with the USD currency symbol is displayed.
Attachment:
Example from 2 Feb Attachment:
I'm working on an application that will include auto-renewable subscription functionality. I'm trying to restrict a few products within a group by using the availability option, for example, only for the US.
However, for a sandbox account with the Germany region, these restricted products are also available to fetch and purchase using StoreKit after providing their IDs through SKProductsRequest.
I tried another scenario where I fetched only products from this group that are available for the sandbox account region in my app. However, after purchasing one of them, in iOS settings on the sandbox account management page, I see a subscription group with all subscriptions, including restricted ones. This means the user is able to purchase them from this page.
Could you please advise on an efficient way to restrict my subscriptions per region? Or maybe this is only a sandbox issue because, according to the documentation, these subscriptions should not be available for restricted regions. Thanks in advance!
Hey everyone!
I'm planning to perform an app transfer of my iOS app.
The app offers auto-renewing subscriptions and already has quite some subscribers - so I definitely don't want to loose them.
I'm using StoreKit2 to perform the IAP and to verify the transactions on device.
The code looks something like this
for await result in Transaction.currentEntitlements {
switch result {
case let.verified(transaction):
// Locally store which item has been purchased
// ...
await transaction.finish()
default:
return
}
}
I'm trying to understand if subscriptions that have been activated on the current Apple Developer Account would still be verified as active after the App Transfer to the new Developer Account.
If this is not the case, is there any way to allow already active subscriptions to continue auto-renewing on the new account without verifying the transactions on my own server?
I would appreciate any kind of feedback.
Thanks in advance!
Hi, I am trying to add In App Purchases into my app. When I run my code in Xcode on a simulator and my own iPhone, it works perfectly fine. But when I submitted my app for App Review, they said that my app had crashed for them when they tried purchasing something. Why is this? Something that might be the problem is that the In App Purchase in the App Store Connect is still in review, but it's been in review for a very long time(~3-5 days) so I am just going to assume that it will be approved when my app is. Again, the app works completely fine on my device.
Here are the three crash logs they gave to me(pastebin is down right now, so using an alternative):
https://pastes.io/g7pjx5fp0m
https://pastes.io/ftjpcoasam
https://pastes.io/5wh0ro6zl2
Here is my code:
https://pastes.io/nivmrvwax9
Please help!
ERROR: 💰 Product purchase for '***' failed with error: Error Domain=RevenueCat.ErrorCode Code=2 "There was a problem with the App Store." UserInfo={source_file=RevenueCat/SKError+Extensions.swift:64, NSUnderlyingError=0x600000c91890 {Error Domain=SKErrorDomain Code=0 "An unknown error occurred" UserInfo={NSLocalizedDescription=An unknown error occurred, NSUnderlyingError=0x600000c68570 {Error Domain=ASDServerErrorDomain Code=1003 "No Token Available When Expected." UserInfo={NSLocalizedFailureReason=No Token Available When Expected.}}}}, readable_error_code=STORE_PROBLEM, NSLocalizedDescription=There was a problem with the App Store., source_function=asPurchasesError}
And, I have also tested with SwiftyStoreKit and encountered the same issue.
I have apple web payment integrated on website, and it work fine when i test it using real cards. I wanted to test it using apple TEST cards, so i invited SANDBOX test user from here https://appstoreconnect.apple.com/access/users/sandbox and logged in to test device using this test id. but it fails to start a merchant session.
System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Authentication failed because the remote party has closed the transport stream.
at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
--- End of inner exception stack trace ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Net.Http.HttpClient.d__58.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at Gateway.MobileWallet.Domain.ApplePay.Clients.RequestPaymentSession.ApplePayPaymentSessionClient.d__3.MoveNext() in
For over a year we have been unable to access the SKAN developer profile and testing customer integrations without one is at best frustratingly slow, at worst impossible due to censorship thresholds.
When I visit this page with our developer account, it says there are no results. We have an enterprise account and drive hundreds of thousands of SKAN installs a day so I don't understand how there could be a permissions or licensing issue.
Has anyone had a similar issue they were able to resolve?
I have contacted support, opened and bumped the issue via Feedback Assistant and, and have even tried contacting people at Apple, but no one seems interested helping us fix the issue.
According to the documentation: https://developer.apple.com/documentation/storekit/transaction/3749696-id
Transaction.id is a unique identifier. However, something that is not clear to me is:
Is the ID unique worldwide? In other words, will there never be any other transaction with the same ID?
Or is it unique only within the context of my app?
Thanks!
I want to charge my customer through my app depending on usage for example - I create an app like Uber and I charge the taxi 1$ on each order created from the app and I collect it at the end of the month, can it be done in Google Play and the app store with IAP and what the rules about it, and if not can I use stripe to do it inside the App or external website that will charge the customer and he will get access to the app as well?
Dear StoreKit Engineers,
I recently migrated my app to freemium model from paid and am using AppTransaction to get original purchase version and original purchase date to determine if user already paid for the app before or not. It seems to be working for normal AppStore users but I am now flooded with complains from VPP users who previously purchased the app. It seems AppTransaction history is absent for these users and these users are asked to sign-in using Apple ID.
What is the solution here?