Search results for

“restore purchases”

22,011 results found

Post

Replies

Boosts

Views

Activity

Reply to Is Apple IAP's transaction_id globally unique?
There are two transactionIdentifiers - the one that comes with the particular purchase and the one in the purchase receipt. Any call to updatedTransactions, including the call when you originally purchase the IAP, has a transaction.transactionIdentifier that is always unique. When you originally purchase an IAP or when you repurchase an IAP for free or when you restore an IAP the receipt will also contain the unique transaction_id of the original purchase transaction.transactionIdentifier.
Topic: App & System Services SubTopic: StoreKit Tags:
Mar ’17
Reply to No record of IAP but user has receipt
Within the app there should be a restore function. You eed this function if the user has two devices. One device purchases the IAP and the other device needs to get the IAP - that's 'restore'. The other device sends a restoreCompletedTransactions (or a restore receipt) to StoreKit and the App Store responds.
Topic: App & System Services SubTopic: StoreKit Tags:
Apr ’18
Reply to IAP - Restore not working on iMessage(MessageExtension)
Added a bug report 44150257. Just be sure of the issue, I paid for one of my Sticker apps that has an In-App Purchase. Deleted the app, reinstalled, and sure enough nothing happens when I tap Restore. No prompts, no restoration. When I tried to actually purchase the app again, it does tell me I've actually bought it and restores.What's odd is everything works fine in the Sandbox Environment. Only seems to be an issue with a live app.The restore code I'm using...func restorePurchases() { SKPaymentQueue.default().add(self) SKPaymentQueue.default().restoreCompletedTransactions() } func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) { for transaction:SKPaymentTransaction in queue.transactions { defaults.set(Purchased, forKey: transaction.payment.productIdentifier) stickersAlreadyBought = true } if ( stickersAlreadyBought == true){ unlockAllStickers() }}
Topic: App & System Services SubTopic: StoreKit Tags:
Sep ’18
Reply to restoreCompletedTransactions not working on iOS 26
From restoreCompletedTransactions(): This method has no effect in the following situations: All transactions are unfinished. The user did not purchase anything that is restorable. You tried to restore items that are not restorable, such as a non-renewing subscription or a consumable product. Your app’s build version does not meet the guidelines for the CFBundleVersion key.
Sep ’25
Reply to Is there any way to implement single in-app-purchase product id for multiple products?
It's unclear exactly what you are suggesting - but there are two types of IAPs, consumables and non-consumables, and each IAP has its own productId. A user can purchase a non-consumable IAP only in quantity 1. Any repurchase of that same non-consumable would be 'for free' and would represent only restoring the original purchase. A user can purchase a consumable IAP in any quantity and multiple times. So perhaps the answer to your 'question' is simply 'use a consumable IAP'. A more precise answer to the question - 'How can I let a user purchase from a large inventory of products'is 'Use a few consumable IAPs called CREDITS and sell them as individual products in packages of, for example, 1 CREDIT and 5 CREDITS and 10 CREDITS. After purchasing, for example, 2 '10 CREDITS' allow the user to select 20 different items from the inventory and each time they select a product, debit their account one CREDIT and credit them with that item from teh inventory. Because
Topic: App & System Services SubTopic: StoreKit Tags:
Aug ’19
Reply to Re-purchasing autorenewing subscription
In response to your statements above:1) this is a payment cancelled from the perspective of the app store because the user made a purchase request and then - after a set of circumstances - failed to execute the purchase. Of course the set of circumstances differs from the user tapping cancel purchase but from the perspective of the 'flow' within the app store it isthe same thing.2) the uialert statement above works whether the user actually canceled a payment or already purchased the subscription and now needs to restore3) You wrote I do not think changing my UI to ask users to Restore before making their first purchase is how we would like to design the purchase experience. Your app, running on a new device, has no way of knowing whether the user made a 'first purchase' on a different device. When asking the user if they wish to make a purchase you must offer the option But if you already purchased this subscription on
Topic: App & System Services SubTopic: StoreKit Tags:
Nov ’16
Reply to Is our in-app purchase model unique?
You will have a number of problems trying to fit a square peg in a round hole. For example, how does a user restore their purchase in another device? How does a user purchase two different products selling for the same price? A better approach would be selling a virtual currency like Tokens as a consumable IAP. You might sell packages of 10 Tokens. The user exchanges Tokens for products. A product could be 3 Tokens, another 8 Tokens. You would need to be responsible for restoring a purchase to other devices owned by the user - that could be done through the users iCloud key-value file or through your server. Be sure to tell app review you are handling the restore function v
Topic: App & System Services SubTopic: StoreKit Tags:
May ’16
Reply to When validating a receipt, what is the correct way to find the most recent transaction for an app with a single subscription?
I should have mentioned that this is happening after using the Restore Purchases button in my app. This calls the restoreCompletedTransactions() method on the default SKPaymentQueue. I then wait for paymentQueueRestoreCompletedTransactionsFinished() and send the receipt to my server for validation. Afterward I go through the items in transactions where the transactionState is restored or purchased and call finishTransaction() for each one. I did some testing, and it seems this is an important step in what's happening. If I validate the same receipt without restoring anything, I get consistent results. The transaction in latest_receipt_info is still not the most recent transaction—but it is the same transaction each time. When I discovered this, I thought I might be able to solve the problem by sorting the transactions by date before calling finishTransaction(). This doesn't seem to make a difference. It's possible I'm overlooking something in my code but it seems like simpl
Topic: App & System Services SubTopic: StoreKit Tags:
Aug ’20
Reply to Is Apple IAP's transaction_id globally unique?
There are two transactionIdentifiers - the one that comes with the particular purchase and the one in the purchase receipt. Any call to updatedTransactions, including the call when you originally purchase the IAP, has a transaction.transactionIdentifier that is always unique. When you originally purchase an IAP or when you repurchase an IAP for free or when you restore an IAP the receipt will also contain the unique transaction_id of the original purchase transaction.transactionIdentifier.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Mar ’17
Reply to No record of IAP but user has receipt
Within the app there should be a restore function. You eed this function if the user has two devices. One device purchases the IAP and the other device needs to get the IAP - that's 'restore'. The other device sends a restoreCompletedTransactions (or a restore receipt) to StoreKit and the App Store responds.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Apr ’18
Reply to Can't login sandbox account
Seems to be working again. I tested just a moment ago and purchase/restore is working again for me in the sandbox.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Nov ’20
Reply to IAP - Restore not working on iMessage(MessageExtension)
Added a bug report 44150257. Just be sure of the issue, I paid for one of my Sticker apps that has an In-App Purchase. Deleted the app, reinstalled, and sure enough nothing happens when I tap Restore. No prompts, no restoration. When I tried to actually purchase the app again, it does tell me I've actually bought it and restores.What's odd is everything works fine in the Sandbox Environment. Only seems to be an issue with a live app.The restore code I'm using...func restorePurchases() { SKPaymentQueue.default().add(self) SKPaymentQueue.default().restoreCompletedTransactions() } func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) { for transaction:SKPaymentTransaction in queue.transactions { defaults.set(Purchased, forKey: transaction.payment.productIdentifier) stickersAlreadyBought = true } if ( stickersAlreadyBought == true){ unlockAllStickers() }}
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Sep ’18
Reply to [Sandbox] Consumable products "already bought"
Have same issue. I have consumable products 2_coins_for_1.99 5_coins_for_4.99 and other consumables I can purchase 2_coins_for_1.99 successfully first time successfully, but when I try to purchase 2_coins_for_1.99 again I got This in app purchase already been bought it will be restored for free I'm testing in a sandbox
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Apr ’21
Reply to restoreCompletedTransactions not working on iOS 26
From restoreCompletedTransactions(): This method has no effect in the following situations: All transactions are unfinished. The user did not purchase anything that is restorable. You tried to restore items that are not restorable, such as a non-renewing subscription or a consumable product. Your app’s build version does not meet the guidelines for the CFBundleVersion key.
Replies
Boosts
Views
Activity
Sep ’25
Reply to Detect a subscription has expired
Listen to updates in Transaction.updates. See Implement proactive in-app purchase restore for more info.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Oct ’22
Reply to Is there any way to implement single in-app-purchase product id for multiple products?
It's unclear exactly what you are suggesting - but there are two types of IAPs, consumables and non-consumables, and each IAP has its own productId. A user can purchase a non-consumable IAP only in quantity 1. Any repurchase of that same non-consumable would be 'for free' and would represent only restoring the original purchase. A user can purchase a consumable IAP in any quantity and multiple times. So perhaps the answer to your 'question' is simply 'use a consumable IAP'. A more precise answer to the question - 'How can I let a user purchase from a large inventory of products'is 'Use a few consumable IAPs called CREDITS and sell them as individual products in packages of, for example, 1 CREDIT and 5 CREDITS and 10 CREDITS. After purchasing, for example, 2 '10 CREDITS' allow the user to select 20 different items from the inventory and each time they select a product, debit their account one CREDIT and credit them with that item from teh inventory. Because
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Aug ’19
Reply to Re-purchasing autorenewing subscription
In response to your statements above:1) this is a payment cancelled from the perspective of the app store because the user made a purchase request and then - after a set of circumstances - failed to execute the purchase. Of course the set of circumstances differs from the user tapping cancel purchase but from the perspective of the 'flow' within the app store it isthe same thing.2) the uialert statement above works whether the user actually canceled a payment or already purchased the subscription and now needs to restore3) You wrote I do not think changing my UI to ask users to Restore before making their first purchase is how we would like to design the purchase experience. Your app, running on a new device, has no way of knowing whether the user made a 'first purchase' on a different device. When asking the user if they wish to make a purchase you must offer the option But if you already purchased this subscription on
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Nov ’16
Reply to Beta App in TestFlight Repeatedly Asks for Sign In
I am facing this issue as a consumer. I recently changed my email associated with my Apple ID(not sure if relevant) and I cannot make any purchases or restore any purchases in any TestFlight app. Has anyone found a solution?
Replies
Boosts
Views
Activity
Aug ’20
Reply to Is our in-app purchase model unique?
You will have a number of problems trying to fit a square peg in a round hole. For example, how does a user restore their purchase in another device? How does a user purchase two different products selling for the same price? A better approach would be selling a virtual currency like Tokens as a consumable IAP. You might sell packages of 10 Tokens. The user exchanges Tokens for products. A product could be 3 Tokens, another 8 Tokens. You would need to be responsible for restoring a purchase to other devices owned by the user - that could be done through the users iCloud key-value file or through your server. Be sure to tell app review you are handling the restore function v
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
May ’16
Reply to When validating a receipt, what is the correct way to find the most recent transaction for an app with a single subscription?
I should have mentioned that this is happening after using the Restore Purchases button in my app. This calls the restoreCompletedTransactions() method on the default SKPaymentQueue. I then wait for paymentQueueRestoreCompletedTransactionsFinished() and send the receipt to my server for validation. Afterward I go through the items in transactions where the transactionState is restored or purchased and call finishTransaction() for each one. I did some testing, and it seems this is an important step in what's happening. If I validate the same receipt without restoring anything, I get consistent results. The transaction in latest_receipt_info is still not the most recent transaction—but it is the same transaction each time. When I discovered this, I thought I might be able to solve the problem by sorting the transactions by date before calling finishTransaction(). This doesn't seem to make a difference. It's possible I'm overlooking something in my code but it seems like simpl
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Aug ’20
Reply to Restoring IAPs with StoreKit does not work in Message Extension
There was a problem with restoring of purchases in Beta 4 that should be addressed in Beta 5. Could you try this there and let me know what the results are?
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Aug ’16
Reply to Selling Dynamic Digital Products
This will work if the IAPs are consumables so the user can purchase another set of ebooks for the same price at some later time. You will need to create a method to restore the purchase on other devices owned by the same user.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Aug ’18
App purchase
When the full version of the app was purchased before the IAP was implemented, the original purchase is not restored and there is no feedback/notification. Ideally, this should also allow a restoration of the purchase.
Replies
1
Boosts
0
Views
338
Activity
Jul ’24