 <p>Check this link </p> <p><a href="https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html" rel="nofollow">https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html</a></p> <p>Apple suggests that the receipt validation should be done at the server side.</p> <p>The status code received if the subscription has expired is 21006.</p> <hr> <p>For RESTORING PURCHASES</p> <pre><code>- (IBAction)retoreinApp:(id)sender { [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; self.restoringInAppStatusLabel.hidden = NO; } </code></pre> <p>It will call the method after getting restore details :</p> <pre><code>- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue { UIAlertView *alert ; if(queue.transactions.count &gt;0) { for (SKPaymentTransaction *transaction in queue.transactions) { NSString *temp = transaction.payment.productIdentifier; NSLog(@"Product Identifier string is %@",temp); } alert = [[UIAlertView alloc ] initWithTitle:@"Restore Transactions" message:@"All your previous transactions are restored successfully." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; } else { alert = [[UIAlertView alloc ] initWithTitle:@"Restore Transactions" message:@"No transactions in your account to be restored." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; } [alert show]; } </code></pre>