Search results for

“restore purchases”

22,105 results found

Post

Replies

Boosts

Views

Activity

Reply to Do I still need to provide a restore button when using storekit2
App Review Guidelines 3.1.1 require a restore mechanism - great to have available for customers. While an app does have the tools available to retrieve a customer purchases and status without requiring the customer to use Restore Purchases - and that is with original StoreKit or StoreKit2. With original StoreKit you would need to retrieve the customers app receipt upon app launch and have your server verify that app receipt with VerifyReceipt service or use App Store Server API with the original_transaction_id. While StoreKit2 can provide this status on device without any server on your end.
Topic: App & System Services SubTopic: StoreKit Tags:
Jan ’22
Reply to subscription sandbox
This is my issue. I have called finishTransaction and they still show up.extension IAPService: SKPaymentTransactionObserver { func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { print (transaction.transactionState.status(), transaction.payment.productIdentifier) switch transaction.transactionState { case .purchasing: break default: print (calling finish on (transaction.payment.productIdentifier)) queue.finishTransaction(transaction) print (finish returned on (transaction.payment.productIdentifier)) } } } func restorePurchaces () { print (restoring purchases) paymentQueue.restoreCompletedTransactions() } }
Topic: App & System Services SubTopic: StoreKit Tags:
Mar ’20
Reply to How to know what AppleID/user did a purchase?
Mhm, wouldn‘t it be enough to just store any originalTransactionId to the current user while he is ordering? In this moment, my server side validation runs and stores the new originalTransactionId to this user account. When he restores purchases while being logged in with another user account, I can check if the originalTransactionId of the purchase currently being validated is assigned to the user currently logged in. Is there‘s a mismatch I tell the user to switch to his other account and deny the validation. Should be working, no?
Topic: App & System Services SubTopic: StoreKit Tags:
Jan ’18
Reply to Is it necessary to have a user registration mechanism if app has subscriptions?
Sounds to me like a simple Restore Purchases workflow would get you in compliance with requirement 3.1.2. Yes, a user who is signed in with their AppleID will have access to their purchases across devices, but only if you've implemented the logic to make it happen. Do you have this? If so, I'd point it out to App Review, otherwise, it is a miss and you should implement it. This does two things: Allows the user to restore that purchase (subscription) on the same device if they uninstalled and reinstalled your app Allows the user to access the content on all of their iOS devices. This would be a great opportunity to take a look at the new StoreKit 2 APIs along with the new on-device receipt validation. Meet StoreKit 2
Topic: App & System Services SubTopic: StoreKit Tags:
Jan ’22
Reply to Subscription Restore receipt validation.
the app receipt will be unique each time it's generated but the transactions within them when returned by verifyReceipt will be updated. So the in_app array is just the transactions encoded in the receipt while the latest_receipt_info contains the current/latest transactions that are persistent or unfinished (aka, no finished consumables are returned in this object). If you are using verifyReceipt or StoreKit2 then you have no need to every have a customer perform a Restore Purchases - you have everything you need. Please see our WWDC22 session on Proactive Restore as your app can be fully up to date on customers state/transactions without requiring the to do anything and can avoid the above entirely. WWDC22 Session: Implement Proactive In-app Purchase Restore
Topic: App & System Services SubTopic: StoreKit Tags:
Jun ’22
Reply to StoreKit 2 in-app purchase restore
If you are using StoreKit2 then “app receipts” and verifyReceipt endpoint “ don’t apply. Those are for Original StoreKit. A “Restore Purchases” action is important as an emergency, ideally your App actively restores service proactively without any customer action but there are cases they may need to manually. The Sync() is how to do this. https://developer.apple.com/documentation/storekit/appstore/3791906-sync/ meanwhile check out our session on this Best practice, https://developer.apple.com/videos/play/wwdc2022/110404/
Topic: App & System Services SubTopic: StoreKit Tags:
Sep ’22
Reply to Unfinished transactions not being emitted on start of app
I have also tried using Product.SubscriptionInfo.Status.updates. Updates do not come in on app launch when a renewal happens when the app is not running. But I do see updates come in when calling AppStore.sync(). This is unlike Transaction.updates, where nothing happens when calling AppStore.sync(). This is not an acceptable workaround, as auto-renewals should be automatic and transparent to the user; not force them to Restore Purchases.
Topic: App & System Services SubTopic: StoreKit Tags:
Mar ’23
Restoring In-App purchases issue
So when I clicked restored for a brand new in-app purchase I made without ever initially buying it. It tells me it has been restored, and this occurs after I already buy the first in-app purchase with my sandbox user. Each In-App purchase is a non-consumable and has its own viewcontroller with its cooresponding productID, here is the restore action@IBAction func restorePurchase(_ sender: Any) { if (SKPaymentQueue.canMakePayments()) { SKPaymentQueue.default().restoreCompletedTransactions()}Would it be because I have the same IBAction restore button in every swift file for each in-app purchase. Where am I going wrong?
1
0
764
Apr ’18
Reply to paymentqueue crash
I fixed the problem by adding an optional method (per Apple's Best Practices) in my in app purchases controller:-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue{ [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];}I had a bug in which I added self as a transaction observer when doing the restore purchase transaction:- (IBAction)restoreCompletedTransactions:(id)sender{ [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];}The crash apparently happened because I never removed self. The optional method fixed the bug.
Topic: App & System Services SubTopic: StoreKit Tags:
Apr ’16
Will app review be rejected after remove restore purchased button because we do make sure user no need it now?
Dear all, Because Our backend currently finished the whole IAP process with multiple-device, therefore, user will no need to use restore button anymore. But old version already sumbit for review with Restore Button. Question: Will our app submit a new version with no restore button be rejected, becasue not commit to the Apple Review Standard?Where can we explain our new app version no need the restore button anymore for prevent rejected by review team?
2
0
833
Jan ’20
Reply to SKReceiptRefreshRequest causing App Store Review to be rejected
If I understand correctly, you are calling SKReceiptRefreshRequest on startup if there is no receipt present - correct? Why do you do that? If you have IAPs, and you want to be sure that previously-purchased IAPs are correctly enabled in the app, then you just need a prominent restore purchases button that calls ReceiptRefresh when pressed. The app should wait for the user to press the button. If your concern is to prevent pirated copies of your app from running on hacked devices where a (valid) receipt is not present - sorry, you can't do that in this way.
Oct ’22
Reply to Visibility of "Restore Purchases"
My app is a game something like Draw something : a Face to Face game but asynchronous (ie. based on a server that store the party state and so also player (create with an email or with facebook login). I see a lot of game with these mechanics and it does not seem to be a problem to be validated. Right ?BTW I've understood that I need to provide a restore purchase feature.
Topic: App & System Services SubTopic: StoreKit Tags:
Apr ’17
If I restore muy purchases with my server, Do I need the restore button?
I have an app that needs user log-in and when the user do a succesful purchase I save that the purchse and the user, so everytime that the user logs in the app I check in my server if that user has purchases and If he has purchases I restore his purchases.Do I need a restore button?, Do I need execute the function restoreCompletedTransactions() ?
1
0
427
Jul ’17
Reply to Is an observer needed for IAP?
I can't seem to be able to edit my message:I'm new to IAP. I want to restore transactions so I start by putting the line below in a button:[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];Examples have stated I need to set up an observer using one more line[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue]restoreCompletedTransactions];The thing is using just one line without the observer works. Am I missing something?Is this because I'm not observing, but initiating the search for paid transactions myself? That the observer is only if I want the app to automatically restore purchases without the user needing to press a button checking if there are paid purchases?
Aug ’16
Reply to Do I still need to provide a restore button when using storekit2
App Review Guidelines 3.1.1 require a restore mechanism - great to have available for customers. While an app does have the tools available to retrieve a customer purchases and status without requiring the customer to use Restore Purchases - and that is with original StoreKit or StoreKit2. With original StoreKit you would need to retrieve the customers app receipt upon app launch and have your server verify that app receipt with VerifyReceipt service or use App Store Server API with the original_transaction_id. While StoreKit2 can provide this status on device without any server on your end.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Jan ’22
Reply to subscription sandbox
This is my issue. I have called finishTransaction and they still show up.extension IAPService: SKPaymentTransactionObserver { func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { print (transaction.transactionState.status(), transaction.payment.productIdentifier) switch transaction.transactionState { case .purchasing: break default: print (calling finish on (transaction.payment.productIdentifier)) queue.finishTransaction(transaction) print (finish returned on (transaction.payment.productIdentifier)) } } } func restorePurchaces () { print (restoring purchases) paymentQueue.restoreCompletedTransactions() } }
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Mar ’20
Reply to How to know what AppleID/user did a purchase?
Mhm, wouldn‘t it be enough to just store any originalTransactionId to the current user while he is ordering? In this moment, my server side validation runs and stores the new originalTransactionId to this user account. When he restores purchases while being logged in with another user account, I can check if the originalTransactionId of the purchase currently being validated is assigned to the user currently logged in. Is there‘s a mismatch I tell the user to switch to his other account and deny the validation. Should be working, no?
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Jan ’18
Reply to Is it necessary to have a user registration mechanism if app has subscriptions?
Sounds to me like a simple Restore Purchases workflow would get you in compliance with requirement 3.1.2. Yes, a user who is signed in with their AppleID will have access to their purchases across devices, but only if you've implemented the logic to make it happen. Do you have this? If so, I'd point it out to App Review, otherwise, it is a miss and you should implement it. This does two things: Allows the user to restore that purchase (subscription) on the same device if they uninstalled and reinstalled your app Allows the user to access the content on all of their iOS devices. This would be a great opportunity to take a look at the new StoreKit 2 APIs along with the new on-device receipt validation. Meet StoreKit 2
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Jan ’22
Reply to Subscription Restore receipt validation.
the app receipt will be unique each time it's generated but the transactions within them when returned by verifyReceipt will be updated. So the in_app array is just the transactions encoded in the receipt while the latest_receipt_info contains the current/latest transactions that are persistent or unfinished (aka, no finished consumables are returned in this object). If you are using verifyReceipt or StoreKit2 then you have no need to every have a customer perform a Restore Purchases - you have everything you need. Please see our WWDC22 session on Proactive Restore as your app can be fully up to date on customers state/transactions without requiring the to do anything and can avoid the above entirely. WWDC22 Session: Implement Proactive In-app Purchase Restore
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Jun ’22
Reply to StoreKit 2 in-app purchase restore
If you are using StoreKit2 then “app receipts” and verifyReceipt endpoint “ don’t apply. Those are for Original StoreKit. A “Restore Purchases” action is important as an emergency, ideally your App actively restores service proactively without any customer action but there are cases they may need to manually. The Sync() is how to do this. https://developer.apple.com/documentation/storekit/appstore/3791906-sync/ meanwhile check out our session on this Best practice, https://developer.apple.com/videos/play/wwdc2022/110404/
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Sep ’22
Reply to Unfinished transactions not being emitted on start of app
I have also tried using Product.SubscriptionInfo.Status.updates. Updates do not come in on app launch when a renewal happens when the app is not running. But I do see updates come in when calling AppStore.sync(). This is unlike Transaction.updates, where nothing happens when calling AppStore.sync(). This is not an acceptable workaround, as auto-renewals should be automatic and transparent to the user; not force them to Restore Purchases.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Mar ’23
Restore in-app purchase fail
I am facing weired restored in-app purchase fail problem. The same account, download the same app and restore previous purchase, but there are one device always restore fail but others are all good. Does anyone have the same problem before?
Replies
2
Boosts
0
Views
1.1k
Activity
Dec ’17
Restoring In-App purchases issue
So when I clicked restored for a brand new in-app purchase I made without ever initially buying it. It tells me it has been restored, and this occurs after I already buy the first in-app purchase with my sandbox user. Each In-App purchase is a non-consumable and has its own viewcontroller with its cooresponding productID, here is the restore action@IBAction func restorePurchase(_ sender: Any) { if (SKPaymentQueue.canMakePayments()) { SKPaymentQueue.default().restoreCompletedTransactions()}Would it be because I have the same IBAction restore button in every swift file for each in-app purchase. Where am I going wrong?
Replies
1
Boosts
0
Views
764
Activity
Apr ’18
Reply to paymentqueue crash
I fixed the problem by adding an optional method (per Apple's Best Practices) in my in app purchases controller:-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue{ [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];}I had a bug in which I added self as a transaction observer when doing the restore purchase transaction:- (IBAction)restoreCompletedTransactions:(id)sender{ [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];}The crash apparently happened because I never removed self. The optional method fixed the bug.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Apr ’16
Will app review be rejected after remove restore purchased button because we do make sure user no need it now?
Dear all, Because Our backend currently finished the whole IAP process with multiple-device, therefore, user will no need to use restore button anymore. But old version already sumbit for review with Restore Button. Question: Will our app submit a new version with no restore button be rejected, becasue not commit to the Apple Review Standard?Where can we explain our new app version no need the restore button anymore for prevent rejected by review team?
Replies
2
Boosts
0
Views
833
Activity
Jan ’20
Reply to SKReceiptRefreshRequest causing App Store Review to be rejected
If I understand correctly, you are calling SKReceiptRefreshRequest on startup if there is no receipt present - correct? Why do you do that? If you have IAPs, and you want to be sure that previously-purchased IAPs are correctly enabled in the app, then you just need a prominent restore purchases button that calls ReceiptRefresh when pressed. The app should wait for the user to press the button. If your concern is to prevent pirated copies of your app from running on hacked devices where a (valid) receipt is not present - sorry, you can't do that in this way.
Replies
Boosts
Views
Activity
Oct ’22
Reply to Visibility of "Restore Purchases"
My app is a game something like Draw something : a Face to Face game but asynchronous (ie. based on a server that store the party state and so also player (create with an email or with facebook login). I see a lot of game with these mechanics and it does not seem to be a problem to be validated. Right ?BTW I've understood that I need to provide a restore purchase feature.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Apr ’17
If I restore muy purchases with my server, Do I need the restore button?
I have an app that needs user log-in and when the user do a succesful purchase I save that the purchse and the user, so everytime that the user logs in the app I check in my server if that user has purchases and If he has purchases I restore his purchases.Do I need a restore button?, Do I need execute the function restoreCompletedTransactions() ?
Replies
1
Boosts
0
Views
427
Activity
Jul ’17
Reply to Is an observer needed for IAP?
I can't seem to be able to edit my message:I'm new to IAP. I want to restore transactions so I start by putting the line below in a button:[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];Examples have stated I need to set up an observer using one more line[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue]restoreCompletedTransactions];The thing is using just one line without the observer works. Am I missing something?Is this because I'm not observing, but initiating the search for paid transactions myself? That the observer is only if I want the app to automatically restore purchases without the user needing to press a button checking if there are paid purchases?
Replies
Boosts
Views
Activity
Aug ’16